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.
正確理解商業智能 BI 的價值所在
2.
解決梯度消失梯度爆炸強力推薦的一個算法-----LSTM(長短時記憶神經網絡)
3.
解決梯度消失梯度爆炸強力推薦的一個算法-----GRU(門控循環神經⽹絡)
4.
HDU4565
5.
算概率投硬幣
6.
密碼算法特性
7.
DICOMRT-DiTools:clouddicom源碼解析(1)
8.
HDU-6128
9.
計算機網絡知識點詳解(持續更新...)
10.
hods2896(AC自動機)
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
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)
>>更多相關文章<<