[英]Jboss EAP 7 CDI JTA @Transactional
我正在努力了解应该如何处理在Jboss EAP 7实例上运行的JTA和CDI。 我可以通过注入来自容器的UserTransaction对象来手动获得事务,但是当我使用@Transactional注释方法时,出现了关于没有可用事务的异常。...我的问题是。 是否缺少任何配置? 我简要阅读了一下,也许我应该自己创建一个拦截器以使其起作用,但是我没有找到任何一致的示例...
在默认的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...");
}
}
MyBean.withinTransaction
(例如,通过REST),则会创建一个新事务(如果尚不存在)。 MyBean.outsideTransaction
,则不会创建任何事务。 this.outsideTransaction()
从withinTransaction
,您仍然可以在现有的交易outsideTransaction
(因为拦截器只绑定到bean边界) this.withinTransaction()
从outsideTransaction
没有新的交易产生(因为拦截器只绑定到bean边界) outsideTransaction
将是第二个bean AnotherBean
( @Inject
的MyBean
,并且您调用MyBean.withinTransaction
,则将创建一个新事务(如果尚不存在)。 因为您跨越了AnotherBean.outsideTransaction
和MyBean.withinTransaction
之间的bean边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.