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

spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器) NULL 博文链接:https://zhaoshijie.iteye.com/blog/1836707 立即下载

一.以下介绍Spring中直接集成JOTM提供JTA事务管理、将JOTM集成到Tomcat中。 
(经过测试JOTM在批量持久化时有BUG需要修改源码GenericPool类解决)! 
参考文章http://mavin.zhou.blog.163.com/blog/static/114522435200971822334475/ 
通过集成JOTM,直接在Spring中使用JTA事务 
JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,它本身也是开源应用程序服务器JOnAS(Java Open Application Server)的一部分,为其提供JTA分布式事务的功能。 
Spring 2.0附带的依赖类库中虽然包含jotm类库,但是并不完整,你可以到http://jotm.objectweb.org下载完全版的JOTM。 
Spring为JOTM提供了一个org.springframework.transaction.jta.JotmFactoryBean支持类,通过该支持类可以方便地创建JOTM本地实例。 
1.将jotm的jar包lib目录下所有jar复制到项目中 
2.将jotm的jar包conf目录下carol.properties文件复制到项目类路径下,修改内容为:

复制代码
  
# do not use CAROL JNDI wrapper
carol.start.jndi = false

# do not start a name server
carol.start.ns = false

# Naming Factory
carol.jndi.java.naming.factory.url.pkgs = org.apache.naming
复制代码

3.建立两个数据库,配置两个数据源

复制代码
  
<!-- XAPool配置,内部包含了一个XA数据源,对应相应的数据库 -->
< bean id ="mysqlJta" class ="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method ="shutdown" >
<!-- 内部XA数据源 -->
< property name ="dataSource" >
< bean class ="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method ="shutdown" >
< property name ="transactionManager" ref ="jotm" />
< property name ="driverName" value ="com.mysql.jdbc.Driver" />
< property name ="url" value ="jdbc:MySQL://localhost:3309/test" />
< property name ="user" value ="root" />
< property name ="password" value ="" />
</ bean >
</ property >
< property name ="user" value ="root" />
< property name ="password" value ="" />
</ bean >

< bean id ="oracleJta" class ="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method ="shutdown" >
< property name ="dataSource" >
< bean class ="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method ="shutdown" >
< property name ="transactionManager" ref ="jotm" />
< property name ="driverName" value ="oracle.jdbc.driver.OracleDriver" />
< property name ="url" value ="jdbc:oracle:thin:@localhost:1521:orcl" />
< property name ="user" value ="orcl" />
< property name ="password" value ="" />
</ bean >
</ property >
< property name ="user" value ="orcl" />
< property name ="password" value ="" />
</ bean >
复制代码

4.事务配置

复制代码
  
<!-- JOTM本地实例 -->
< bean id ="jotm" class ="org.springframework.transaction.jta.JotmFactoryBean" />

<!-- JTA事务管理器 -->
< bean id ="txManager" class ="org.springframework.transaction.jta.JtaTransactionManager" >
< property name ="userTransaction" ref ="jotm" />
</ bean >

<!-- JTA事务传播特性 -->
< tx:advice id ="txAdviceJta" transaction-manager ="txManager" >
< tx:attributes >
< tx:method name ="Jta*" isolation ="DEFAULT" propagation ="REQUIRED" rollback-for ="Exception" />
< tx:method name ="*" read-only ="true" />
</ tx:attributes >
</ tx:advice >

< aop:config >
< aop:advisor pointcut ="execution(* com.xxxxl.service.impl..*(..))" advice-ref ="txAdviceJta" />
</ aop:config >

< bean id ="timerDaoMysql" class ="com.xxxxl.TimerDaoImpl" scope ="prototype" >
< property name ="dataSource" ref ="mysqlJta" ></ property >
</ bean >
< bean id ="timerDaoOracle" class ="com.xxxxl.TimerDaoImpl" scope ="prototype" >
< property name ="dataSource" ref ="oracleJta" ></ property >
</ bean >
复制代码

二.以下介绍Spring中直接集成Atomikos提供JTA事务管理、将Atomikos集成到Tomcat中。(经过测试推荐此方法) 
Atomikos Transactions Essentials现在的版本是3.1.7,可以在http://www.atomikos.com/Main/TransactionsEssentialsDownloadForm 下载,在发布包里的examples文件夹下面有些例子,非常实用,我在使用中参考里面的例子很容易配置成功。1.将Atomikos的jar包dist目录下所有jar复制到项目中 
2.建立两个数据库,配置两个数据源。 
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 >
接下来的代码和上例类同就不再写。
另外,在实际项目中,采用了方法二,且使用了HibernateTemplate,这个该怎么配还是怎么配;
在同一台机器上,配置两套及以上的应用,会报异常,这个需要把下载包中的jta.properties包含到Classpath 中,且修改如下
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory com.atomikos.icatch.log_base_name = tmlog com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm com.atomikos.icatch.enable_logging=false
com.atomikos.icatch.enable_logging=false 这句话很重要。
JOTM jar包 本资源为实现JOTM所需jar包,JOTM具体实现网上代码很多。。。。 立即下载

