【问题标题】:Is that possible to have two transaction types = required_new in a stateless object?在无状态对象中是否可能有两种事务类型 = required_new?
【发布时间】:2015-08-23 18:05:23
【问题描述】:

请看下面的伪代码。

Java method A(){

  Java method B(){}

}

这是一个 Java EJB 应用程序的 sn-p。应用程序正在使用 JTA 事务。

我想知道是否可以将方法 A 和 B 声明为 transaction_type = requires_new。

坦率地说,我几乎看不到任何在线教程允许在无状态对象中使用两个 requires_new 事务类型。我看到最多的是方法A声明为required,方法B声明为requires_new。

谢谢。

【问题讨论】:

    标签: java transactions ejb jta


    【解决方案1】:

    您可以在无状态会话 bean 中使用任意数量的标记为 Requires_New 的方法。但是您必须知道,只有在 ejb 客户端调用该方法时才会创建新事务,而不是从其他 bean 方法内部调用。因此,如果您想从 A 方法、B 方法调用以希望创建新事务,则无论事务属性如何,这都不会发生。您必须通过 bean 接口调用它(或者将该方法放在另一个 bean 中,或者再次查找同一个 bean 并通过接口而不是内部调用该方法)

    【讨论】:

      【解决方案2】:

      如果您在 methodA 和 methodB 上都使用 Requires_New,那么事务的目的是什么。因为基本上您正在为这两种方法创建一个新事务。这与单独运行它们一样好。
      如果您只想从事务中排除方法,请使用 NotSupported 属性。

      您已经看到具有 RequiresNew 和 Required 属性的方法,因为在事务中,事务是在使用 Requires_New 的第一个方法调用时启动的,然后该事务被另一个使用 Required 的方法使用。

      【讨论】:

      • 我对这两种方法都应用transaction type = requires_new的原因是因为我希望方法B在继续运行方法A之前提交(当然方法A也需要稍后提交)如果方法A发生任何事情运行方法B后,方法B中的东西不会回滚。
      猜你喜欢
      • 2020-12-04
      • 2021-05-09
      • 2023-03-24
      • 2015-10-24
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多