在CMT bean中使用程序化事务控制

时间:2012-12-26 11:33:00

标签: java java-ee ejb jboss5.x

我需要手工提交CMT bean的事务。有一个循环处理多个记录,每个记录应该在自己的事务中处理。我想将方法​​事务支持标记为NOT_SUPPORTED,然后从方法控制事务。但是,我无法从UserTransaction检索SessionContext实例,也没有将其作为JNDI资源java:/module/UserTransaction注入。

是否有机会在自己的交易中处理CMT bean中的多条记录而不引入新的BMT bean进行此类处理?

1 个答案:

答案 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,以便容器处理事务方面。