すでに JPA と guice-persist を使用している既存の j2se プロジェクトがあります。ここで、JMS 機能を追加したいので、2 フェーズ コミットと JTA の要求があります。コンテナーがないため (Spring など)、bitronix トランザクション マネージャーを使用します。
私の理解では、最初にやらなければならないことは、永続化ユニットの transaction-type を から に変更することですRESSOURCE-LOCAL
。JTA
これは、データベース トランザクションがcommitではなくcommitに投票するようにするためです。コミットは、すべての投票を収集した後、フェーズ 2 で行われます。
guice-persist@Transactional
では、単一のトランザクションで実行する必要があるメソッドにアノテーションを使用します。はEnitiyManagerFactory を提供し、注釈付きメソッドをラップするJPAPersistModule
ように、guice-persist 内部クラスに使用されます。JpaLocalTxnInterceptor
今、私は次のような例外を受け取ります
java.lang.IllegalStateException: A JTA EntityManager cannot use getTransaction()
at org.hibernate.ejb.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:1009)
at com.google.inject.persist.jpa.JpaLocalTxnInterceptor.invoke(JpaLocalTxnInterceptor.java:57)
...
提供されたエンティティマネージャーのJpaLocalTxnInterceptor
呼び出しのため。getTransaction()
現時点では、かなり行き詰まっています。guice-persist を JTA と一緒に使用する方法はありますか? それともプロジェクトから guice-persist を削除する必要がありますか? または、(Bitronix を使用して) JTA を実行したい場合、guice-persist に代わるものはありますか?