トランザクションの開始を担当するEJBコンポーネントに問題があります。Jboss5.01を使用しています。
基本的に、特定のトランザクションがコミットされた後に、特定のコードを実行したいと思います。特定のコードには、独自のトランザクションを作成するEJBコンポーネントの呼び出しも含まれます。
前のトランザクションがコミットされた後にコードが実行されることを確認するために、同期コンポーネントをトランザクションコンポーネントに登録しました。
Transaction tx = transactionManager.getTransaction();
tx.registerSynchronization(new CallbackSynchronization());
Synchronizaton
実装は基本的に次のことを行います。
class CallbackSynchronization implements Synchnronization {
private AccountService service; // This is a Stateless session bean
public CallbackSynchronization(AccountService service) {
this.service = service;
}
public afterCompletion(int status) {
if(Status.STATUS_COMMITTED == status) {
service.deleteAccounts();
}
}
}
問題は、電話をかけるとservice.deleteAccounts()
、トランザクションがアクティブではないことを最終的に通知する例外が発生することです。
そして、これは私を混乱させるものです。でマークされたメソッドを持つEJB@TransactionAttribute(TransactionAttributeType.REQUIRED)
は、アクティブでない場合に新しいトランザクションを作成します(REQUIREDはJBOSSのデフォルトです)。
それでは、なぜ「トランザクションがアクティブではない」というメッセージが表示されるのですか?
どうもありがとう、
ヤニフ