Java 我可以从同一EJB中不支持TransactionAttributeType.REQUIRED的另一个方法调用TransactionAttributeType.REQUIRED的方法吗
我有以下代码结构,我需要关于如何从同一EJB中不受支持的事务类型方法级联启动本地事务的指南Java 我可以从同一EJB中不支持TransactionAttributeType.REQUIRED的另一个方法调用TransactionAttributeType.REQUIRED的方法吗,java,ejb-3.1,Java,Ejb 3.1,我有以下代码结构,我需要关于如何从同一EJB中不受支持的事务类型方法级联启动本地事务的指南 @Stateless @TransactionManagement(value = TransactionManagementType.CONTAINER) public class SessionBean implements SessionBeanInterface{ @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@Stateless
@TransactionManagement(value = TransactionManagementType.CONTAINER)
public class SessionBean implements SessionBeanInterface{
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void methodA() {
methodB();
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void methodB() {
}
}
目前,当我尝试这一点,我得到以下异常
PuId=App#EJB.jar#Persistence没有活动事务
事务属性类型只是表示此方法不支持任何事务。如果在调用该方法时有一个,它将被挂起 因此,在每种情况下,对
methodB
的调用都不会有任何事务。事务属性类型现在引发异常,因为。。。好。。。因为事务是必需的,但不会创建
因此,在这种情况下,您可以在
方法b
上使用类型,该类型现在总是以新事务开始,而不管之前是否有新事务(将被挂起)。事务属性类型只是表示此方法不支持任何事务。如果在调用该方法时有一个,它将被挂起
因此,在每种情况下,对methodB
的调用都不会有任何事务。事务属性类型现在引发异常,因为。。。好。。。因为事务是必需的,但不会创建
因此,在此场景中,您可以在methodB
上使用类型,该类型现在总是以新事务开始,而不管之前是否有新事务(将被挂起)。您调用“methodB”的方式不会给EJB容器提供为您启动事务上下文的机会。为此,必须通过远程或本地视图/接口调用该方法
它是为您提供这些附加功能的容器,因此有必要通过接口来路由您的调用。(另请注意,这是代理设计模式)
若您像在上述代码段中所做的那个样直接调用“methodB”,那个么它只是另一个并没有容器干预的方法调用 您调用“methodB”的方式不会给EJB容器提供为您启动事务上下文的机会。为此,必须通过远程或本地视图/接口调用该方法
它是为您提供这些附加功能的容器,因此有必要通过接口来路由您的调用。(另请注意,这是代理设计模式)
若您像在上述代码段中所做的那个样直接调用“methodB”,那个么它只是另一个并没有容器干预的方法调用 谢谢你的回复。!讽刺的是,我也抱着同样的想法,尝试了新的方法B,但还是失败了。谢谢你的回复。!讽刺的是,我也有同样的想法,尝试了REQUIRES_NEW For methodB,但还是失败了。那么我怎么用代理来称呼它呢?看看这个-那么我怎么用代理来称呼它呢?看看这个-