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.
說說Python中的垃圾回收機制?
2.
螞蟻金服面試分享,阿里的offer真的不難,3位朋友全部offer
3.
Spring Boot (三十一)——自定義歡迎頁及favicon
4.
Spring Boot核心架構
5.
IDEA創建maven web工程
6.
在IDEA中利用maven創建java項目和web項目
7.
myeclipse新導入項目基本配置
8.
zkdash的安裝和配置
9.
什麼情況下會導致Python內存溢出?要如何處理?
10.
CentoOS7下vim輸入中文
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
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)
>>更多相關文章<<