相关推荐

tomcat配置Atomikos

tomcat配置Atomikos,非常详细描述了在非脱管环境下,通过tomcat配置Atomikos,实现jta事务管理。

atomikos JTA 源码解读

一.DataSource 1.AbstractDataSourceBean  是抽象方法,统一实现了ConnectionPoolProperties接口,及HeuristicDataSource接口,用于设置数据源的属性及进行数据源连接(调用ConnectionPool) 除上面的功能外,他还可以进行数据源连接池的管理,主要的方法有: intcom.atomikos.jdb

简简单单,平平淡淡 1万+

JNDI tomcat

NULL 博文链接:https://cai-bird.iteye.com/blog/1958729

Tomcat 结合Atomikos 实现JTA

Tomcat下配置Atomikos实现JTA            Tomcat作为一款经典的Web服务器,在开发、测试和生产环境中得到了广泛的使用。但Tomcat毕竟不是Java EE服务器,因此在EJB,JTA方面并没有提供支持。本文讲述了Tomcat使用Atomikos实现JTA的一种方法。          在Tomcat中使用JTA,可以将Atomikos部署在Tomcat中,使用

xuyu_yt的博客 4074

Tomcat6配置JNDI出错

NULL 博文链接:https://zy19880406.iteye.com/blog/677975

PX4飞控 vs 大疆A3:开源与闭源方案在无人机硬件架构中的实战对比

本文深入对比了PX4飞控与大疆A3在无人机硬件架构上的差异,分析了开源与闭源方案在工业级无人机开发中的优劣势。通过详细的硬件配置、传感器兼容性、扩展能力及性能测试数据,为开发者提供选型指南,特别适合需要自定义算法和复杂功能集成的项目。

a3b4c5的博客 888

分布式事务理论

分布式事务与本地事务的区别 本地事务:整个服务只能操作一个数据库资源,也就是一个tomcat操作一个数据库【同一线程】 分布式事务(多进程间的,一个端口就是一个进程):一个tomcat操作多个数据库或者多个tomcat操作一个或多个数据库 分布式事务相关理论:CAP定理 CAP定理是在 1998年加州大学的计算机科学家 Eric Brewer (埃里克.布鲁尔)提出,分布式系统有三个指标 Consistency 一致性 Availability 可用性 Partition tole

老白酒,用心酿的博客 215

SATA硬件电路设计实战:从接口规范到高速布线技巧

本文深入探讨了SATA硬件电路设计的核心要点与实战技巧。从接口物理电气规范、AC耦合电容与阻抗控制等基础,到FPGA/SoC高速收发器选型配置,再到应对6Gbps高速信号的PCB布局布线艺术,系统性地解析了SATA电路设计中的关键挑战与解决方案,助力工程师规避常见陷阱,实现稳定可靠的存储接口设计。

tech5的博客 530

atomikos 事务超时_分布式事务 随手笔记

分布式事物​产生背景:在不同的项目中(不同的数据库要保证数据的一致性),如在A项目或者服务需要调用B服务时,就要注意数据的一致性问题,要么一起更新成功,要么一起回滚!事物特性(acid)原子性(A)所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。一致性(C)事务的执行必须保证系统的一...

weixin_39529903的博客 437

6.2 磁悬浮轴承:软件架构与实现

本文系统阐述了磁悬浮轴承控制系统的软件架构与实现方法。采用分层架构设计,包括硬件抽象层、实时控制内核、控制算法层和应用层,确保系统实时性和可靠性。重点分析了电流环、位置环等关键控制任务的调度策略,比较了不同硬件平台(DSP、ARM、FPGA)的软件实现方案。强调模块化设计、配置化管理等工程实践,并详细介绍了从算法仿真到系统联调的完整开发流程。最后指出严格的测试验证是保证系统性能的关键,需通过多阶段测试评估起浮时间、稳态精度等核心指标。

技术工作者 752

LWIP协议栈在STM32H7上的内存优化实战:如何用32KB RAM实现稳定千兆以太网通信

本文深入探讨了在STM32H7微控制器上,如何通过内存优化策略,在仅32KB的D2 SRAM中稳定运行LWIP协议栈以实现千兆以太网通信。文章详细分析了STM32H7的内存架构、LWIP的内存消耗瓶颈,并提供了从描述符表与PBUF池精确分配、链接脚本修改到MPU区域划分的一整套实战优化方案,旨在解决大数据量传输卡死等常见配置问题。

gg901的博客 603
上一篇: Windows下Tomcat服务的JVM设置相关
下一篇: 轻松掌握ISO8583报文协议
sun8288
博客等级 码龄22年 10粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值