- 浏览: 159531 次
- 性别:
- 来自: 长沙
最新评论
-
h416373073:
多谢分享.
java代理模式 -
yeruowei:
为嘛atomikos的网站打不开?
spring3.0+Atomikos 构建jta的分布式事务 -
guoyanwei_ok:
也赞成2楼的说法。
Java装饰模式 -
liangsaifei:
我说那么面熟,原来是马士兵讲过的啊!
java代理模式 -
851228082:
这个例子,跟静态代理类完全一样呀。
Java装饰模式
spring3.0+Atomikos 构建jta的分布式事务
spring3.0已经不再支持jtom了,不过我们可以用第三方开源软件atomikos(http://www.atomikos.com/)来实现.
Atomikos是目前在分布式事务管理中做得相当不错的开源软件。有10年以上的经验,Atomikos保障您的关键事务和
防止昂贵的数据丢失在发生系统故障或事故中.Atomikos支持XA(全局事务)和NON-XA(非全局事务),NON-XA效率高
于XA.本文主要是讲XA事件,因为要在不同的数据库中操作多张表.
接下来说一下怎么和spring3.0结合使用
首先要下载spring3.0的相关jar包.这个相信对大家说来不难
第二.下载Atomikos,需要以下这些包
第三.配置
在applicationContext.xml文件当中作如下配置
第四.在src文件夹下面加入一个jta.properties文件.
文件内容如下,这个文件是必须的.主是是设置atomikos启动的一些参数,比如日志的输出级别,日志文件的名称等.
第五.具体应用
在需要分布事务处理的地方手动开启事务
至于怎么与hibernate,mybatis这些整合使用,应该也不难,把数据源换成atomikos数据源应该就差不多了.
如果想了解更多有关atomikos的用法,可以查看这个链接http://www.atomikos.com/Documentation/IntegratingTransactionEssentials
spring3.0已经不再支持jtom了,不过我们可以用第三方开源软件atomikos(http://www.atomikos.com/)来实现.
Atomikos是目前在分布式事务管理中做得相当不错的开源软件。有10年以上的经验,Atomikos保障您的关键事务和
防止昂贵的数据丢失在发生系统故障或事故中.Atomikos支持XA(全局事务)和NON-XA(非全局事务),NON-XA效率高
于XA.本文主要是讲XA事件,因为要在不同的数据库中操作多张表.
接下来说一下怎么和spring3.0结合使用
首先要下载spring3.0的相关jar包.这个相信对大家说来不难
第二.下载Atomikos,需要以下这些包
atomikos-util-1.0.jar cglib-nodep-2.2.2.jar transactions-3.7.0.jar transactions-api-3.7.0.jar transactions-jdbc-3.7.0.jar transactions-jta-3.7.0.jar
第三.配置
在applicationContext.xml文件当中作如下配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-lazy-init="true"> <!-- spring atomikos 配置 开始--> <!-- mysql数据源 --> <bean id="mysqlDS" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <description>mysql xa datasource</description> <property name="uniqueResourceName"> <value>mysql_ds</value> </property> <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" /> <property name="xaProperties"> <props> <prop key="user">userName</prop> <prop key="password">password</prop> <prop key="URL">jdbc\:mysql\://127.0.0.1\:3306/dataBaseName?autoReconnect\=true</prop> </props> </property> <!-- 连接池里面连接的个数? --> <property name="poolSize" value="3"/> </bean> <!-- oracle数据源 --> <bean id="oracleDS" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close"> <description>oracle xa datasource</description> <property name="uniqueResourceName"> <value>oracle_ds</value> </property> <property name="xaDataSourceClassName"> <value>oracle.jdbc.xa.client.OracleXADataSource</value> </property> <property name="xaProperties"> <props> <prop key="user">userName</prop> <prop key="password">password</prop> <prop key="URL">jdbc\:oracle\:thin\:@127.0.0.1\:1521\:dataBaseName</prop> </props> </property> <!-- 连接池里面连接的个数? --> <property name="poolSize" value="3"/> </bean> <!-- atomikos事务管理器 --> <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <description>UserTransactionManager</description> <property name="forceShutdown"> <value>true</value> </property> </bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> <property name="transactionTimeout" value="300" /> </bean> <!-- spring 事务管理器 --> <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager"> <ref bean="atomikosTransactionManager" /> </property> <property name="userTransaction"> <ref bean="atomikosUserTransaction" /> </property> </bean> <!-- spring 事务模板 我在项目当中用的是编程式事务--> <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"> <property name="transactionManager"> <ref bean="springTransactionManager" /> </property> </bean> <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> <constructor-arg> <ref bean="mysqlDS" /> </constructor-arg> </bean> <bean id="simplejdbcTemplateOra" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> <constructor-arg> <ref bean="oracleDS" /> </constructor-arg> </bean> <!-- spring atomikos 配置 结束--> <!-- 接下来就是具体的Dao的配置 --> <bean id="oracleJtaDao" class="com.dao.TerminalOracleJtaDao"> <property name="simplejdbcTemplateOra"> <ref bean="simplejdbcTemplateOra" /> </property> <property name="transactionTemplate"> <ref bean="transactionTemplate" /> </property> </bean> <bean id="myaqlJtaDao" class="com.dao.TerminalMyaqlJtaDao"> <property name="simpleJdbcTemplate"> <ref bean="simpleJdbcTemplate" /> </property> <property name="transactionTemplate"> <ref bean="transactionTemplate" /> </property> </bean> </beans>
第四.在src文件夹下面加入一个jta.properties文件.
文件内容如下,这个文件是必须的.主是是设置atomikos启动的一些参数,比如日志的输出级别,日志文件的名称等.
# SAMPLE PROPERTIES FILE FOR THE TRANSACTION SERVICE # THIS FILE ILLUSTRATES THE DIFFERENT SETTINGS FOR THE TRANSACTION MANAGER # UNCOMMENT THE ASSIGNMENTS TO OVERRIDE DEFAULT VALUES; # Required: factory implementation class of the transaction core. # NOTE: there is no default for this, so it MUST be specified! # com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory # Set base name of file where messages are output # (also known as the 'console file'). # com.atomikos.icatch.console_file_name = tm.out # Size limit (in bytes) for the console file; # negative means unlimited. # # com.atomikos.icatch.console_file_limit=-1 # For size-limited console files, this option # specifies a number of rotating files to # maintain. # # com.atomikos.icatch.console_file_count=1 # Set the number of log writes between checkpoints # # com.atomikos.icatch.checkpoint_interval=500 # Set output directory where console file and other files are to be put # make sure this directory exists! # # com.atomikos.icatch.output_dir = ./ # Set directory of log files; make sure this directory exists! # # com.atomikos.icatch.log_base_dir = ./ # Set base name of log file # this name will be used as the first part of # the system-generated log file name # com.atomikos.icatch.log_base_name = tmlog # Set the max number of active local transactions # or -1 for unlimited. # # com.atomikos.icatch.max_actives = 50 # Set the default timeout (in milliseconds) for local transactions # # com.atomikos.icatch.default_jta_timeout = 10000 # Set the max timeout (in milliseconds) for local transactions # # com.atomikos.icatch.max_timeout = 300000 # The globally unique name of this transaction manager process # override this value with a globally unique name # com.atomikos.icatch.tm_unique_name = tm # Do we want to use parallel subtransactions? JTA's default # is NO for J2EE compatibility # # com.atomikos.icatch.serial_jta_transactions=true # If you want to do explicit resource registration then # you need to set this value to false. # # com.atomikos.icatch.automatic_resource_registration=true # Set this to WARN, INFO or DEBUG to control the granularity # of output to the console file. # com.atomikos.icatch.console_log_level=INFO # Do you want transaction logging to be enabled or not? # If set to false, then no logging overhead will be done # at the risk of losing data after restart or crash. # # com.atomikos.icatch.enable_logging=true # Should two-phase commit be done in (multi-)threaded mode or not? # Set this to false if you want commits to be ordered according # to the order in which resources are added to the transaction. # # NOTE: threads are reused on JDK 1.5 or higher. # For JDK 1.4, thread reuse is enabled as soon as the # concurrent backport is in the classpath - see # http://mirrors.ibiblio.org/pub/mirrors/maven2/backport-util-concurrent/backport-util-concurrent/ # # com.atomikos.icatch.threaded_2pc=false # Should shutdown of the VM trigger shutdown of the transaction core too? # # com.atomikos.icatch.force_shutdown_on_vm_exit=false
第五.具体应用
在需要分布事务处理的地方手动开启事务
TransactionTemplate.getTransactionTemplate().execute(new TransactionCallback(){ public Object doInTransaction(TransactionStatus status){ boolean flag = true; try { } catche (Exception e){ flag = false; } finally { if (!flag) { status.status.setRollbackOnly(); } } } })
至于怎么与hibernate,mybatis这些整合使用,应该也不难,把数据源换成atomikos数据源应该就差不多了.
如果想了解更多有关atomikos的用法,可以查看这个链接http://www.atomikos.com/Documentation/IntegratingTransactionEssentials
发表评论
-
ELK日志分析平台搭建
2019-04-17 17:08 0背景 最近公司在做微服务方面的开发,系统日志分散在各个服务下, ... -
spring mybatis 多数据源读写分离实际应用
2016-05-26 16:48 1135通过继承spring AbstractRoutingDataS ... -
spring定时任务
2011-09-17 15:02 1577spring定时任务配置: <?xml versio ... -
UML类图关系大全
2011-03-01 17:02 1163这篇文章写得很不错,我在此收藏了,供以后学习 http: ... -
struts2+hibernate3.3+spring3.0整合
2011-02-25 13:05 2523struts2+hibernate3.3+spring3.0整 ... -
Java多线程编程基础之线程对象
2011-02-16 13:43 1294Java多线程编程基础之线程对象 在进入java平台的线程 ... -
RMI(远程接口调用)
2011-02-14 17:54 49241RMI(远程接口调用) 1. RMI的原理: RMI系统结构, ... -
log4j配置
2010-12-21 15:38 947log4j.rootLogger=INFO,A1 #输出到控制 ... -
EJB3.0学习笔记
2010-11-12 17:20 1777一.EJB3.0分为会话Bean(session bean), ... -
WebService 简单应用
2010-11-10 17:28 1410一.编写服务器端 1.在myeclipes中新建一个webs ... -
struts2开发简单实例
2010-11-03 17:44 23682struts2开发简单实例 1.引入struts2相应的ja ...
相关推荐
通过理解JTA的基本原理,掌握Spring的事务管理机制,以及熟悉Atomikos的使用,开发者可以构建出高可用、强一致性的分布式系统。在实际操作中,还需要不断地调试和优化,以确保系统的稳定性和性能。
本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...
本文将详细讲解如何利用Spring Boot、Atomikos、JPA(Java Persistence API)以及MySQL来实现JTA(Java Transaction API)分布式事务。 首先,Spring Boot是一个轻量级的框架,它简化了基于Spring的应用程序开发...
使用spring + atomikos+druid配置的分布式事务demo,两种数据源配置方式都可以,使用junit测试没问题,案例中使用的mysql数据库是8.0.11版本,版本不同请自行修改pom.xml和jdbc.properties
Spring、Hibernate和JTA(Java Transaction API)是Java开发者在构建分布式事务解决方案时常用的三大技术。本示例“第二部分spring+hibernate+jta 分布式事务Demo”将帮助我们理解如何在这三个框架之间协同工作,...
本示例"spring+atomikos+druid分布式事务Demo"聚焦于如何在Spring框架中利用Atomikos和Druid来处理分布式事务。接下来,我们将深入探讨这三个组件以及它们在实现分布式事务中的作用。 Spring是一个广泛使用的Java...
总的来说,Spring 3.0、Hibernate和Atomikos的组合提供了一种强大且灵活的方式来处理多数据源的分布式事务,使开发者能够构建高度可用和可扩展的企业级应用。通过深入理解这些技术的原理和实践,开发者可以更好地...
总之,本案例展示了如何在Spring Boot环境下,利用Atomikos、JTA、Hibernate和MyBatis,配合MySQL数据库,构建一个健壮的分布式事务处理系统。这样的系统不仅提高了系统的扩展性和可维护性,还确保了在分布式环境下...
SSH + atomikos 打造Java分布式事务 web工程 直接导入myeclipse即可运行 数据库可参照mutilDataSource/model下的实体类进行创建(两个表)数据库使用的是oracle
本项目使用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate和MySQL来实现分布式事务处理和多数据源管理,以确保在多个数据库操作之间保持事务的ACID特性。 首先,Spring Boot作为微服务开发的主流...
5. 开启Spring事务管理:在Spring的配置类中,启用@EnableTransactionManagement注解,配置PlatformTransactionManager为Atomikos的事务管理器。 6. 编写业务代码:在需要进行分布式事务的Service层方法上,使用@...
本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...
在Spring中集成Atomikos,可以实现全局的分布式事务管理,确保在分布式环境下的数据一致性。 4. **配置多数据源** 在Spring的XML配置文件中,我们需要为每个数据源创建一个`AtomikosDataSourceBean`实例,并配置...
Spring框架提供了强大的支持来处理分布式事务,而Atomikos是一个开源的事务管理器,专门用于处理JTA(Java Transaction API)事务,尤其适用于微服务和分布式环境。本教程将探讨如何结合Spring和Atomikos来实现...
在这个案例中,我们将深入探讨如何使用Spring 4与Atomikos来实现跨数据库的分布式事务管理。 Atomikos是一款开源的事务处理监控器(Transaction Processing Monitor,TPM),它支持JTA(Java Transaction API)标准...
本教程将探讨如何利用Spring Boot、Druid、Mybatis以及Atomikos来配置多数据源并实现分布式事务。 首先,Spring Boot是Java生态系统中的一个流行框架,它简化了设置和配置过程,使得开发人员可以快速启动新项目。在...
Spring Boot作为轻量级的Java开发框架,结合Atomikos这样的分布式事务管理器,可以有效地解决这些问题。本文将深入探讨如何在Spring Boot项目中实现Atomikos分布式事务以及动态数据源切换的两种示例。 首先,我们...
本项目“springboot+jta+atomikos”旨在利用Spring Boot框架、Java Transaction API (JTA) 和 Atomikos 这一开源事务管理器来实现分布式事务的统一管理。下面将详细阐述这三个关键组件以及它们如何协同工作。 **...