@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)什么时候提交?

时间:2012-07-23 14:17:17

标签: java-ee ejb jta container-managed

名为Aby的EJB方法调用另一个名为Bob

的EJB方法

Bob标有@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

bob事务何时提交?:

a)bob调用结束时

b)aby调用结束时

c)其他。当?

2 个答案:

答案 0 :(得分:35)

我认为A是对的。当调用方法Bob时,它会为其创建新事务,并且方法Aby将被挂起,直到Bob事务被提交为止。

另请注意,它必须是来自其他bean的方法才能使其成为事务性的,从同一个bean调用的方法不会充当业务方法。

有关详细说明,请参阅此article

答案 1 :(得分:6)

实际上,我认为替代方案是正确的。参见:

EJB 3.0 - Nested Transaction != Requires New?

我还做了一些研究,并查看db(Hyper Sonic)日志,以实际查看它何时在db中提交,并在REQUIRES_NEW方法完成时提交。但是由于处理事务的容器可能会根据容器而改变。我在调试时使用了JBoss。和Hibernate(值得一提,因为我通过检查db日志来测试它)。 我认为因为你询问交易而涉及数据库写入。

我的想法与之前的答案不同,所以说服会很有趣。