【问题标题】:Jboss EAP 7 CDI JTA @TransactionalJboss EAP 7 CDI JTA @Transactional
【发布时间】:2017-02-09 16:06:28
【问题描述】:

我很难理解我应该如何处理在 Jboss EAP 7 实例上运行的 JTA 和 CDI。我可以通过注入来自容器的 UserTransaction 对象来手动获取事务,但是当我使用 @Transactional 注释该方法时,我得到一个关于没有可用事务的异常......我的问题是。是否缺少任何配置?我简要地阅读了也许我应该自己创建一个拦截器以使其工作,但我还没有找到任何一致的例子......

【问题讨论】:

  • 我觉得这个问题没有足够的细节来获得比如何设置具有数据库连接的应用程序的完整 JEE 教程更好的答案。这超出了 StackOverflow 的范围。你能缩小你的问题范围吗?例如,您问“是否缺少任何配置”而没有提及您实际拥有的配置。或者粘贴任何可以告诉我们您是否按照您所说的正确操作的代码。
  • 您是否做过任何会禁用自动交易的事情?
  • 我们需要知道你把@Transactional注解放在哪里了。请分享您的代码。您不需要任何拦截器,因为“@Transactional”已经是一个拦截器绑定。
  • 大家好,感谢您的回答....我试图在一个方法中使用@Transaction,当我使用注入的对象手动打开事务时,同样的方法可以正常工作。我的问题是,我应该怎么做才能让 Transactional 注释在一个简单的应用程序上工作?如果没有特殊配置,除了在 jboss 实例上运行它。所以我的应用程序有问题...
  • 如果您发布代码,并且我们看到您如何注释您的 bean,我们可以提供帮助。问题是,如果您使用的是纯 CDI bean,@Transactional 需要一个拦截器实现,它不是开箱即用的。如果您使用 ejb bean,那么无论如何您都不需要@Transactional,至少如果您使用容器管理事务

标签: java cdi jta java-ee-7 jboss-eap-7


【解决方案1】:

在默认的 JEE 容器管理环境中,只有企业 bean(通常使用 @Stateless bean)是事务性的。一旦你从外部输入这样一个 bean,事务就会打开。使用@javax.transaction.Transactional 注解,您可以控制事务的行为,但在默认情况下这不是必需的。

示例 bean:

@Stateless
public MyBean {
   public void withinTransaction() {
     System.out.println("i'm running within a transaction");
   }
   @Transactional(TxType.NOT_SUPPORTED)
   public void outsideTransaction() {
     System.out.println("no transaction available...");
   }
}
  • 如果您从 Servlet 调用 MyBean.withinTransaction(例如通过 REST),则会创建一个新事务(如果尚未存在)。
  • 如果您调用MyBean.outsideTransaction,则不会创建任何事务。
  • 如果您从withinTransaction 调用this.outsideTransaction(),您仍然可以在outsideTransaction 中使用事务(因为拦截器只绑定到bean 边界)
  • 如果您从 outsideTransaction 调用 this.withinTransaction(),则不会创建新事务(因为拦截器仅绑定到 bean 边界)
  • 如果 outsideTransaction 是第二个 bean AnotherBean 的一部分,即 @Injects MyBean,并且您调用 MyBean.withinTransaction,那么将创建一个新事务(如果尚未存在)。因为您跨越了AnotherBean.outsideTransaction 和MyBean.withinTransaction 之间的bean 边界。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多