![](/img/trans.png)
[英]Spring 4 + JPA (Hibernate 4) + JTA transaction manager doesn't flush automatically
[英]EJB 3.0 -> Spring -> JPA (JTA as transaction manager)
我目前正在從事一個項目,該項目包括EJB 3.0(無狀態SB),JPA(作為提供程序的Hibernate),作為事務管理器的JTA。 該應用程序服務器是JBoss AS7。Spring用於集成EJB和JPA。
一切似乎都運行良好,除非EJB中發生任何異常,否則Spring將關閉持久性單元。 根據后續請求,將再次創建持久性單元,這將變得很耗時,並且在理想情況下也不應該發生。
以下是配置詳細信息
persistence.xml
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<class>com.test.User</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
spring-application-context.xml
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<jee:jndi-lookup id="dataSource" jndi-name="java:/datasources/test" />
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"></entry>
<entry key="hibernate.current_session_context_class" value="jta" />
<entry key="hibernate.connection.release_mode" value="auto" />
</map>
</property>
<property name="persistenceUnitPostProcessors">
<list>
<bean class="com.transaction.processor.JtaPersistenceUnitPostProcessor">
<property name="jtaMode" value="true"/>
<property name="jtaDataSource" ref="dataSource"/>
</bean>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager"></property>
<property name="autodetectUserTransaction" value="false"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
JtaPersistenceUnitPostProcessor類負責將事務類型設置為JTA,並將數據源設置為jta-datasource。
任何人都可以對此提供任何幫助。
提前致謝。
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:jboss/TransactionManager" />
<property name="userTransactionName" value="java:comp/UserTransaction" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
您未指定任何錯誤消息。 您可以在配置文件中添加這些行。
我看到您使用JTA事務管理器,並且僅當您使用分布式事務並使用JNDI時才使用它。 JTA tran。 經理監聽通過從JNDI數據源獲取的連接發生的TX。 如果您在代碼中創建了數據源,並且它不是Web容器的一部分,但僅限於應用程序內部。 Web服務器中的容器,JTA無法正常工作。
如果要在單個應用程序中實現Tx管理器。 對於JPA事務管理器而言,上下文非常可靠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.