atomikos + spring + jboss 6
atomikos transactions Essentials 为分布式事务开源免费版本
背景
业务需要跨多个数据库进行处理。
分布式事务主流有几种解决方案,最初选型为SEATA,
而系统架构比较久,spring4.2 + hibernate 4.3, 且现行大部分方案都基于springBoot,直接升级为springboot风险和成本比较高。
在不大幅度改动现有架构的前提, 采用JTA 协议的实现 atomikos transactions Essentials。
优点:小范围对依赖包进行升级,通过配置可以实现分布式事务的控制;
xml 配置(核心内容参考)
数据源 与JPA配置
<bean id="xxx_dataSource" class="com.alibaba.druid.pool.xa.DruidXADataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="jdbc:oracle:thin:@ (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=ip)(PORT=1521))) (CONNECT_DATA= (SERVICE_NAME=sid)))" />
<property name="username" value="ss" />
<property name="password" value="ss" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1" />
<property name="minIdle" value="1" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 1 from dual" />
<property name="testWhileIdle" value