2014-10-22 38 views

回答

0

對於Java EE 6及更低版本,最好不要在應用程序內部創建線程,因爲正如您所看到的,您會丟失上下文。但是,在Java EE 7中,您可以使用新的ManagedExecutorService。這在WildFly中可用,但不是JBoss AS 7.x.

您也可以注入ManagedExecutorService@Resource

如果不是使用WildFly的選項,唯一的方法就是在啓動新線程之前如何複製它。雖然這可能是相當危險的,因爲交易意味着由容器管理,並且您在容器外部使用它。

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>