我想问一下关于EJB的问题。我正在使用JPA的eclipselink。
我的代码中的无状态对象中有两个无状态对象。
这两个无状态对象可能使用两个不同的事务吗?
答案 0 :(得分:1)
绝对。您可能会发现阅读transaction attributes。
非常有用如果第一个类中的被调用方法(比如StatelessFirst
)具有事务类型REQUIRED
(默认值)或REQUIRES_NEW
,则在调用它时将启动新事务。如果这样调用第二个类中的方法(例如StatelessSecond
)并使用事务类型REQUIRES_NEW
,则第一个事务将被挂起,第二个事务将在第二个方法执行时启动。当StatelessSecond
中的方法完成,第二个事务提交时,将恢复第一个事务,并将控制权传递回StatelessFirst
。
要在调用StatelessSecond
之前进行第一次事务提交,可以使用bean-managed transactions。这使您可以完全控制事务管理,因此在StatelessFirst
中您可以开始事务,然后提交然后调用StatelessSecond
。如果您采用这种方法,请注意BMT中的can't perform nested transactions。
允许您保持在CMT内的另一个选项是将事务行为从StatelessFirst
拉出到具有REQUIRES_NEW
的第三个EJB中。然后模式是:
StatelessFirst
,启动交易A StatelessFirst
调用NewBean
,启动事务B,并执行一些工作NewBean
提交事务B并返回StatelessFirst
调用StatelessSecond
,启动事务C并执行其工作StatelessSecond
提交事务C并返回StatelessFirst
完成,并提交事务A(无论如何都没有任何更改)