gpt4 book ai didi

java - EJB : Two stateless objects use two different transaction

转载 作者:行者123 更新时间:2023-11-30 08:01:59 25 4
gpt4 key购买 nike

我想问有关EJB的问题。我正在使用JPA的eclipselink。

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

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

最佳答案

绝对是的。您可能会发现阅读 transaction attributes 很有用。 .

如果您的第一个类(例如 StatelessFirst)中被调用的方法具有事务类型 REQUIRED(默认)或 REQUIRES_NEW,当它被调用它将启动一个新的事务。如果随后调用事务类型为 REQUIRES_NEW 的第二个类(例如 StatelessSecond)中的方法,则第一个事务将挂起,并在第二个方法执行时启动第二个事务。当 StatelessSecond 中的方法完成时,第二个事务提交,第一个事务恢复,并将控制权传回 StatelessFirst

要在调用 StatelessSecond 之前提交第一个事务,您可以使用 bean-managed transactions 。这使您可以完全控制事务管理,因此在 StatelessFirst 中您可以开始事务,然后提交,然后调用 StatelessSecond。如果您采用这种方法,请注意您can't perform nested transactions在骨髓移植中。

另一个允许您保留在 CMT 范围内的选项是将事务行为从 StatelessFirst 中提取到第三个 EJB(使用 REQUIRES_NEW)。那么模式是:

  • 客户端调用StatelessFirst,启动事务A
  • StatelessFirst 调用 NewBean,后者启动事务 B,并执行一些工作
  • NewBean 提交事务 B 并返回
  • StatelessFirst 调用 StatelessSecond,后者启动事务 C 并执行其工作
  • StatelessSecond 提交事务 C 并返回
  • StatelessFirst 完成,并提交事务 A(无论如何都没有任何更改)

关于java - EJB : Two stateless objects use two different transaction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31764180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com