我需要手工提交CMT bean的事务。有一个循环处理多个记录,每个记录应该在自己的事务中处理。我想将方法事务支持标记为NOT_SUPPORTED,然后从方法控制事务。但是,我无法从UserTransaction
检索SessionContext
实例,也没有将其作为JNDI资源java:/module/UserTransaction
注入。
是否有机会在自己的交易中处理CMT bean中的多条记录而不引入新的BMT bean进行此类处理?
答案 0 :(得分:1)
如果你使用CMT,你不应该自己搞乱交易。
我建议您创建一个操作需要在事务中的方法,将其标记为REQUIRES_NEW
,然后从循环中调用它。
每次调用该方法时,将暂停当前事务(如果有),并为该操作启动一个新事务。
这样的事情:
@EJB
SomeEJBLocal anotherme;
public void loop() {
for(/* something */) {
anotherme.single();
}
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void single() {
// do stuff
}
您必须注入另一个EJB实例并调用single,以便容器处理事务方面。