`

Spring JTA应用之Atomikos配置

阅读更多

Atomikos,是一个基于Java的开源事务管理器,提供了事务管理和连接池,不需要应用服务器支持,支持JDBC和JMS事务,能提供对Spring,Hibernate的集成,有兴趣多了解的可以直接参考说明文当,有详细的介绍和使用说明。

Atomikos可以到http://www.atomikos.com/products.html#ate下载,最新版本是3.2.0

首先,仍然是一个相关的配置文件,用来设置相关的环境,打开解压缩后Atomikos根目录,拷贝jta.properties到classpath中,并修改为如下内容
jta.properties

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 = INFO   
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory com.atomikos.icatch.console_file_name = tm.out com.atomikos.icatch.log_base_name = tmlog com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm com.atomikos.icatch.console_log_level = INFO



随后,是Spring上下文配置,建立一个名为ApplicationContext-atomikos.xml的Spring上下文

ApplicationContext-atomikos.xml

Java代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">   
  5.     <!-- XA Datasource -->   
  6.     <bean id="datasource1" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">      
  7.         <property name="uniqueResourceName">      
  8.             <value>mysql/main</value>      
  9.         </property>      
  10.         <property name="xaDataSourceClassName">      
  11.             <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>      
  12.         </property>      
  13.         <property name="xaDataSourceProperties">      
  14.             <value>URL=jdbc:mysql://localhost:3306/test;user=root;password=admin</value>      
  15.         </property>      
  16.         <property name="exclusiveConnectionMode">      
  17.             <value>true</value>      
  18.         </property>      
  19.         <property name="connectionPoolSize">      
  20.             <value>3</value>      
  21.         </property>      
  22.         <property name="validatingQuery">      
  23.             <value>SELECT 1</value>      
  24.         </property>      
  25.     </bean>   
  26.        
  27.     <bean id="datasource2" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">      
  28.         <property name="uniqueResourceName">      
  29.             <value>mysql/news</value>   
  30.         </property>      
  31.         <property name="xaDataSourceClassName">      
  32.             <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>      
  33.         </property>   
  34.         <property name="xaDataSourceProperties">      
  35.             <value>URL=jdbc:mysql://localhost:3306/test2;user=root;password=admin</value>      
  36.         </property>      
  37.         <property name="exclusiveConnectionMode">      
  38.             <value>true</value>      
  39.         </property>      
  40.         <property name="connectionPoolSize">      
  41.             <value>3</value>      
  42.         </property>      
  43.         <property name="validatingQuery">      
  44.             <value>SELECT 1</value>      
  45.         </property>      
  46.     </bean>   
  47.        
  48.     <bean id="template1" class="org.springframework.jdbc.core.JdbcTemplate">   
  49.         <property name="dataSource" ref="datasource1" />   
  50.     </bean>   
  51.        
  52.     <bean id="template2" class="org.springframework.jdbc.core.JdbcTemplate">   
  53.         <property name="dataSource" ref="datasource2" />   
  54.     </bean>   
  55.            
  56.     <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">   
  57.         <property name="forceShutdown"><value>true</value></property>   
  58.     </bean>   
  59.        
  60.     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">   
  61.         <property name="transactionTimeout" value="300"/>    
  62.     </bean>   
  63.   
  64.     <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
  65.         <property name="transactionManager"><ref bean="atomikosTransactionManager"  /></property>   
  66.         <property name="userTransaction"><ref bean="atomikosUserTransaction"  /></property>   
  67.     </bean>   
  68.        
  69.     <bean id="dao1" class="com.xa.dao.UserDao1">   
  70.         <property name="jdbcTemplate">   
  71.             <ref bean="template1"></ref>   
  72.         </property>   
  73.     </bean>   
  74.        
  75.     <bean id="dao2" class="com.xa.dao.UserDao2">   
  76.         <property name="jdbcTemplate">   
  77.             <ref bean="template2"></ref>   
  78.         </property>   
  79.     </bean>   
  80.     <!-- -->   
  81.     <bean id="userServiceTarget" class="com.xa.service.UserServiceImpl">   
  82.         <property name="dao1" ref="dao1"/>   
  83.         <property name="dao2" ref="dao2"/>   
  84.     </bean>   
  85.        
  86.     <bean id="userTest" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">       
  87.         <property name="transactionManager">   
  88.             <ref bean="springTransactionManager"/>   
  89.         </property>       
  90.         <property name="target">   
  91.             <ref bean="userServiceTarget"/>   
  92.         </property>   
  93.         <property name="transactionAttributes">           
  94.             <props>   
  95.                 <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>               
  96.             </props>   
  97.         </property>   
  98.     </bean>   
  99. </beans>  
看上下文中的代码,很大部分和JOTM的相似,atomikos使用com.atomikos.jdbc.SimpleDataSourceBean类来创建datasource bean,这里需要特别注意
Java代码
  1. <property name="uniqueResourceName">      
  2.     <value>mysql/main</value>      
  3. </property>    
<property name="uniqueResourceName"> <value>mysql/main</value> </property>

 

Java代码
  1. <property name="uniqueResourceName">      
  2.     <value>mysql/news</value>   
  3. </property>  
<property name="uniqueResourceName"> <value>mysql/news</value> </property>


上面的代码为每个Datasource配置了一个唯一的名称,名称不允许相同,否则将会使用同一个datasource,而不会出现异常。

另外在配置文件中定义了Atomikos的事务管理器,并在Spring的JtaTransactionManager中引用

Java代码
  1. <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">   
  2.         <property name="forceShutdown"><value>true</value></property>   
  3.     </bean>   
  4.        
  5.     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">   
  6.         <property name="transactionTimeout" value="300"/>    
  7.     </bean>   
  8.   
  9.     <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
  10.         <property name="transactionManager"><ref bean="atomikosTransactionManager"  /></property>   
  11.         <property name="userTransaction"><ref bean="atomikosUserTransaction"  /></property>   
  12.     </bean>  


其它的代码没什么特别,和JOTM配置基本相同,JdbcTemplate,DAO,Service,事务代理等等....

仍然使用TestXa.java,修改成引用ApplicationContext-atomikos.xml的上下文配置

Java代码
  1. protected String[] getConfigLocations() {   
  2.     //return new String[] { "classpath:ApplicationContext-jotm.xml" };   
  3.     return new String[] { "classpath:ApplicationContext-atomikos.xml" };   
  4. }  
protected String[] getConfigLocations() { //return new String[] { "classpath:ApplicationContext-jotm.xml" }; return new String[] { "classpath:ApplicationContext-atomikos.xml" }; }



运行test,然后查看数据库状态,
然后修改方法参数使其不违反数据库约束,再运行Test观察数据库。

分享到:
评论

相关推荐

    spring + JTA + atomikos 实现分布式事务

    Atomikos 是一个开源的JTA实现,它为Spring提供了一个轻量级、高性能的分布式事务解决方案。本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在...

    spring+mybatis+atomikos配置文件及相关包(最新版)

    首先,Spring是一个开源的应用框架,它为Java开发者提供了一个全面的编程和配置模型。在分布式事务处理中,Spring通过其Transaction API提供了一种声明式事务管理方式,使得开发者无需在代码中显式控制事务的开始、...

    spring+mybatis+atomikos配置文件及相关包

    5. 如何在Spring中配置Atomikos以支持JTA事务 6. 配置文件的编写,包括Spring和Atomikos的配置 7. 在多数据库或微服务架构中的事务管理策略 这些知识点对于开发分布式系统,尤其是需要处理复杂事务场景的项目来说至...

    spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

    3. **Spring配置**:在Spring的配置文件中,使用`jee:jta-data-source`或`jee:resource-ref`元素来引用之前创建的JNDI数据源,并配置`PlatformTransactionManager`为`org.objectweb.jotm.CurrentJOTM`。 **Atomikos...

    spring+mybatis+atomikos配置所需包跟配置文件

    综上所述,Spring、MyBatis和Atomikos的集成主要涉及JTA标准的运用、Atomikos的配置以及Spring的事务管理。通过这种方式,可以实现在分布式环境下的事务一致性,确保多数据源操作的正确性。在实际开发中,根据具体的...

    spring+mybatis+atomikos配置文件及相关包.rar

    Atomikos是一款强大的开源事务处理系统,它支持JTA(Java Transaction API),可以为我们的应用程序提供分布式事务解决方案。 首先,我们来看Spring和Mybatis的集成。Spring作为一个轻量级的IoC(Inversion of ...

    spring mybatis jta jotm atomikos 配置

    NULL 博文链接:https://onlyor.iteye.com/blog/1483289

    Spring+MyBatis+Atomikos实现JTA分布式事务

    本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...

    springboot+jta+atomikos

    在“springboot+jta+atomikos”项目中,Spring Boot作为基础框架,负责整体应用的结构和生命周期管理。Atomikos作为JTA的实现,提供了分布式事务管理的功能。当应用需要处理跨越多个数据库或服务的事务时,Atomikos...

    使用springboot+jta+atomikos配置多数据源事务

    本教程将详细介绍如何使用Spring Boot结合JTA(Java Transaction API)和Atomikos来配置多数据源事务。 首先,我们需要理解JTA的含义。JTA是Java平台的标准,用于管理跨多个数据源的分布式事务。它允许应用程序在一...

    Spring配置JTA事务管理

    2. 配置JTA Manager:在Spring的配置文件(如`applicationContext-jta.xml`)中,你需要声明JTATransactionManager,并提供相应的JNDI名,以便Spring能从应用服务器中查找并使用它。例如: ```xml ...

    Spring Boot + Druid + Mybatis + Atomikos 配置多数据源 并支持分布式事务

    本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...

    spring+hibernate+atomikos多数据源

    Spring是一个开源的应用框架,它提供了全面的编程和配置模型,简化了Java企业级应用的开发。在多数据源的场景中,Spring提供了DataSourceTransactionManager和PlatformTransactionManager接口,使得我们可以灵活地...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    Atomikos是著名的JTA(Java Transaction API)实现之一,提供了分布式事务管理的能力。AtomikosDataSource是基于Atomikos实现的XAPool,可以协调跨多个数据源的ACID(原子性、一致性、隔离性和持久性)事务。在...

    spring-jta-atomikos:JTA,JPA,Hibernate和Atomikos的Spring项目

    标题中的“spring-jta-atomikos”是一个关于在Spring框架中使用JTA(Java Transaction API)和Atomikos的项目。JTA是Java平台中用于管理分布式事务的标准API,而Atomikos是一个开源的事务管理器,它支持JTA,并且在...

    atomikos_3.7_jta项目整合jar包

    此外,还需要在应用服务器或者Spring等框架的配置文件中配置Atomikos事务管理器,例如在Spring中,你可以使用`AtomikosTransactionManager`作为`PlatformTransactionManager`的实现。 总的来说,Atomikos 3.7 JTA...

    spring+jpa+atomikos多数据源

    "spring+jpa+atomikos多数据源"是一个重要的技术组合,用于构建能够同时连接并操作不同数据库的应用程序。下面将详细介绍这个主题涉及的知识点。 首先,Spring框架是Java开发中最广泛使用的轻量级框架,提供依赖...

    spring + hibernate + atomikos + mysql (diff database)

    标题 "spring + hibernate + atomikos + mysql (diff database)" 涉及的是一个集成开发环境,其中Spring是Java企业级应用的核心框架,Hibernate是一个流行的ORM(对象关系映射)解决方案,Atomikos是一个开源的JTA...

    spring+mybatis+Atomikos JTA事务配置说明

    NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831

    Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源(可运行)

    在Spring Boot中,通过配置`spring.jta.enabled=true`,并指定Atomikos的相关配置,我们可以启用JTA支持。 Hibernate则作为ORM(对象关系映射)工具,负责将Java对象与数据库表进行映射,简化数据库操作。在多数据...

Global site tag (gtag.js) - Google Analytics