問題タブ [openejb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - OpenEJB に MDB を無視するように指示する
最終的にメッセージをキューに入れるアクティビティの単体テストを作成しました。メッセージがそのキューに入れられるとすぐに、メッセージ駆動型 Bean が処理を開始します。しかし、単体テストで MDB をテストしたくありません。それらを無視するように OpenEJB に指示するにはどうすればよいですか?
いくつかのプロパティを使用して OpenEJB をセットアップしました。
を設定する必要があることはわかってopenejb.deployments.classpath.exclude
いますが、正しい値がわかりません。
たとえば、私のクラスの名前はorg.example.mdb.MyMDB
.
java - OpenEJB&JUnit:Sessioncontext.isCallerInRoleは常にfalseを返します
コードのどこかに、現在のユーザーが何らかの役割を持っているかどうかをチェックするセッションBeanを作成する必要があります。
私のEJB3をユニットテストするために、私はOpenEJBを試しています。セキュリティのテストに関する彼らの例に従いましたが、SessionContect.isCallerInRole()を使用して役割をコードでテストすると、常にfalseが返されます。
なぜそれが機能しないのですか?
説明のためにいくつかのコードを書きました。
私のローカルインターフェース:
私のEJB:
私のテスト:
mysql - Hibernateを使用したEJBトランザクションのロールバック
そのため、OpenEJBとHibernateでコンテナー管理トランザクションを使用しており、動作させようとしている非常に単純なトランザクションロールバックシナリオがあります。私のDBMSはMySQLです。
まず、基本的なエンティティの操作/作成を実行するデフォルトのトランザクション伝播(必須)を持つステートレスEJBから始めます。
また、指定された伝播のアノテーションを持つ2番目のステートレスEJBもあります(ただし、それでも「必須」です)。この2番目のEJBメソッドから、その基本的なエンティティの操作/作成を行う最初のEJBのメソッドを呼び出します。IDをまだ持っていないエンティティが返されるので、entityManager.flush()を呼び出しました。これにより、最初のEJBから返されたエンティティで使用するIDが得られます。
ここで問題が発生します。その2番目のEJBには、システム例外であれ、ある種の例外であれ、問題があります。ロールバックを強制したいので、このEJBには、ctx.setRollbackOnly()を呼び出すために使用する@ResourceSessionContextctxメンバーがあります。
これは私がログに見るものです:
デバッグ-TX必須:トランザクションorg.apache.geronimo.transaction.manager.TransactionImpl@540eb4caを開始しました
....もの、最終的に私がログに記録しているスタックトレース....
DEBUG-TX必須:トランザクションorg.apache.geronimo.transaction.manager.TransactionImpl@540eb4caのsetRollbackOnly()
DEBUG-TX必須:トランザクションorg.apache.geronimo.transaction.manager.TransactionImpl@540eb4caのロールバック
しかし、データベースを確認すると、最初のEJBからの変更はまだデータベースに残っています。私は何が欠けていますか?
java - EJB3 コンテナに関して認証するにはどうすればよいですか?
ビジネス クラスを EJB3 セキュリティ アノテーションで保護しています。Spring コントローラーからこれらのメソッドを呼び出したいのですが、どうすればよいですか?
編集セットアップに関する情報を追加します。Web コンテナには Tomcat を使用し、EJB を Tomcat に埋め込むには OpenEJB を使用しています。私は春のどのバージョンにも落ち着いていないので、多かれ少なかれ提案を受け付けています。
現在のセットアップの編集User
は次のように機能します。ログインフォームと、 SessionContext 内に pojo を配置するコントローラーがあります。誰かがサイトの保護された部分にアクセスするたびに、アプリケーションはユーザー pojo をチェックし、そこにある場合はロールをチェックしてからページを表示し、適切なメッセージを表示しないかログイン ページにリダイレクトしない場合はページを表示します。これで、 openejb security examples にあるこのコードのリミックスUser
である可能性のあるセキュリティ コンテキストをバイパスする内部の call メソッドのおかげで、ビジネス コールが行われます。
maven - JettyとOpenEJB間のJNDI競合を解決するにはどうすればよいですか?
私はOpenEJBを内部に持つJetty(Mavenから)を実行しています。問題は、それらがJNDIコンテキストを介して競合することです。この問題は、しばらく前にStephenConnollyによって解決策とともに説明されました。解決策はかなり時代遅れに見え(私はJetty 7.xを使用していますが、Jetty 6.x用です)、私にはあまり明確ではありません。JettyとOpenEJBを一緒に実行することが可能かどうか誰かが説明できますか?例を見るのは素晴らしいことです。
hibernate - OpenEJB でデータソースを宣言するにはどうすればよいですか?
OpenEJB 3.1.4 + Tomcat 6 でアプリケーションをデプロイしようとしています。このアプリケーションは JBoss 内で正常にデプロイされますが、OpenEJB で動作させたいと考えています。
基本的に、データソースを構成し、それを EAR for OpenEJB でデプロイする方法を知りたいです。
たった今:
EJB は OpenEJB の JNDI ブラウザで見つけることができますが、hibernate はデータソースを見つけられないようです (データベース スキーマを更新できません) - stdout から:
私persistence.xml
のデータソースへのポイント:
次のようなデータソースファイルを含めようとしましたsrc/main/application/mysql-ds.xml
:
そして、次のような別のものsrc/main/application/openejb.xml
:
しかし、それらのどれも私のアプリコンテナによってロード/考慮されていないようです。何か案は?
java - スタブと openejb フレームワークを使用した ejb のテスト
別のものが注入されている EJB をテストしようとしています。テスト目的で、注入された EJB にスタブを使用したいと考えています。テスト用の EJB のフレームワークとして openEJB を使用しました。
EJB は次のとおりです。
実際に注入された EJB :
EJB のスタブ バージョン:
そして使用されたJUnitテスト:
特定の ejb-jar を使用して、実際の EJB の使用をスタブ 1 でオーバーライドしようとしました (サービスでデフォルトの「Bean」の代わりに「BeanStub」を使用したい)。
残念ながら、EJB が宣言されているという問題があります。
アプローチや ejb-jar の書き方に何か問題がありますか?
unit-testing - OpenEJB を使用した EJB リポジトリのテスト - 変更をロールバックする方法
OpenEJB を使用して EJB ベースのリポジトリをテストしようとしています。新しい単体テストが実行されるたびに、DB を「初期」状態にしたいと考えています。テストの後、すべての変更をロールバックする必要があります (テストが成功したかどうかに関係なく)。簡単な方法でそれを達成する方法は?UserTransaction を使用してみました-テストの開始時に開始し、終了時に変更をロールバックします(以下に示すように)。理由はわかりませんが、このコードでは、行のロールバック変更が実行された後、DB のすべての変更 (単体テスト中に行われたもの) が残されます。私が書いたように、外部 DB スキーマなどを使用せずに、最も単純な方法で実現したいと考えています。
ヒントを事前にありがとう!
ピーター