分享

使用spring+atomikos+ibatis实现声明式DB2多数据库全局分布式事务...

 goldbomb 2009-01-22
使用spring+atomikos+ibatis实现声明式DB2多数据库全局分布式事务,关键是DB2数据库驱动程序和数据库访问参数
的配置。db2的jdbc driver有好几种,不同的driver,参数的写法也不同,甚至端口也不一样,而且本人使用的DB2 V8.2驱动程序db2jcc.jar有bug,必须使用fp12版本的db2jcc.jar代替,才能实现全局分布式事务
atomikos官网上没有提供DB2的配置示例,试了多次,以下配置终于搞定了全局分布式事务,见其中的注释

Java代码 复制代码
  1. <tx:advice id="txAdvice" transaction-manager="txManager">   
  2.         <tx:attributes>   
  3.             <tx:method name="get*" read-only="true" />   
  4.             <tx:method name="*" rollback-for="Throwable"/>   
  5.         </tx:attributes>   
  6.     </tx:advice>   
  7.        
  8.     <!-- 在类foo.bar.MyClass的myMethod()方法里实现全局分布式事务,该方法对两个数据源进行操作 -->   
  9.     <aop:config>   
  10.         <aop:pointcut id="myOperation"  
  11.             expression="execution(*foo.bar.MyClass.myMethod(..))" />   
  12.         <aop:advisor advice-ref="txAdvice"  
  13.             pointcut-ref="myOperation" />   
  14.     </aop:config>   
  15.        
  16.     <!-- 数据源1 -->   
  17.     <bean id="dataSource"  
  18.         class="com.atomikos.jdbc.AtomikosDataSourceBean">   
  19.         <property name="uniqueResourceName">   
  20.             <value>app/main</value>   
  21.         </property>   
  22.         <property name="xaDataSourceClassName">   
  23.             <value>[b]com.ibm.db2.jcc.DB2XADataSource[/b]</value>   
  24.         </property>   
  25.   
  26.         <property name="xaProperties">   
  27.             <props>   
  28.                 [b]<prop key="serverName">172.160.1.138</prop>   
  29.                 <prop key="portNumber">50000</prop>   
  30.                 <prop key="databaseName">MYDB</prop>   
  31.                 <prop key="user">db2admin</prop>   
  32.                 <prop key="password">pass</prop>   
  33.                 <prop key="driverType">4</prop>[/b]   
  34.             </props>   
  35.         </property>   
  36.         <property name="poolSize">   
  37.             <value>5</value>   
  38.         </property>   
  39.     </bean>   
  40.        
  41.     <!-- 数据源2 -->   
  42.     <bean id="dataSourceHis"  
  43.         class="com.atomikos.jdbc.AtomikosDataSourceBean">   
  44.         <property name="uniqueResourceName">   
  45.             <value>app/history</value>   
  46.         </property>   
  47.         <property name="xaDataSourceClassName">   
  48.             <value>com.ibm.db2.jcc.DB2XADataSource</value>   
  49.         </property>   
  50.   
  51.         <property name="xaProperties">   
  52.             <props>   
  53.                 <prop key="serverName">172.160.1.139</prop>   
  54.                 <prop key="portNumber">50000</prop>   
  55.                 <prop key="databaseName">NDB</prop>   
  56.                 <prop key="user">db2admin</prop>   
  57.                 <prop key="password">pass</prop>   
  58.                 <prop key="driverType">4</prop>   
  59.             </props>   
  60.         </property>   
  61.         <property name="poolSize">   
  62.             <value>5</value>   
  63.         </property>   
  64.     </bean>   
  65.        
  66.     <!-- 数据源1的iBatis sqlMapClient -->   
  67.     <bean id="sqlMapClient1"  
  68.         class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">   
  69.         <property name="configLocation">   
  70.             <value>SqlMapConfig.xml</value>   
  71.         </property>   
  72.         <property name="dataSource">   
  73.             <ref bean="dataSource" />   
  74.         </property>   
  75.     </bean>   
  76.   
  77.     <!-- 数据源2的iBatis sqlMapClient -->   
  78.     <bean id="sqlMapClient2"  
  79.         class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">   
  80.         <property name="configLocation">   
  81.             <value>SqlMapConfig.xml</value>   
  82.         </property>   
  83.         <property name="dataSource">   
  84.             <ref bean="dataSourceHis" />   
  85.         </property>   
  86.     </bean>   
  87.        
  88.     <bean id="atomikosTransactionManager"  
  89.         class="com.atomikos.icatch.jta.UserTransactionManager"  
  90.         init-method="init" destroy-method="close">   
  91.         <property name="forceShutdown">   
  92.             <value>true</value>   
  93.         </property>   
  94.     </bean>   
  95.   
  96.     <bean id="atomikosUserTransaction"  
  97.         class="com.atomikos.icatch.jta.UserTransactionImp">   
  98.         <property name="transactionTimeout" value="240" />   
  99.     </bean>   
  100.   
  101.     <bean id="txManager"  
  102.         class="org.springframework.transaction.jta.JtaTransactionManager">   
  103.         <property name="transactionManager">   
  104.             <ref bean="atomikosTransactionManager" />   
  105.         </property>   
  106.         <property name="userTransaction">   
  107.             <ref bean="atomikosUserTransaction" />   
  108.         </property>   
  109.     </bean>   
  110.     <-- 访问数据源1的dao -->   
  111.     <bean id="dao1" class="foo.bar.dao.My1DAOImpl">   
  112.         <property name="sqlMapClient">   
  113.             <ref bean="sqlMapClient" />   
  114.         </property>   
  115.     </bean>   
  116.     <-- 访问数据源2的dao -->   
  117.     <bean id="dao2" class="foo.bar.dao.My2DAOImpl">   
  118.         <property name="sqlMapClient">   
  119.             <ref bean="sqlMapClientHis" />   
  120.         </property>   
  121.     </bean>   
  122. </beans>  


iBatis的配置没有特殊的地方,使用abator for iBatis自动生成,abatorConfig.xml里daoGenerator的type属性设置为'SPRING'

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多