随着网站(www.jzease.com)的扩大,在三个月的时间里Myslq的表格从四十几张,扩到现在的一百多张,以后肯定还会继续扩大为了更好的管理和运行,着手开始分数据库,这就涉及到跨数据库事务,我们使用的是Tomcat,它本身不支持XA,供我选择的就只有spring+JTA,JTA的实现就只有两种,一种是JOTM,另一种是AtomikosTransactionsEssentials.下面是JOTM的实现:
DataSource:
<bean id="jtaTxManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotmJta"/>
</bean>
<!--第一个数据源,采用XAPool链接池-->
<bean id="familyDataSource" 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="jotmJta" />
<property name="driverName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/family?useUnicode=true&characterEncoding=GBK"/>
</bean>
</property>
<property name="user" value="root"/>
<property name="password" value="1234"/>
</bean>
<!--第二个数据源,采用XAPool链接池-->
<bean id="localDataSource" 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="jotmJta" />
<property name="driverName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/local?useUnicode=true&characterEncoding=GBK"/>
</bean>
</property>
<property name="user" value="root"/>
<property name="password" value="1234"/>
</bean>
<!--tx配置aop,spring2.0的用法-->
<tx:annotation-driven transaction-manager="jtaTxManager"/>
DAO:
<beans>
<bean id="familyJdbcDAO" class="com.xband.admin.spring.LocalJdbcDAO">
<property name="dataSource" ref="familyDataSource" />
</bean>
<bean id="localJdbcDAO" class="com.xband.admin.spring.LocalJdbcDAO">
<property name="dataSource" ref="localDataSource" />
</bean>
</beans>
Service:
<!--在程序里使用元数据@Transactional声明事务-->
<bean id="springService" class=" com.xband.admin.spring.SpringService">
<property name="familyJdbcDAO" ref="familyHibernatedao"/>
<property name="localJdbcDAO" ref="localJdbcDAO"/>
</bean>
好!如果你只用JDBC写DAO,上面的配置完全没问题,两个数据源能同时rollback(),接着我们配置Hibernater,配置如下:
<beans>
<bean id="familySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="familyDataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.family.xml"/>
<property name="jtaTransactionManager"> <ref bean="jotmJta" /> </property>
</bean>
<bean id="localSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="localDataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.local.xml"/>
<property name="jtaTransactionManager"> <ref bean="jotmJta" /> </property>
</bean>
</beans>
http://www.iteye.com/topic/145404
分享到:
相关推荐
spring + JTA + JOTM实现分布式事务, 高大上的技术
1 通过集成JOTM,直接在Spring中使用JTA事务 1.1. 将JOTM以下类库添加到类路径中 1.2. 编写JOTM配置文件,放到类路径下 1.3. 在MySQL上建立两个数据库 1.4. 在Spring配置文件中配置JOTM 1.5. 在Spring中运行测试 2 ...
Spring+iBatis+JOTM实现JTA事务 spring ibatis jotm 分布 事务 多数据源
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1836707
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
代码下载下来,想要了解更多相关内容可以看http://www.cnblogs.com/shamo89/p/7307961.html
JOTM (Java Open Transaction Manager)是由ObjectWeb协会开发的功能完整的且资源开放的独立的...它提供了 JAVA 应用程序的事务支持,而且与 JTA( JAVA 事务 API)兼容。您可以在JOTM home page 了解到更多的详细信息。
spring+jotm 多数据源事务管理(三)JNDI+Tomcat 首先需要将jotm相关jar包加入到tomcat中,如下: o jotm.jar o jotm_jrmp_stubs.jar o ow_carol.jar o jta.jar o jta-spec1_0_1.jar o jts1_0.jar o objectweb-...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...