0

Java EE アプリで問題が発生しました。一般に、1 つのオブジェクトを永続化し、JMS を送信し、MDB でそのオブジェクトを見つけようとしています。うまくいくこともありますが、JPA 検索で null を受け取ることもあります。トランザクションが完了していないと思われますが、解決策が見つかりません。

正しく理解できているかどうかわかりませんが、CMT では、@Local または @Remote インターフェイスから Session Bean のメソッドを呼び出した瞬間にトランザクションが開始されますか? このセッション Bean にメソッドのチェーンがあり、そのうちの 1 つだけがオブジェクトを保持する場合はどうすればよいですか? チェーンされたすべてのメソッドは 1 つのトランザクションで呼び出されますか? それらのいくつかがインターフェイスでも公開されている場合はどうなりますか?

JMS の送信は、チェーンされたメソッドの 1 つです。むしろ、このメソッドをインターフェイスで公開し、オブジェクトを永続化するメソッドの後に呼び出す必要がありますか? インターフェイスでそのメソッドを公開したくない場合はどうすればよいですか?

EJB の知識がなくて申し訳ありません。助けてくれてありがとう:)

4

2 に答える 2

0

MDB Bean にロジックを記述せず、そのためにセッション Bean を使用し、それを MDB に注入することをお勧めします。メソッド呼び出しについて、同じクラスでメソッドを呼び出している場合、 @REQUIRES_NEW 属性を与えても新しいトランザクションは開かれません。これを行うには、Bean 自体を注入し、注入された Bean を呼び出すと、新しいトランザクションが開かれます。

于 2012-07-20T03:15:10.690 に答える
0

同じエンティティ マネージャーでオブジェクトを永続化して見つけましたか?

以前にオブジェクトを永続化する同じトランザクションにいる場合は、いつでもオブジェクトを見つけることができます。永続化して異なるトランザクションを持つオブジェクトを見つけた場合、永続化トランザクションがコミットされるまでオブジェクトを表示できません。

私の提案は次のとおりです。オブジェクトをいつでも見つけられるように、同じトランザクションを使用してください。または、Java EE アプリケーションでは、単純に同じエンティティ マネージャーを使用します。

于 2012-07-20T01:21:30.850 に答える