我們有一個已經使用JPA和guice-persist的現有j2se項目。現在,因爲我們要添加JMS功能,所以需要2階段提交和JTA。我們將使用bitronix事務管理器,因爲沒有容器(如spring)。使用Guice的麻煩與JTA/bitronix一起存在
據我瞭解,我們要做的第一件事就是從RESSOURCE-LOCAL
更改事務型持久性單元,以JTA
,因爲我們希望數據庫事務投給承諾而不是提交。收集所有選票後,第2階段完成提交。
隨着guice-persist我們使用@Transactional
註釋的方法,應該在單個事務中運行。 JPAPersistModule
提供了一個EnitiyManagerFactory,它用於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()
所提供的實體管理器。
我很困難,此刻。有什麼方法可以和JTA一起使用guice-persist嗎?或者我們真的必須放棄項目中的guice-persist?或者,如果我們想要使用JTA(Bitronix),那麼是否有替代品?
在我的情況下,我們改變了DI框架並現在使用CDI。不是因爲這個問題,而是因爲決定將所有東西移植到J2EE應用程序(JBoss - > CDI)。但是爲JTA寫一個自定義攔截器看起來就像是要走的路。感謝你的回答! –
乾杯!我不能推薦JOOQ足夠的btw ... –
@Oje你可以提供一個存儲庫GIT哪裏有可能瞭解的步驟,pleeeese? :) – Alexian