?分布式事務必須使用的數據庫支持 并且提供 XA 連接驅動 如 mysql 的5.0+版本驅動中就有 com.mysql.jdbc.jdbc2.optional.MysqlXAConnection ?等 這些對 XA 分布事務支持的連接 ,所以理所當然我們要使用XA事務就必須使用這種XA連接 , mysql5.1 是支持分布事務的 ,mysql驅動需要5.0+?
Atomikos分兩個:一個是開源的TransactionEssentials,一個是商業的ExtremeTransactions。
TransactionEssentials的主要特征:JTA/XA 事務管理 -- 提供事務管理和連接池不需要應用服務器 -- TransactionEssentials可以在任何Java EE應用服務器中運行,也就是不依賴于任何應用服務器開源 -- TransactionEssentials是遵守Apache版本2許可的開源軟件專注于JDBC/JMS -- 支持所有XA資源,但是資源池和消息監聽是專供JDBC和JMS的與Spring 和 Hibernate 集成 -- 提供了描述如何與Spring和Hibernate集成的文檔?
AtomikosTransactionsEssentials 當前版本是3.8.0下載地址:http://www.atomikos.com/Main/InstallingTransactionsEssentials?
Atomikos 所需jar包: transactions-jdbc.jar transactions-jta.jar transactions.jar atomikos-util.jar transactions-api.jar?
用maven要簡單一點,只需要加入兩個依賴:?
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
?配置數據源?
<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="ds1"/>
<property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>
<property name="xaProperties">
<props>
<prop key="url">jdbc:mysql://localhost/test</prop>
<prop key="user">test</prop>
<prop key="password">test</prop>
</props>
</property>
<property name="minPoolSize" value="10" />
<property name="maxPoolSize" value="100" />
<property name="borrowConnectionTimeout" value="30" />
<property name="testQuery" value="select 1" />
<property name="maintenanceInterval" value="60" />
</bean>
使用數據源?
? ? <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
? ? ? ? <property name="dataSource" ref="dataSource" />
? ? ? ? <property name="configLocation" value="classpath:resources/mybatisConfig.xml" />
? ? </bean>
配置jta事務管理?
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager"> ?
?? ? ? ?<bean class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> ?
?? ? ? ? ? ?<property name="forceShutdown" value="true"/> ?
?? ? ? ?</bean> ?
?? ?</property> ?
?? ?<property name="userTransaction"> ?
?? ? ? ?<bean class="com.atomikos.icatch.jta.UserTransactionImp"/> ?
?? ?</property> ?
?? ?<property name="allowCustomIsolationLevels" value="true" />
</bean>
<tx:annotation-driven/> ?
<!-- 定義通知攔截方法 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- <tx:method name="*" propagation="SUPPORTS" read-only="true"rollback-for="Exception" /> -->
<tx:method name="save*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="update*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
配置jta.properties?
com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory
# Set the default timeout (in milliseconds) for local transactions
#
com.atomikos.icatch.default_jta_timeout = 18000
?
# Set the max timeout (in milliseconds) for local transactions
#
com.atomikos.icatch.max_timeout = 300000
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
