我遇到了负责启动事务的 EJB 组件的问题。我正在使用 Jboss 5.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 不活动,则带有标记为方法的 EJB@TransactionAttribute(TransactionAttributeType.REQUIRED)
将创建一个新事务(REQUIRED 是 JBOSS 中的默认值)。
那为什么我会得到“交易不活跃”?
非常感谢,
亚尼夫