代码之家  ›  专栏  ›  技术社区  ›  Charles Brown

EJB:两个无状态对象使用两个不同的事务

  •  1
  • Charles Brown  · 技术社区  · 10 年前

    我想问关于EJB的问题。我正在使用JPA的eclipse链接。

    在我的代码中,无状态对象中有两个无状态对象。

    这两个无状态对象是否可能使用两个不同的事务?

    1 回复  |  直到 10 年前
        1
  •  1
  •   hugh    10 年前

    绝对地您可能会发现阅读有关 transaction attributes .

    如果第一个类中的调用方法(例如 StatelessFirst )具有事务类型 REQUIRED (默认值)或 REQUIRES_NEW ,当它被调用时,它将启动一个新的事务。如果这会调用第二个类中的方法(比如 StatelessSecond )交易类型为 要求_NEW 在第二方法执行时,第一事务被挂起并且第二事务被启动。当方法在 无状态秒 完成,第二个事务提交,第一个事务恢复,控制权传递回 无状态优先 .

    要在之前提交第一个事务 无状态秒 被调用,您可以使用 bean-managed transactions 。这使您可以完全控制事务管理,因此在 无状态优先 您可以开始一个事务,然后提交,然后调用 无状态秒 。如果你采用这种方法,请注意 can't perform nested transactions 在BMT中。

    允许您留在CMT中的另一个选项是将事务行为从 无状态优先 到第三个EJB中 要求_NEW 。那么模式是:

    • 客户端调用 无状态优先 ,启动事务A
    • 无状态优先 电话 NewBean ,它启动事务B,并执行一些工作
    • 新Bean 提交事务B并返回
    • 无状态优先 电话 无状态秒 ,它启动事务C并执行其工作
    • 无状态秒 提交事务C并返回
    • 无状态优先 完成并提交事务A(无论如何都没有任何更改)
    推荐文章