Java EJB3.0事务传播

Java EJB3.0事务传播,java,jakarta-ee,ejb-3.0,Java,Jakarta Ee,Ejb 3.0,关于EJB3.0事务传播,我有以下基本问题 这是我的场景:EJB服务->POJO->EJB Dao。由于组织内部的一些限制,我需要坚持这种架构 因此,在EJB服务Tx启动时,我指向一个POJO,它返回本地EJB DAO。现在在ejbdao的方法中,我注入了持久性上下文和实体管理器,并且这些方法已经用TransactionAttribute(必需)进行了注释。因此,我的问题是,在DAO EJB中,是将使用服务EJB的事务上下文,还是由于其间的POJO层,它将启动一个新事务 任何帮助都将不胜感激 谢

关于EJB3.0事务传播,我有以下基本问题

这是我的场景:EJB服务->POJO->EJB Dao。由于组织内部的一些限制,我需要坚持这种架构

因此,在EJB服务Tx启动时,我指向一个POJO,它返回本地EJB DAO。现在在ejbdao的方法中,我注入了持久性上下文和实体管理器,并且这些方法已经用TransactionAttribute(必需)进行了注释。因此,我的问题是,在DAO EJB中,是将使用服务EJB的事务上下文,还是由于其间的POJO层,它将启动一个新事务

任何帮助都将不胜感激


谢谢..Vijay

因为事务是从“EJB服务”启动的,它将被传播到“EJB DAO”。事务被设置为一种线程本地(至少在概念上,我不知道实现是如何实现的)。除非POJO执行类似于在新创建的线程中运行DAO的操作(对于手动创建的线程来说,无论如何都不适合JavaEE)。

谢谢Nikos。POJO的职责主要是执行一些内存逻辑,并使用DAO层进行持久化。为此,它通过上下文查找检索本地引用,并对其调用方法。所以我想它应该是好的,是的,它会(实际上我在上面添加了线程创建的东西,只是为了涵盖这个例外情况)。在新创建的线程中运行并不适合JavaEE。但是,您必须使用容器管理的线程池中的线程,以便事务、安全上下文等能够正确传播;我的意思是手动创建线程。