2012-06-07 72 views
0

我目前正在開發一個包含EJB 3.0(無狀態SB),JPA(Hibernate作爲提供者),JTA作爲事務管理器的項目。應用程序服務器是JBoss AS 7. Spring用於集成EJB和JPA。EJB 3.0 - > Spring - > JPA(JTA作爲事務管理器)

所有似乎都正常工作,除非在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-數據源。

任何人都可以請提供任何幫助。

在此先感謝。

回答

0
<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" /> 

您沒有指定任何錯誤消息。你可以在你的配置文件中添加這些行。