- 浏览: 577155 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
a1641693970:
还不错,学习了
BeanUtils使用总结(二)LazyDynaBean -
zjfshowtime:
很好的办法,学习了。
ORA-28001: the password has expired -
ya654277yo:
哦,多谢分享
Apache整合Tomcat后get方式提交中文乱码问题解决 -
foolkeeper:
nice !!
jvm内存参数设定 -
tracy821:
谢谢了,找了好久才找到
关于Spring 声明式事务处理时,throws exception不回滚的问题
Atomikos,是一个基于Java的开源事务管理器,提供了事务管理和连接池,不需要应用服务器支持,支持JDBC和JMS事务,能提供对Spring,Hibernate的集成,有兴趣多了解的可以直接参考说明文当,有详细的介绍和使用说明。
Atomikos可以到http://www.atomikos.com/products.html#ate下载,最新版本是3.2.0
首先,仍然是一个相关的配置文件,用来设置相关的环境,打开解压缩后Atomikos根目录,拷贝jta.properties到classpath中,并修改为如下内容
jta.properties
Java代码
- 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
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代码
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
- <!-- XA Datasource -->
- <bean id="datasource1" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
- <property name="uniqueResourceName">
- <value>mysql/main</value>
- </property>
- <property name="xaDataSourceClassName">
- <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>
- </property>
- <property name="xaDataSourceProperties">
- <value>URL=jdbc:mysql://localhost:3306/test;user=root;password=admin</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>
- <bean id="datasource2" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">
- <property name="uniqueResourceName">
- <value>mysql/news</value>
- </property>
- <property name="xaDataSourceClassName">
- <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>
- </property>
- <property name="xaDataSourceProperties">
- <value>URL=jdbc:mysql://localhost:3306/test2;user=root;password=admin</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>
- <bean id="template1" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="datasource1" />
- </bean>
- <bean id="template2" class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="datasource2" />
- </bean>
- <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="300"/>
- </bean>
- <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
- <property name="transactionManager"><ref bean="atomikosTransactionManager" /></property>
- <property name="userTransaction"><ref bean="atomikosUserTransaction" /></property>
- </bean>
- <bean id="dao1" class="com.xa.dao.UserDao1">
- <property name="jdbcTemplate">
- <ref bean="template1"></ref>
- </property>
- </bean>
- <bean id="dao2" class="com.xa.dao.UserDao2">
- <property name="jdbcTemplate">
- <ref bean="template2"></ref>
- </property>
- </bean>
- <!-- -->
- <bean id="userServiceTarget" class="com.xa.service.UserServiceImpl">
- <property name="dao1" ref="dao1"/>
- <property name="dao2" ref="dao2"/>
- </bean>
- <bean id="userTest" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager">
- <ref bean="springTransactionManager"/>
- </property>
- <property name="target">
- <ref bean="userServiceTarget"/>
- </property>
- <property name="transactionAttributes">
- <props>
- <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
- </props>
- </property>
- </bean>
- </beans>
看上下文中的代码,很大部分和JOTM的相似,atomikos使用com.atomikos.jdbc.SimpleDataSourceBean类来创建datasource bean,这里需要特别注意
Java代码
- <property name="uniqueResourceName">
- <value>mysql/main</value>
- </property>
<property name="uniqueResourceName"> <value>mysql/main</value> </property>
Java代码
- <property name="uniqueResourceName">
- <value>mysql/news</value>
- </property>
<property name="uniqueResourceName"> <value>mysql/news</value> </property>
上面的代码为每个Datasource配置了一个唯一的名称,名称不允许相同,否则将会使用同一个datasource,而不会出现异常。
另外在配置文件中定义了Atomikos的事务管理器,并在Spring的JtaTransactionManager中引用
Java代码
- <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="300"/>
- </bean>
- <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
- <property name="transactionManager"><ref bean="atomikosTransactionManager" /></property>
- <property name="userTransaction"><ref bean="atomikosUserTransaction" /></property>
- </bean>
其它的代码没什么特别,和JOTM配置基本相同,JdbcTemplate,DAO,Service,事务代理等等....
仍然使用TestXa.java,修改成引用ApplicationContext-atomikos.xml的上下文配置
Java代码
- protected String[] getConfigLocations() {
- //return new String[] { "classpath:ApplicationContext-jotm.xml" };
- return new String[] { "classpath:ApplicationContext-atomikos.xml" };
- }
protected String[] getConfigLocations() { //return new String[] { "classpath:ApplicationContext-jotm.xml" }; return new String[] { "classpath:ApplicationContext-atomikos.xml" }; }
运行test,然后查看数据库状态,
然后修改方法参数使其不违反数据库约束,再运行Test观察数据库。
发表评论
-
Spring 多数据源声明式事务控制(PlatformTransactionManager )
2014-04-11 18:31 4722首先是TransactionManager的配置: ... -
Spring 动态数据源(AbstractRoutingDataSource )
2014-04-11 18:25 1662Spring动态配置多数据源,即在大型应用中对数据进行横向 ... -
(转)Spring Security 3.0 多页面登录配置
2012-10-19 17:01 5431网上很多文章是关于Spri ... -
Spring 中集成 JOTM 配置 JTA 事务
2011-12-27 19:52 1594Spring 中集成 JOTM 配置 JTA 事务: ... -
Spring 3.1整合EhCache
2011-08-29 16:42 1461Spring 3.1提供了对cache的 ... -
spring集成xfire教程
2011-04-02 15:20 1594配置web.xml <!-- SPRING ... -
关于Spring 声明式事务处理时,throws exception不回滚的问题
2010-09-29 23:31 9010前一段时间,项目代码评审,发现有TX不使用Spri ... -
iBatis SqlMap 的配置总结 收藏
2010-07-22 14:30 3755核心提示:SqlMap的配 ... -
ibatis oscache 使用中miss cache
2010-06-10 13:17 2890原始配置信息: <cacheModel id=&quo ... -
ibatis oscache配置以及【文件名、目录名或卷标语法不正确】错误解决
2010-05-26 13:13 3409sqlmap-config.xml 配置如下: < ... -
Hibernate+ehcache二级缓存技术
2010-02-01 20:57 9251、首先设置EhCache,建立配置文件ehcache.XML ... -
Hibernate的缓存讨论
2010-02-01 20:50 1117一般系统中有三种情况 ... -
OpenSessionInView Filter 但是发现不生效(转载)
2010-01-25 15:35 1790今天有一个朋友问了我一个问题,他使用的是Hibernate/S ... -
spring有三种启动方式,使用ContextLoaderServlet,ContextLoader
2010-01-19 17:25 1170spring有三种启动方式,使用ContextLoaderSe ... -
ApplicationContext和BeanFactory的关于单实例bean装载的区别
2010-01-19 17:04 1236Bean工厂延迟载入所有的Bean,直到getBean()方法 ... -
Spring AOP 学习小结(转载)
2010-01-06 21:24 1448一、AOP 概念 Joinpoint ... -
AOP术语(转载)
2010-01-06 21:04 1035AOP术语(转载) 2009-07-16 22:12 ... -
spring Lookup方法注入(转)---cglib解决子类过多问题、重构
2010-01-06 17:33 5930“Lookup方法”可以使Spri ... -
多对多关系中Set的查询
2010-01-05 22:27 1097多对多关系中Set的查询 一个老师教多个学生,一个学生 ... -
ibatis 使用 in子句
2009-09-28 18:44 1877因为in的性能问题,平常不怎么用。今天特殊需求,在ibatis ...
相关推荐
Atomikos 是一个开源的JTA实现,它为Spring提供了一个轻量级、高性能的分布式事务解决方案。本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在...
首先,Spring是一个开源的应用框架,它为Java开发者提供了一个全面的编程和配置模型。在分布式事务处理中,Spring通过其Transaction API提供了一种声明式事务管理方式,使得开发者无需在代码中显式控制事务的开始、...
5. 如何在Spring中配置Atomikos以支持JTA事务 6. 配置文件的编写,包括Spring和Atomikos的配置 7. 在多数据库或微服务架构中的事务管理策略 这些知识点对于开发分布式系统,尤其是需要处理复杂事务场景的项目来说至...
3. **Spring配置**:在Spring的配置文件中,使用`jee:jta-data-source`或`jee:resource-ref`元素来引用之前创建的JNDI数据源,并配置`PlatformTransactionManager`为`org.objectweb.jotm.CurrentJOTM`。 **Atomikos...
综上所述,Spring、MyBatis和Atomikos的集成主要涉及JTA标准的运用、Atomikos的配置以及Spring的事务管理。通过这种方式,可以实现在分布式环境下的事务一致性,确保多数据源操作的正确性。在实际开发中,根据具体的...
Atomikos是一款强大的开源事务处理系统,它支持JTA(Java Transaction API),可以为我们的应用程序提供分布式事务解决方案。 首先,我们来看Spring和Mybatis的集成。Spring作为一个轻量级的IoC(Inversion of ...
NULL 博文链接:https://onlyor.iteye.com/blog/1483289
本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...
在“springboot+jta+atomikos”项目中,Spring Boot作为基础框架,负责整体应用的结构和生命周期管理。Atomikos作为JTA的实现,提供了分布式事务管理的功能。当应用需要处理跨越多个数据库或服务的事务时,Atomikos...
本教程将详细介绍如何使用Spring Boot结合JTA(Java Transaction API)和Atomikos来配置多数据源事务。 首先,我们需要理解JTA的含义。JTA是Java平台的标准,用于管理跨多个数据源的分布式事务。它允许应用程序在一...
2. 配置JTA Manager:在Spring的配置文件(如`applicationContext-jta.xml`)中,你需要声明JTATransactionManager,并提供相应的JNDI名,以便Spring能从应用服务器中查找并使用它。例如: ```xml ...
本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...
Spring是一个开源的应用框架,它提供了全面的编程和配置模型,简化了Java企业级应用的开发。在多数据源的场景中,Spring提供了DataSourceTransactionManager和PlatformTransactionManager接口,使得我们可以灵活地...
Atomikos是著名的JTA(Java Transaction API)实现之一,提供了分布式事务管理的能力。AtomikosDataSource是基于Atomikos实现的XAPool,可以协调跨多个数据源的ACID(原子性、一致性、隔离性和持久性)事务。在...
标题中的“spring-jta-atomikos”是一个关于在Spring框架中使用JTA(Java Transaction API)和Atomikos的项目。JTA是Java平台中用于管理分布式事务的标准API,而Atomikos是一个开源的事务管理器,它支持JTA,并且在...
此外,还需要在应用服务器或者Spring等框架的配置文件中配置Atomikos事务管理器,例如在Spring中,你可以使用`AtomikosTransactionManager`作为`PlatformTransactionManager`的实现。 总的来说,Atomikos 3.7 JTA...
"spring+jpa+atomikos多数据源"是一个重要的技术组合,用于构建能够同时连接并操作不同数据库的应用程序。下面将详细介绍这个主题涉及的知识点。 首先,Spring框架是Java开发中最广泛使用的轻量级框架,提供依赖...
标题 "spring + hibernate + atomikos + mysql (diff database)" 涉及的是一个集成开发环境,其中Spring是Java企业级应用的核心框架,Hibernate是一个流行的ORM(对象关系映射)解决方案,Atomikos是一个开源的JTA...
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1958831
在Spring Boot中,通过配置`spring.jta.enabled=true`,并指定Atomikos的相关配置,我们可以启用JTA支持。 Hibernate则作为ORM(对象关系映射)工具,负责将Java对象与数据库表进行映射,简化数据库操作。在多数据...