首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

【转】应用Atomikos Transactions Essentials实现多数据源JTA分布式事务

2013-04-07 
【转】使用Atomikos Transactions Essentials实现多数据源JTA分布式事务Atomikos数据源配置方法有三种Atomik

【转】使用Atomikos Transactions Essentials实现多数据源JTA分布式事务

Atomikos数据源配置方法有三种

Atomikos数据源配置方法有三种分别有:SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean可任选一种

?

    Simple表示基础数据库连接配置     <bean id="oracleJta" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">           <property name="uniqueResourceName">               <value>OracleXADataSource</value>   <!--任意命名,但必须唯一-->        </property>           <property name="xaDataSourceClassName">               <value>oracle.jdbc.xa.client.OracleXADataSource</value>           </property>           <property name="xaDataSourceProperties">               <value>URL=jdbc:oracle:thin:@localhost:1521:orcl;user=orcl;password=</value>           </property>           <property name="exclusiveConnectionMode">               <value>true</value>           </property>           <property name="connectionPoolSize">               <value>3</value>           </property>           <property name="validatingQuery">               <value>SELECT 1</value>           </property>       </bean>       Atomikos表示必须要用到XA数据库驱动类,可设置连接池(经过测试推荐此方法)    <bean id="oracleJta" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" lazy-init="true">          <property name="uniqueResourceName">              <value>OracleXADataSource</value>          </property>          <property name="xaDataSourceClassName">              <value>oracle.jdbc.xa.client.OracleXADataSource</value>          </property>        <property name="xaProperties">              <props>                       <prop key="URL">jdbc:oracle:thin:@localhost:1521:orcl</prop>                  <prop key="user">orcl</prop>                  <prop key="password"></prop>              </props>          </property>            <property name="poolSize"><value>1</value></property>              <property name="maxPoolSize"><value>30</value></property>            </bean>         AtomikosNon表示必须要用到普通数据库驱动类,可设置连接池           <bean id="oracleJta" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean">        <property name="uniqueResourceName"><value>OracleXADataSource</value></property>        <property name="user"><value>orcl</value></property>        <property name="password"><value></value></property>        <property name="url"><value>jdbc:oracle:thin:@192.168.1.217:1521:orcl</value></property>        <property name="driverClassName"><value>oracle.jdbc.OracleDriver</value></property>        <property name="poolSize"><value>1</value></property>        <property name="borrowConnectionTimeout"><value>60</value></property>    </bean>        另外一个数据库在这就不在写了,设置同上只是mysql的驱动类名为:xaDataSourceClassName:com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

?

3.事务配置

?

    Atomikos事务方法    <bean id="atomikosTransactionManager"          class="com.atomikos.icatch.jta.UserTransactionManager"          init-method="init" destroy-method="close">          <property name="forceShutdown">              <value>true</value>          </property>      </bean>      <bean id="atomikosUserTransaction"          class="com.atomikos.icatch.jta.UserTransactionImp">          <property name="transactionTimeout" value="240"/>      </bean>      <bean id="transactionManager"          class="org.springframework.transaction.jta.JtaTransactionManager">          <property name="transactionManager">              <ref bean="atomikosTransactionManager"/>          </property>          <property name="userTransaction">              <ref bean="atomikosUserTransaction"/>          </property>      </bean>     接下来的代码和上例类同就不再写。

最近做的project中遇到要将数据库中的表分布到两台不同的服务器上的Mysql5.0中,project主要使用spring+ibatis。因此需要JTA的支持,但是tomcat不支持,所以就搜索开源的JTA实现。
最开始使用的是JOTM,但是使用中不能自动rollback,无论什么情况都commit。然后看到infoq上一篇文章提到Atomikos Transactions Essentials,Atomikos Transactions Essentials 3.0是Atomikos 开发的核心事务引擎,支持JDBC 以及JMS 的JTA/XA 事务。易于部署,轻量级,同时支持JDBC 以及JMS 。
Atomikos Transactions Essentials现在的版本是3.1.7,可以在http://www.atomikos.com/Main/TransactionsEssentialsDownloadForm?下载,在发布包里的examples文件夹下面有些例子,非常实用,我在使用中参考里面的例子很容易配置成功。先将发布包里面dist目录下的atomikos-util.jar,transactions.jar,transactions-api.jar,transactions-jta.jar copy到项目lib里面, 如果使用hibernate则需要将另外两个hibernate相关的jar页copy到项目里面,spring配置文件如下:

xml 代码
  • <!--?第一个数据库?-->???
  • ????????????????<!--?使用Mysql?XADataSource(mysql>=5.0,?Connector/J>=5.0才可以支持XADatasource)-->???
  • ????????????????????????????????????????????<!--?第二个数据库?-->???
  • ????????????????<!--?使用Mysql?XADataSource(mysql>=5.0,?Connector/J>=5.0才可以支持XADatasource)-->???
  • ??????????????????????????????????????????????
  • ??
  • <!--?第一个数据库的sqlMapClient?-->???
  • ????<!--?包含第一个数据库表的map?-->???
  • ????????????<!--?第二个数据库的sqlMapClient?-->???
  • ????????<!--?包含第一个数据库表的map?-->???
  • ??????????????????
  • <!--?Construct?Atomikos?UserTransactionManager,?needed?to?configure?Spring?-->???
  • ????<!--??when?close?is?called,?should?we?force?transactions?to?terminate?or?not??-->???
  • ????????????<!--?Also?use?Atomikos?UserTransactionImp,?needed?to?configure?Spring??-->???
  • ??????
  • <!--?Configure?the?Spring?framework?to?use?JTA?transactions?from?Atomikos?-->???
  • ????????????????xml 代码
  • ?????????????????????????http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-2.0.xsd??
  • ???????????http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"??
  • ???????<!--?支持?@AspectJ?标记-->???
  • ??????????????????
  • ????????????????????????????????????????????Java代码??【转】应用Atomikos Transactions Essentials实现多数据源JTA分布式事务
    1. <!--?第一个数据库?-->??
    2. ????<bean?id="dataSource"?class="com.atomikos.jdbc.SimpleDataSourceBean"?init-method="init"?destroy-method="close">??
    3. ????????<property?name="uniqueResourceName">??
    4. ????????????<value>mysql/main</value>??
    5. ????????</property>??
    6. ????????<property?name="xaDataSourceClassName">??
    7. ????????????<!--?使用Mysql?XADataSource(mysql>=5.0,?Connector/J>=5.0才可以支持XADatasource)-->??
    8. ????????????<value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>??
    9. ????????</property>??
    10. ????????<property?name="xaDataSourceProperties">??
    11. ????????????<value>URL=${jdbc.url};user=${jdbc.username};password=${jdbc.password}</value>??
    12. ????????</property>??
    13. ????????<property?name="exclusiveConnectionMode">??
    14. ????????????<value>true</value>??
    15. ????????</property>??
    16. ????????<property?name="connectionPoolSize">??
    17. ????????????<value>3</value>??
    18. ????????</property>??
    19. ????????<property?name="validatingQuery">??
    20. ????????????<value>SELECT?1</value>??
    21. ????????</property>??
    22. ????</bean>??
    23. ????<!--?第二个数据库?-->??
    24. ????<bean?id="dataSourceB"?class="com.atomikos.jdbc.SimpleDataSourceBean"?init-method="init"?destroy-method="close">??
    25. ????????<property?name="uniqueResourceName">??
    26. ????????????<value>mysql/news</value>??
    27. ????????</property>??
    28. ????????<property?name="xaDataSourceClassName">??
    29. ????????????<!--?使用Mysql?XADataSource(mysql>=5.0,?Connector/J>=5.0才可以支持XADatasource)-->??
    30. ????????????<value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>??
    31. ????????</property>??
    32. ????????<property?name="xaDataSourceProperties">??
    33. ????????????<value>URL=${jdbc.url.b};user=${jdbc.username.b};password=${jdbc.password.b}</value>??
    34. ????????</property>??
    35. ????????<property?name="exclusiveConnectionMode">??
    36. ????????????<value>true</value>??
    37. ????????</property>??
    38. ????????<property?name="connectionPoolSize">??
    39. ????????????<value>3</value>??
    40. ????????</property>??
    41. ????????<property?name="validatingQuery">??
    42. ????????????<value>SELECT?1</value>??
    43. ????????</property>??
    44. ????</bean>??

  • 热点排行