Как начать транзакцию в JTA EntityManager - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть сопоставление JPA с HSQLDB, и файл persistence.xml читает, как показано ниже:

<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 ()

Может кто-нибудь дать мне знать, как при таких обстоятельствах запускать и фиксировать транзакции.

С уважением,

Satya

Ответы [ 2 ]

2 голосов
/ 03 ноября 2012

это то, что говорит Javadocs для getTransaction ...

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

Таким образом, в основном это означает, что если атрибутом типа транзакции является JTA с источником данных XA jdbc, то вы получите исключение IllegalStateException.

Предлагаемое исправление: попробуйте установить тип транзакции как локальный для ресурса с источником данных localTx jdbc, иначе это приведет к исключению IllegalStateException.

1 голос
/ 19 февраля 2011

Наконец-то я смог справиться с этим, изменив строку:

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