JavaShuo
栏目
标签
JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
时间 2019-11-17
标签
jta
集成
jotm
atomikos
配置
分布式
事务
tomcat
应用
服务器
栏目
系统架构
繁體版
原文
原文链接
一.如下介绍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文件复制到项目类路径下,修改内容为:
Xml代码
# 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.创建两个数据库,配置两个数据源
Xml代码
<!-- 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.事务配置
Xml代码
<!-- 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可任选一种
Xml代码
<!-- 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
>
<
property
name
=
"testQuery"
value
=
"SELECT 1 from dual"
/>
<!--解决偶尔失去链接的bug-->
</
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.事务配置
Xml代码
<!-- 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
>
接下来的代码和上例类同就再也不写。
相关文章
1.
Spring分布式事务实现jotm,atomikos
2.
JTA分布式事务实战(atomikos)
3.
分布式事务 Spring+JTA+Atomikos+Hibernate+JMS
4.
JTA分布式事务与Atomikos
5.
Spring 集成 JOTM 的 JTA 事务管理
6.
分布式事务JTA实现Atomikos与Spring集成实践
7.
atomikos JTA 分布式事务配置和原理
8.
spring+mybatis+Atomikos JTA事务配置说明
9.
Spring分布式事务配置(atomikos)
10.
spring分布式事务(jotm)
更多相关文章...
•
Hibernate事务的配置
-
Hibernate教程
•
Git 服务器搭建
-
Git 教程
•
常用的分布式事务解决方案
•
再有人问你分布式事务,把这篇扔给他
相关标签/搜索
配置服务
分布式事务
NFS服务器配置
服务器
Linux服务器
云服务器
服务器篇
服务
分布式事务系列
事务
快乐工作
系统架构
Tomcat
SQLite教程
Spring教程
浏览器信息
服务器
应用
微服务
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
No provider available from registry 127.0.0.1:2181 for service com.ddbuy.ser 解决方法
2.
Qt5.7以上调用虚拟键盘(支持中文),以及源码修改(可拖动,水平缩放)
3.
软件测试面试- 购物车功能测试用例设计
4.
ElasticSearch(概念篇):你知道的, 为了搜索…
5.
redux理解
6.
gitee创建第一个项目
7.
支持向量机之硬间隔(一步步推导,通俗易懂)
8.
Mysql 异步复制延迟的原因及解决方案
9.
如何在运行SEPM配置向导时将不可认的复杂数据库密码改为简单密码
10.
windows系统下tftp服务器使用
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
Spring分布式事务实现jotm,atomikos
2.
JTA分布式事务实战(atomikos)
3.
分布式事务 Spring+JTA+Atomikos+Hibernate+JMS
4.
JTA分布式事务与Atomikos
5.
Spring 集成 JOTM 的 JTA 事务管理
6.
分布式事务JTA实现Atomikos与Spring集成实践
7.
atomikos JTA 分布式事务配置和原理
8.
spring+mybatis+Atomikos JTA事务配置说明
9.
Spring分布式事务配置(atomikos)
10.
spring分布式事务(jotm)
>>更多相关文章<<