0

このスニペットを見てください:

@Stateless 
public class A {
   @EJB
   B b; // B is stateful EJB

   b.init(); // initialize Sets and List that are used in doSthInB(C c)
   public void doSthInA(){
        for(C c){
           b.doSthInB(c); // doSthInB use REQUIRES_NEW transaction type
        }
   }
}

私の意図は、タイプ C のオブジェクトのコレクションを処理することです。メソッド doSthInB はエンティティを変更し、メソッド呼び出しの最後に結果を保持する必要があります (そのため、REQUIRES_NEW を使用しています)。入力コレクションの一部の要素の処理中に何らかのエラーが発生した場合、この操作のみを永続化するべきではなく、ログに記録する必要があり、他の要素の処理を停止するべきではありません。

処理中に得られるものは次のとおりです。javax.ejb.EJBException: java.lang.IllegalStateException: Bean is associated with a different unfinished transaction

多分私の考えは間違っています。任意のヒント?

4

1 に答える 1

2

Stateless Bean に Stateful を注入しているようです。ほとんどの場合、これは仕様で許可されているにもかかわらず、これはエラーです。

この設計上の決定が意味することを完全に認識しているかどうかはわかりません。そうでない場合は、このアプローチを使用しないようにしてください。これがおそらくあなたの例外の原因だと思います。

于 2014-02-04T11:27:31.093 に答える