绝对地您可能会发现阅读有关
transaction attributes
.
如果第一个类中的调用方法(例如
StatelessFirst
)具有事务类型
REQUIRED
(默认值)或
REQUIRES_NEW
,当它被调用时,它将启动一个新的事务。如果这会调用第二个类中的方法(比如
StatelessSecond
)交易类型为
要求_NEW
在第二方法执行时,第一事务被挂起并且第二事务被启动。当方法在
无状态秒
完成,第二个事务提交,第一个事务恢复,控制权传递回
无状态优先
.
要在之前提交第一个事务
无状态秒
被调用,您可以使用
bean-managed transactions
。这使您可以完全控制事务管理,因此在
无状态优先
您可以开始一个事务,然后提交,然后调用
无状态秒
。如果你采用这种方法,请注意
can't perform nested transactions
在BMT中。
允许您留在CMT中的另一个选项是将事务行为从
无状态优先
到第三个EJB中
要求_NEW
。那么模式是:
-
客户端调用
无状态优先
,启动事务A
-
无状态优先
电话
NewBean
,它启动事务B,并执行一些工作
-
新Bean
提交事务B并返回
-
无状态优先
电话
无状态秒
,它启动事务C并执行其工作
-
无状态秒
提交事务C并返回
-
无状态优先
完成并提交事务A(无论如何都没有任何更改)