`
liuguofeng
  • 浏览: 436651 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

spring+mybatis+atomikos 实现JTA事务

    博客分类:
  • Java
 
阅读更多

http://www.iteye.com/topic/1113929

 

 

最近弄一个框架,使用spring3.0.5+mybatis3.0.5,需要访问多库,要应用分布式事务JTA,这是用atomikos 3.70版本,并把配置做一下记录。

 

配置多个数据源

 

Xml代码  收藏代码
  1. <!-- 第一个数据库 -->  
  2.     <bean id="dataSource" class="com.atomikos.jdbc.SimpleDataSourceBean"  
  3.         init-method="init" destroy-method="close">  
  4.         <property name="uniqueResourceName" value="mysql/main" />  
  5.         <property name="xaDataSourceClassName"  
  6.             value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />  
  7.         <property name="xaDataSourceProperties"  
  8.             value="URL=${jdbc.url.a};user=${jdbc.username.a};password=${jdbc.password.a}" />  
  9.         <property name="exclusiveConnectionMode" value="true" />  
  10.         <property name="connectionPoolSize" value="10" />  
  11.         <property name="validatingQuery">  
  12.             <value>SELECT 1</value>  
  13.         </property>  
  14.     </bean>  
  15.     <!-- 第二个数据库 -->  
  16.     <bean id="dataSourceB" class="com.atomikos.jdbc.SimpleDataSourceBean"  
  17.         init-method="init" destroy-method="close">  
  18.         <property name="uniqueResourceName" value="mysql/news" />  
  19.         <property name="xaDataSourceClassName"  
  20.             value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />  
  21.         <property name="xaDataSourceProperties"  
  22.             value="URL=${jdbc.url.b};user=${jdbc.username.b};password=${jdbc.password.b}" />  
  23.         <property name="exclusiveConnectionMode" value="true" />  
  24.         <property name="connectionPoolSize" value="10" />  
  25.         <property name="validatingQuery">  
  26.             <value>SELECT 1</value>  
  27.         </property>  
  28.     </bean>  

 

 

配置mybatis的SessionFactory

 

 

Xml代码  收藏代码
  1. <bean id="sqlSessionFactoryB" class="org.mybatis.spring.SqlSessionFactoryBean">  
  2.     <property name="configLocation" value="classpath:mybatis/mybatis-config-b.xml" />  
  3.     <property name="dataSource" ref="dataSourceB" />  
  4. </bean>  
  5.   
  6. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  7.     <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />  
  8.     <property name="dataSource" ref="dataSource" />  
  9. </bean>  

 这里使用的是SessionFactory,不是org.springframework.orm.ibatis.SqlMapClientFactoryBean,在mybatis3中用SqlMapClientFactoryBean汇报com.ibatis.common.xml.NodeletException 异常。

 

configLocation 对应的mybatis配置,跟平时配置一样。

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3. <configuration>  
  4.     <typeAliases>  
  5.         <typeAlias alias="User"  type="com.lantii.domain.User"/>  
  6.     </typeAliases>  
  7.     <mappers>  
  8.         <mapper resource="com/lantii/dao/UserMapper.xml" />  
  9.     </mappers>  
  10. </configuration>    

 事务这块用spring管理atomikos

 

Xml代码  收藏代码
  1. <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"  
  2.         init-method="init" destroy-method="close">  
  3.         <property name="forceShutdown">  
  4.             <value>true</value>  
  5.         </property>  
  6.     </bean>  
  7.   
  8.     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">  
  9.         <property name="transactionTimeout" value="300" />  
  10.     </bean>  
  11.   
  12.     <bean id="springTransactionManager"  
  13.         class="org.springframework.transaction.jta.JtaTransactionManager">  
  14.         <property name="transactionManager">  
  15.             <ref bean="atomikosTransactionManager" />  
  16.         </property>  
  17.         <property name="userTransaction">  
  18.             <ref bean="atomikosUserTransaction" />  
  19.         </property>  
  20.     </bean>  
  21.   
  22.     <aop:aspectj-autoproxy />  
  23.   
  24.     <aop:config  proxy-target-class="true">  
  25.         <aop:advisor pointcut="execution(* *com.lantii.service..*(..))"  
  26.             advice-ref="txAdvice" />  
  27.     </aop:config>  
  28.   
  29.     <tx:advice id="txAdvice" transaction-manager="springTransactionManager">  
  30.         <tx:attributes>  
  31.             <tx:method name="get*"  propagation="REQUIRED"  read-only="true" />  
  32.             <tx:method name="find*"  propagation="REQUIRED"  read-only="true" />  
  33.             <tx:method name="has*"  propagation="REQUIRED"  read-only="true" />  
  34.             <tx:method name="locate*"  propagation="REQUIRED"  read-only="true" />  
  35.             <tx:method name="*"  propagation="REQUIRED" rollback-for="Exception"  />  
  36.         </tx:attributes>  
  37.     </tx:advice>  

 

Mapper的管理及注入

 

Xml代码  收藏代码
  1. <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  2.         <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  3.         <property name="mapperInterface" value="com.lantii.dao.UserMapper" />  
  4.     </bean>  
  5.       
  6.     <bean id="roleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  7.         <property name="sqlSessionFactory" ref="sqlSessionFactoryB" />  
  8.         <property name="mapperInterface" value="com.lantii.dao.RoleMapper" />  
  9.     </bean>  
  10.   
  11.     <bean id="userService" class="com.lantii.service.UserServiceImpl">  
  12.         <property name="userMapper" ref="userMapper" />  
  13.         <property name="roleMapper" ref="roleMapper" />  
  14.     </bean>  

 

atomikos的配置jta.properties,该文件放在应用classpath下面

 

Java代码  收藏代码
  1. com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory  
  2. com.atomikos.icatch.console_file_name = tm.out  
  3. com.atomikos.icatch.log_base_name = tmlog  
  4. com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm  
  5. com.atomikos.icatch.console_log_level=WARN  

 

这几基本配置完毕,需要jar包

atomikos-util.jar

transactions.jar

transactions-jta.jar

transactions-jdbc-deprecated.jar

mybatis.jar

mybatis-spring.jar

cglib.2.2.2.jar

spring的jar包

 

在Service中,调用事务的方法不能try。。。catch事务的方法,否者不能回滚

如下带面就会出现不会滚问题

 

Java代码  收藏代码
  1. try{  
  2.                 userMapper.addUser(user);  
  3.                 roleMapper.addRole(role);  
  4.             }catch(Exception){  
  5.                   
  6.             }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics