【发布时间】:2012-01-30 19:25:17
【问题描述】:
我遇到了负责启动事务的 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() 时,我得到一个异常,最终告诉我事务未处于活动状态。
这让我很困惑。带有@TransactionAttribute(TransactionAttributeType.REQUIRED) 标记的方法的 EJB 如果一个不活动的事务将创建一个新事务(REQUIRED 是 JBOSS 中的默认值)。
为什么我会收到“交易未激活”?
非常感谢,
亚尼夫
【问题讨论】:
标签: java transactions jboss ejb transactionmanager