2017-07-20 11 views
0

ステートレスセッションBeanでトランザクションをロールバックする必要があることを通知するにはどうすればよいですか? たとえば、いくつかのビジネスデータでLuceneIndexを更新するステートレスEJBがあります。このメソッドは、いくつかのEJBコールを持つトランザクションで呼び出されます。 後のEJBのいくつかがトランザクションをロールバックすると、すでに書かれたLuceneIndexエントリをロールバックできるように、この問題についてどのように通知できますか?ステートレスセッションBeanをトランザクション対応にする方法

答えて

1

あなたが現在EJBContextのへの参照を注入し、それを照会することによってこれを行うことができます。

@Stateless 
public class LuceneDriver { 

    @Resource 
    private EJBContext ejbContext; 

    public void performLuceneStuff(...) { 
     try { 
      ... 
      // update lucene data 
      ... 
      // update some business data 
      ... 
     } catch (BusinessException e) { 
      if (ejbContext.getRollbackOnly()) { 
       // rollback lucene changes 
      } 
     } 
    } 

    ... 

} 
+0

をしかし、ROLLBACKが、私の方法performLuceneStuff(後に同じトランザクション内の別のEJBで初期化された場合、どのような)がすでに終了しています? – Ralph

+1

それは問題ではありません。 EJBは常にトランザクションの認識度が高くなっています。 'ejbContext.getRollbackOnly()'が動作しない唯一の時間は、他のEJBが新しいトランザクションを開始した場合です。新しいトランザクションは、明示的に構成した場合にのみ開始されます。 –

+0

私はまだホースに立っているかもしれません... 私は、同じトランザクション(私のBeanではない)の他の誰かが失敗したときに、トランザクションマネージャによって呼び出されるコールバックメソッドを登録する仕組みを期待しています。すでに書き込まれたインデックスファイルを元に戻すことができます。 – Ralph

関連する問題