Spring全局事务之JBOSS JTA实现Oracle、Ms SqlServer在同一事务中
很久以来就一直知道,使用容器事务可以实现多个不同数据源处于同一事务中的功能。苦于没有时间和机会好好实验一把。今天机会难得,化了半天时间做了一个两个Oracle数据源和一个Ms Sql Server数据源在JBoss下的协同事务。下面简单说一下配置和实验情况。
第一、JBoss数据源配置
要使用JBoss的JTA,首先要做的就是配置链接各种数据源的XA类型的ds文件。
1、链接Oracle一的数据源,这是一个链接Oracle小型机的oracle-ds.xml 链接文件。配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- -->
<!-- ===================================================================== -->
<!-- $Id: oracle-xa-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ -->
<!-- ===================================================================== -->
<!-- ATTENTION: DO NOT FORGET TO SET Pad=true IN transaction-service.xml -->
<!-- ===================================================================== -->
<datasources>
<xa-datasource>
<jndi-name>XAOracleDS</jndi-name>
<track-connection-by-tx/>
<isSameRM-override-value>false</isSameRM-override-value>
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
<xa-datasource-property name="URL">jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.243)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.244)(PORT = 1521))(LOAD_BALANCE = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = GBDATA)))</xa-datasource-property>
<xa-datasource-property name="User">abc</xa-datasource-property>
<xa-datasource-property name="Password">abc</xa-datasource-property>
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
<!--valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name-->
<!-- Checks the Oracle error codes and messages for fatal errors -->
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<!-- Oracles XA datasource cannot reuse a connection outside a transaction once enlisted in a global transaction and vice-versa -->
<no-tx-separate-pools/>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml -->
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</xa-datasource>
<mbean code="org.jboss.resource.adapter.jdbc.vendor.OracleXAExceptionFormatter"
name="jboss.jca:service="OracleXAExceptionFormatter">
<depends optional-attribute-name="TransactionManagerService">jboss:service=TransactionManager</depends>
</mbean>
</datasources>
2、链接Oracle二的数据源,这是一个链接Oracle测试服务器的testoracle-xa-ds.xml链接文件。配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- ==&#