我了解到java:comp / UserTransaction不适用于Jboss 7.x中的非EE线程。我的应用程序中有非EE线程默认调用java:comp / UserTransaction,请问如何将此默认值更改为java:jboss / UserTransaction?我需要帮助..
答案 0 :(得分:0)
对于Java EE 6和更低版本,最好不要在应用程序中创建线程,因为您可以看到丢失了上下文。但是,在Java EE 7中,您可以使用新的ManagedExecutorService
。这在WildFly中可用,但不适用于JBoss AS 7.x。
您也可以ManagedExecutorService
注入@Resource
。
如果它不是使用WildFly的选项,唯一的方法是在启动新线程之前将其复制一些。虽然这可能相当危险,因为交易意味着由容器管理,而你在容器外使用它。
答案 1 :(得分:0)
如果您有Hibernate配置文件,例如hibernate.cfg.xml
,您可以添加此属性:
<property name="jta.UserTransaction">java:jboss/UserTransaction</property>
我在this document找到了它,它对我有用。您的hibernate.cfg.xml
文件应如下所示:
<hibernate-configuration>
<session-factory>
...
<property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
<property name="transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
<property name="jta.UserTransaction">java:jboss/UserTransaction</property>
...
</session-factory>
</hibernate-configuration>