2013-12-19 65 views
2

我们正在尝试为我们的新项目建立一个新的JTA事务配置。 该项目利用spring JPA和spring atom与atomikos JTA事务管理器一起使用。带Spring数据和Spring JPA的Atomikos - 持久性问题

我们配置了我们的xml,就像我们在atomikos教程中看到的一样。

目前我们设法启动我们的服务器没有错误。

问题是当我们试图在@Transactional服务中使用jpaRepository持久化一个实体时,我们的日志显示atomikos jta tranascion正在发生并提交了succues。 但是我们的数据库现在在表中显示了新的条目。

我们之前有类似的问题,当2个豆扫描相同的软件包,并产生像上面的“伪持续”效果。

这里是我们的xml:

<bean 
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

<tx:annotation-driven transaction-manager="transactionManager" 
    proxy-target-class="true" /> 

<bean id="AtomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" 
    init-method="init" destroy-method="close"> 
    <property name="forceShutdown" value="false" /> 
</bean> 

<bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> 
    <property name="transactionTimeout" value="300" /> 
</bean> 

<bean id="transactionManager" 
    class="org.springframework.transaction.jta.JtaTransactionManager" 
    depends-on="AtomikosTransactionManager,AtomikosUserTransaction"> 
    <property name="transactionManager" ref="AtomikosTransactionManager" /> 
    <property name="userTransaction" ref="AtomikosUserTransaction" /> 
    <property name="allowCustomIsolationLevels" value="true" /> 
</bean> 

<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" 
    init-method="init" destroy-method="close"> 

    <property name="uniqueResourceName" value="DataSource" /> 
    <property name="xaDataSource" ref="dataBase" /> 
    <property name="poolSize" value="3" /> 

</bean> 

<bean id="dataBase" class="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" 
    lazy-init="true"> 

    <property name="pinGlobalTxToPhysicalConnection" value="true" /> 
    <property name="url" 
     value="mydb" /> 
    <property name="user" value="user" /> 
    <property name="password" value="password" /> 

</bean> 

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="packagesToScan" 
     value="packages" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
     </props> 
    </property> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
    </property> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="database" value="MYSQL" /> 
      <!-- <property name="databasePlatform" value="${hibernate.dialect}"/> --> 
      <property name="showSql" value="false" /> 
      <property name="generateDdl" value="false" /> 
      <!-- <property name="hibernate.connection.autocommit" value="false"/> --> 
     </bean> 
    </property> 
    <property name="jpaPropertyMap"> 
     <map> 
      <entry key="hibernate.connection.autocommit" value="false" /> 
     </map> 
    </property> 
</bean> 

任何想法有什么不对这个配置文件?

谢谢!

回答

0

原来我们在entityManagerFactory中缺少jpaPropertyMap中的一些属性。 这是正确的配置:

<bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="packagesToScan" 
     value="packages" /> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
      <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
     </props> 
    </property> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
    </property> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="database" value="MYSQL" /> 
      <property name="showSql" value="false" /> 
      <property name="generateDdl" value="false" /> 
     </bean> 
    </property> 
    <property name="jpaPropertyMap"> 
     <map> 
      <entry key="javax.persistence.transactionType" value="JTA" /> 
      <entry key="hibernate.current_session_context_class" value="jta" /> 
      <entry key="hibernate.transaction.manager_lookup_class" 
       value="com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup" /> 
      <entry key="hibernate.connection.autocommit" value="false" /> 
     </map> 
    </property> 
</bean> 
相关问题