Spring / Hibernate 4(非JPA)/ Infinispan / Atomikos没有找到任何事务管理器

时间:2013-11-14 19:53:17

标签: spring infinispan hibernate-4.x atomikos

我正在使用Tomcat7并需要JTA用于Infinispan Cache。我使用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>

1 个答案:

答案 0 :(得分:3)

查看弹簧文档设置jtaTransactionManager上的LocalSessionFactoryBean属性应该处理的事情。

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

基本上将它添加到bean的定义应该就足够了。

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

相关问题