Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以从同一EJB中不支持TransactionAttributeType.REQUIRED的另一个方法调用TransactionAttributeType.REQUIRED的方法吗_Java_Ejb 3.1 - Fatal编程技术网

Java 我可以从同一EJB中不支持TransactionAttributeType.REQUIRED的另一个方法调用TransactionAttributeType.REQUIRED的方法吗

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)

我有以下代码结构,我需要关于如何从同一EJB中不受支持的事务类型方法级联启动本地事务的指南

@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,但还是失败了。那么我怎么用代理来称呼它呢?看看这个-那么我怎么用代理来称呼它呢?看看这个-