0

我正在使用 Tomcat7 并且需要 JTA 用于 Infinispan 缓存。我将 Spring 3.x 与 Hibernate 4(非 JPA)和 Atomikos 用于 JTA。我在 Atomikos 库或 Hibernate 4 的文档中找不到事务管理器查找类。所有示例均适用于 Hibernate 版本 3 或使用 JPA。Infinispan 找不到事务管理器。

这是我的配置:

 <bean id="myDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"
      init-method="init" destroy-method="close">
      <property name="uniqueResourceName" value="rsname" />
      <property name="xaDataSourceClassName"
       value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
      <property name="xaProperties">
       <props>
        <prop key="URL">${db.url}</prop>
        <prop key="user">${db.user}</prop>
        <prop key="password">${db.pass}</prop>
       </props>
      </property>
      <property name="maxPoolSize" value="50" />
      <property name="minPoolSize" value="20" />

 </bean>


  <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="mappingLocations" value="classpath*:hibernate/**/*.hbm.xml" />

    <property name="hibernateProperties">
      <value>
        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
        hibernate.show_sql=true
        hibernate.cache.region.factory_class=org.hibernate.cache.infinispan.InfinispanRegionFactory
        hibernate.cache.use_query_cache=true
        hibernate.cache.use_second_level_cache=true

      </value>
    </property>
  </bean>

  <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.J2eeUserTransaction">
  <property name="transactionTimeout" value="300" />
 </bean>

 <tx:annotation-driven />
  <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>
  <tx:advice id="txAdvice">
  <tx:attributes>
  <tx:method name="*" rollback-for="Throwable" />
  </tx:attributes>
</tx:advice>
4

1 回答 1

3

查看设置jtaTransactionManager属性的spring docsLocalSessionFactoryBean应该处理好事情。

<property name="jtaTransactionManager" ref="transactionManager" />

基本上将其添加到您的 bean 的定义中就足够了。

关于您的配置的另一个注意事项,您正在使用<tx:annotation-driven />,所以基本上您<tx:advice .. />什么都不做,只会占用空间。

于 2013-11-14T22:22:20.663 回答