Jakarta ee EJB事务需要新的
我用REQUIRE_NEW注释了一个方法,我希望它能在一个新事务中执行。代码如下:Jakarta ee EJB事务需要新的,jakarta-ee,transactions,ejb,ejb-3.0,Jakarta Ee,Transactions,Ejb,Ejb 3.0,我用REQUIRE_NEW注释了一个方法,我希望它能在一个新事务中执行。代码如下: public class EJBAImpl implements EJBA { @EJB private EJBB ejbb; public void someMethod(entity){ ejbb.create(entity); //doMoreStuff } } public class BaseEJB { public void
public class EJBAImpl implements EJBA {
@EJB
private EJBB ejbb;
public void someMethod(entity){
ejbb.create(entity);
//doMoreStuff
}
}
public class BaseEJB {
public void create(Entity entity) {
//saveHere
}
}
public class EJBBImpl extends BaseEJB implements EJBB {
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void create(Entity entity) {
super.create(entity);
}
}
然而,当我在create方法调用后的行中放置一个断点时(这里说的是domorseuff),我的实体并没有保存在数据库中。我错过了什么?我查过了,EJBB是一个代理
编辑:如果方法是继承的,那么它就不能工作。解决方案是更改EJBB中的方法,如下所示:
public class EJBBImpl extends BaseEJB implements EJBB {
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void anotherNameForCreate(Entity entity) {
super.create(entity);
}
}
有人知道当重写另一个类中的方法时它为什么不工作吗?正如第13.3.7.1节中描述的ejb3.1规范一样,@TransactionAttribute具有特殊规则 如果bean类有超类,则应用以下附加规则 1) 在超类S上指定的事务属性应用于 由S定义的业务方法。如果是类级事务属性 未在S上指定,相当于 S上的TransactionAttribute(必需) 2) 可以在业务方法M上指定事务属性 由类S定义以重写方法M的事务属性 在类S上显式或隐式指定的值 3) 如果S类的方法M重写了由 S的超类M的事务属性由 适用于S类的上述规则
根据我的理解,你在第三点,因此,对于EJB容器,实际事务属性是AcRESRESION新的。
只有在通过EJB引用从另一个bean调用方法时,才会创建新事务。在同一个bean中调用create不会产生新的事务。因此,您必须从另一个bean调用它。您可以将自身作为@EJB导入并调用self.method(),这将使它