簡體   English   中英

EJB 3.0->春季-> JPA(作為事務管理器的JTA)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM