`
kavy
  • 浏览: 890677 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Atomikos Transactions Essentials3.0

 
阅读更多

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

最近做的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/home.html下载,在发布包里的examples文件夹下面有些例子,非常实用,我在使用中参考里面的例子很容易配置成功。先将发布包里面dist目录下的 atomikos-util.jar,transactions.jar,transactions-api.jar,transactions- jta.jar copy到项目lib里面,如果使用hibernate则需要将另外两个hibernate相关的jar页copy到项目里面,spring配置文件如下:

 

xml 代码
 
  1. <!-- 第一个数据库 --> 
  2. <beanid="dataSource"class="com.atomikos.jdbc.SimpleDataSourceBean"init-method="init"destroy-method="close"> 
  3.     <propertyname="uniqueResourceName"> 
  4.         <value>mysql/main</value> 
  5.     </property> 
  6.     <propertyname="xaDataSourceClassName"> 
  7.         <!-- 使用Mysql XADataSource(mysql>=5.0, Connector/J>=5.0才可以支持XADatasource)--> 
  8.         <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value> 
  9.     </property> 
  10.     <propertyname="xaDataSourceProperties"> 
  11.         <value>URL=${jdbc.url};user=${jdbc.username};password=${jdbc.password}</value> 
  12.     </property> 
  13.     <propertyname="exclusiveConnectionMode"> 
  14.         <value>true</value> 
  15.     </property> 
  16.     <propertyname="connectionPoolSize"> 
  17.         <value>3</value> 
  18.     </property> 
  19.     <propertyname="validatingQuery"> 
  20.         <value>SELECT 1</value> 
  21.     </property> 
  22. </bean> 
  23. <!-- 第二个数据库 --> 
  24. <beanid="dataSourceB"class="com.atomikos.jdbc.SimpleDataSourceBean"init-method="init"destroy-method="close"> 
  25.     <propertyname="uniqueResourceName"> 
  26.         <value>mysql/news</value> 
  27.     </property> 
  28.     <propertyname="xaDataSourceClassName"> 
  29.         <!-- 使用Mysql XADataSource(mysql>=5.0, Connector/J>=5.0才可以支持XADatasource)--> 
  30.         <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value> 
  31.     </property> 
  32.     <propertyname="xaDataSourceProperties"> 
  33.         <value>URL=${jdbc.url.b};user=${jdbc.username.b};password=${jdbc.password.b}</value> 
  34.     </property> 
  35.     <propertyname="exclusiveConnectionMode"> 
  36.         <value>true</value> 
  37.     </property> 
  38.     <propertyname="connectionPoolSize"> 
  39.         <value>3</value> 
  40.     </property> 
  41.     <propertyname="validatingQuery"> 
  42.         <value>SELECT 1</value> 
  43.     </property> 
  44. </bean> 
  45.  
  46.  
  47. <beanid="lobHandler"class="org.springframework.jdbc.support.lob.DefaultLobHandler"/> 
  48.  
  49. <!-- 第一个数据库的sqlMapClient --> 
  50. <beanid="sqlMapClient"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
  51.     <propertyname="configLocation"> 
  52.         <!-- 包含第一个数据库表的map --> 
  53.         <value>classpath:/sqlmap-config.xml</value> 
  54.     </property> 
  55.     <propertyname="dataSource"ref="dataSource"/> 
  56.     <propertyname="lobHandler"ref="lobHandler"/> 
  57. </bean> 
  58. <!-- 第二个数据库的sqlMapClient --> 
  59. <beanid="sqlMapClientB"class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
  60.     <propertyname="configLocation"> 
  61.         <!-- 包含第一个数据库表的map --> 
  62.         <value>classpath:/sqlmap-configb.xml</value> 
  63.     </property> 
  64.     <propertyname="dataSource"ref="dataSourceB"/> 
  65.     <propertyname="lobHandler"ref="lobHandler"/> 
  66. </bean> 
  67.  
  68. <!-- Construct Atomikos UserTransactionManager, needed to configure Spring --> 
  69. <beanid="atomikosTransactionManager"class="com.atomikos.icatch.jta.UserTransactionManager"init-method="init" 
  70.     destroy-method="close"> 
  71.     <!--  when close is called, should we force transactions to terminate or not? --> 
  72.     <propertyname="forceShutdown"> 
  73.         <value>true</value> 
  74.     </property> 
  75. </bean> 
  76.  
  77. <!-- Also use Atomikos UserTransactionImp, needed to configure Spring  --> 
  78. <beanid="atomikosUserTransaction"class="com.atomikos.icatch.jta.UserTransactionImp"> 
  79.     <propertyname="transactionTimeout"value="240"/> 
  80. </bean> 
  81.  
  82. <!-- Configure the Spring framework to use JTA transactions from Atomikos --> 
  83. <beanid="transactionManager"class="org.springframework.transaction.jta.JtaTransactionManager"> 
  84.     <propertyname="transactionManager"> 
  85.         <refbean="atomikosTransactionManager"/> 
  86.     </property> 
  87.     <propertyname="userTransaction"> 
  88.         <refbean="atomikosUserTransaction"/> 
  89.     </property> 
  90. </bean> 

事务的配置, 使用了spring2.0的语法,所以将namesapce也帖出来了.

xml 代码
 
  1. <?xmlversion="1.0"encoding="UTF-8"?> 
  2. <beansxmlns="http://www.springframework.org/schema/beans" 
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.        xmlns:aop="http://www.springframework.org/schema/aop" 
  5.        xmlns:tx="http://www.springframework.org/schema/tx" 
  6.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
  7.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
  8.            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" 
  9.        default-autowire="byName"default-lazy-init="true"> 
  10.     <!-- 支持 @AspectJ 标记--> 
  11.     <aop:aspectj-autoproxy/> 
  12.  
  13.     <aop:configproxy-target-class="true"> 
  14.         <aop:advisorpointcut="execution(* *Facade.*(..))"advice-ref="txAdvice"/> 
  15.         <aop:advisorpointcut="execution(* *Manager.*(..))"advice-ref="txAdvice"/> 
  16.     </aop:config> 
  17.  
  18.     <tx:adviceid="txAdvice"> 
  19.         <tx:attributes> 
  20.             <tx:methodname="get*"read-only="true"/> 
  21.             <tx:methodname="find*"read-only="true"/> 
  22.             <tx:methodname="has*"read-only="true"/> 
  23.             <tx:methodname="locate*"read-only="true"/> 
  24.             <tx:methodname="*"/> 
  25.         </tx:attributes> 
  26.     </tx:advice> 
  27. </beans> 

这样配置以后就可以使用分布式事务,测试中出现异常时事务也自动提交。和JOTM相比Atomikos Transactions Essentials更加稳定,它原来是商业项目,现在开源了。象mysql一样卖服务支持的。而且论坛页比较活跃,有问题很快可以解决。

使用XADatasource的数据源配置

Java代码 复制代码
  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>

<script type="text/javascript"></script>

 
分享到:
评论

相关推荐

    Atomikos Transactions Guide

    1. **Atomikos Transactions Essentials 使用指南**: - Atomikos Transactions Essentials 是一个用于管理事务的中间件产品,尤其适用于J2SE应用程序。 - 本指南旨在帮助用户了解JTA(Java Transaction API),...

    Atomikos Transaction Essentials 3.5.5

    Atomikos Transaction Essentials 3.5.5 是一个专注于分布式事务处理的开源软件包,它在Java平台上提供了强大的Java Transaction API (JTA) 实现。这个版本是专门为那些需要高可用性和可扩展性的企业级应用设计的,...

    atomikos-transactions-api.jar.zip

    Atomikos Transactions API 是一个广泛使用的开源事务处理API,它为Java应用程序提供了分布式事务管理的能力。这个名为"atomikos-transactions-api.jar.zip"的压缩包包含了一个名为"atomikos-transactions-api.jar...

    atomikos-transactions-jms.jar.zip

    Atomikos Transactions JMS 是一个专门用于处理分布式事务管理的Java库,主要针对JMS(Java Message Service)环境。这个库被封装在名为"atomikos-transactions-jms.jar"的JAR文件中,通常作为开发人员在构建支持...

    atomikos-transactions-jdbc.jar.zip

    《Atomikos Transactions JDBC:分布式事务处理的利器》 在Java世界中,处理数据库事务时,我们经常会遇到分布式事务的需求,特别是在大型系统或者微服务架构中。Atomikos Transactions JDBC是一个强大的开源工具,...

    AtomikosTransactionsEssentials-3.8.0下载

    Atomikos Transactions Essentials 是一款强大的开源事务管理器,专注于分布式事务处理。在IT行业中,分布式事务是处理跨多个系统或数据库操作的关键技术,确保数据的一致性和完整性。Atomikos Transactions ...

    AtomikosTransactions jar 包

    这个jar包包含了Atomikos Transactions Essentials的实现,版本为3.5.5,它是一个开源的、高性能的事务处理解决方案。 1. **事务管理**:Atomikos Transactions jar 提供了JTA(Java Transaction API)的实现,遵循...

    atomikos-transactions-jta.jar.zip

    Atomikos Transactions JTA 是一个开源的企业级事务处理解决方案,主要针对Java应用程序,尤其是那些运行在Java EE(Enterprise Edition)环境中的应用。JTA(Java Transaction API)是Java平台的标准接口,用于处理...

    atomikos-transactions-jms.jar

    官方版本,亲测可用

    atomikos-transactions-hibernate3.jar.zip

    Atomikos Transactions Hibernate3是一个专为Java环境设计的事务处理解决方案,它主要为Hibernate3提供了一个强大的、可扩展的事务管理器。这个解决方案的核心在于Atomikos Transactions,这是一个开源的、企业级的...

    AtomikosTransactionsEssentials-3.5.9

    Atomikos Transactions Essentials 是一款强大的开源事务管理器,版本号为3.5.9,专为处理分布式系统中的事务一致性而设计。在大型企业级应用和微服务架构中,确保数据的一致性和完整性是至关重要的,Atomikos 正是...

    atomiko-stransactions.jar.zip

    《深入解析Atomikos Transactions与Java交易管理》 在Java应用程序开发中,事务处理是确保数据一致性、完整性和可靠性的关键部分。Atomikos是一个开源的JTA(Java Transaction API)实现,它提供了全面的分布式事务...

    atomikos jar 包

    Atomikos Transactions能够处理这些跨数据库、消息队列或其他服务的事务,确保“原子性”,即事务的全部操作要么全部完成,要么全部回滚,不会留下部分完成的状态。 3. **X/Open XA 协议** Atomikos支持X/Open XA...

    atomikos-transactions-jta.jar

    官方版本,亲测可用

    atomikos-transactions-api.jar

    官方版本,亲测可用

    atomikos-transactions-jdbc.jar

    官方版本,亲测可用

    atomikos-transactions-hibernate3.jar

    官方版本,亲测可用

    Spring3.0+Hibernate+Atomikos多数据源分布式事务管理

    本教程将聚焦于如何利用Spring 3.0、Hibernate ORM框架以及Atomikos这个开源事务管理器来实现高效、可靠的多数据源分布式事务处理。 **Spring 3.0**: Spring是Java开发中最广泛使用的轻量级框架之一,它提供了一个...

    Atomikos分布式事务处理所需jar包

    3. **atomikos-transactions-jta.jar**:这是Atomikos对JTA的实现,包括事务管理器和服务提供者的具体实现。 4. **atomikos-transactions-jdbc.jar**:针对JDBC数据源的事务管理支持,使得Atomikos能管理与数据库...

    atomikos3.9.3

    最新 atomikos jar包,transactions-3.9.3.jar、transactions-api-3.9.3.jar、transactions-api-3.9.3.jar、transactions-jta-3.9.3.jar、atomikos-util-3.9.3.jar、jta-1.1.jar

Global site tag (gtag.js) - Google Analytics