2011-02-19 68 views
0

我有JPA映射HSQLDB和persistence.xml中如下記載:如何啓動交易的JTA EntityManager的

<persistence-unit name="HMC"> 
    <jta-data-source>java:hmc</jta-data-source> 
    <class>org.hmc.jpa.models.BloodGroup</class> 
    <class>org.hmc.jpa.models.ContactInfo</class> 
    <properties> 
     <property name=hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> 
    </properties> 
</persistence-unit> 

,並得到的EntityManager爲: entManagerFactory = Persistence.createEntityManagerFactory("HMC");

我也有我的JBoss5定義數據源.1用於hsqldb。如果我開始事務,它會拋出IllegalStateException:一個JTA EntityManager不能使用getTransaction()

任何人都可以讓我知道如何在這些情況下啓動和提交事務。

問候,

薩蒂亞

回答

1

最後,我可以通過改變行處理這個問題:

<persistence-unit name="HMC" transaction-type="RESOURCE_LOCAL"> 
+0

真的沒有幫助。我仍然有同樣的錯誤 – Anton

2

這是什麼getTransaction的javadoc說...

EntityTransaction getTransaction( )

Return the resource-level EntityTransaction object. The EntityTransaction instance may be used serially to begin and commit multiple transactions. 

Returns: 
    EntityTransaction instance 
Throws: 
    IllegalStateException - if invoked on a JTA entity manager 

所以基本上這意味着如果事務類型屬性是帶有jdbc XA數據源的JTA,那麼您將得到IllegalStateException。

建議的修正:嘗試使用localTx jdbc數據源將事務類型設置爲資源本地,否則將導致IllegalStateException。