37

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

Bob标有@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

事务何时bob提交?:

a)bob调用结束时

b)aby调用结束时

c) 其他。什么时候?

4

2 回答 2

49

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

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

请参阅这篇很棒的文章以获得进一步的解释。

于 2012-07-23T14:32:23.373 回答
6

实际上,我认为替代 a 是正确的。看:

EJB 3.0 - 嵌套事务!= 需要新的?

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

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

于 2013-03-30T10:20:34.123 回答