【问题标题】:EJB 3.0 Transaction propagationEJB 3.0 事务传播
【发布时间】:2013-12-20 10:58:13
【问题描述】:

关于 EJB 3.0 事务传播,我有以下基本问题。

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

所以,在 EJB 服务 Tx 启动时,我直接指向一个返回本地 EJB DAO 的 POJO。现在在 EJB DAO 的方法中,我注入了持久性上下文和实体管理器,并且这些方法已经用 TransactionAttribute(必需)进行了注释。所以我的问题是,在 DAO EJB 中是否会使用 Service EJB 的事务上下文,或者由于两者之间的 POJO 层,它是否会启动一个新事务。

任何帮助将不胜感激。

谢谢..维杰

【问题讨论】:

    标签: java jakarta-ee ejb-3.0


    【解决方案1】:

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

    【讨论】:

    • 谢谢尼科斯。 POJO 的职责主要是做一些内存中的逻辑并使用 DAO 层进行持久化。为此,它通过上下文查找检索本地引用并调用其上的方法。所以我想应该没问题吧
    • 是的,它会的(实际上我在上面添加了线程创建的东西只是为了覆盖这个-异常情况)。
    • 在新创建的线程中运行并非不适合 Java EE。但是,您必须使用容器管理的线程池中的线程,以便事务、安全上下文等内容能够正确传播。
    • 是的,你是对的,我可能应该澄清一下;我的意思是手动创建线程。
    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    相关资源
    最近更新 更多