我正在使用一个带有EJB和CMT事务的应用程序。我有一个EJB(我们称其为EJB1),通过注释定义了一个CMT,使用“requires_new”:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
由于目前还没有任何交易,因此它会创建一个。现在,这个EJB1调用另一个EJB(EJB2)。我在研究中发现的唯一创建另一个事务的方法是使用“requires_new”,例如:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
它可以完美地工作,新的事务已经创建。问题在于回滚的情况:当EJB2失败时,只有它的事务被回滚,正如预期的那样。当EJB1失败时,所有的事务也将被回滚,这也是预期的,但不是我所需要的。。。
我需要的类似,只有这个区别:当EJB1失败时,它应该被回滚,但如果EJB2没有失败,我希望它仍然提交。
我让自己清晰吗?当其父级失败时,我不想要子事务被回滚。我想为每个从主EJB调用的EJB都有独立的事务(就像一个并行的事务)。