参考:http://huqilong.blog.51cto.com/53638/109113 在Spring中使用JTA事务管理(支持多个数据库事务)
JOTM原是JonAs使用的一个开源JTA事务实现,可以独立出来运行,和spring结合,使得spring具有“脱离容器”的JTA事务管理能力。JOTM可以在官方网站http://jotm.objectweb.org/download/index.html 下载到,下载后需要引用到的包有:carol.jar ,carol-interceptors.jar,howl.jar,jotm-core.jar,ow2-connector-1.5-spec.jar,ow2-jta-1.1-spec.jar,xapool.jar
1. application-context-jta.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:hibernate.properties</value>
</list>
</property>
</bean>
<bean id="dataSource1" 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="${datasource.driverClassName}" />
<property name="url" value="${datasource.url}" />
</bean>
</property>
<property name="user" value="${datasource.username}" />
<property name="password" value="${datasource.password}" />
</bean>
<bean id="dataSource2" 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="${datasource.driverClassName}" />
<property name="url" value="${datasource.url2}" />
</bean>
</property>
<property name="user" value="${datasource.username2}" />
<property name="password" value="${datasource.password2}" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource1" />
<property name="mappingLocations">
<list>
<value>classpath:com/tftech/club/model/hbm/*.hbm.xml</value>
<value>classpath:com/tftech/rbac/model/*.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
</props>
</property>
</bean>
<bean id="sessionFactory2"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource2" />
<property name="mappingLocations">
<list>
<value>classpath:com/tftech/club/model/hbm2/*.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
</props>
</property>
</bean>
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm" />
</bean>
</beans>
<bean id="activityDao" class="com.tftech.club.admin.dao.impl.ActivityDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="activityBakDao" class="com.tftech.club.admin.dao2.impl.ActivityBakDaoImpl">
<property name="sessionFactory" ref="sessionFactory2" />
</bean>
<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop>
<prop key="list*">PROPAGATION_SUPPORTS,readOnly</prop>
<prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean>
<bean id="activityService" parent="txProxyTemplate">
<property name="target">
<bean class="com.tftech.club.admin.service.impl.ActivityServiceImpl" autowire="byName">
</bean>
</property>
</bean>
2. carol.properties
#JNDI调用协议
carol.protocols=jrmp
#不使用CAROL JNDI封装器
carol.start.jndi=false
#不启动命名服务器
carol.start.ns=false
分享到:
相关推荐
在Java开发中,事务管理是确保数据一致性与完整性...然而,需要注意的是,JTA事务管理相对于本地事务会有一定的性能开销,因此在不需要分布式事务的情况下,可以选择使用Spring的本地事务管理,以提高系统的运行效率。
分布式事务是现代企业级应用中不可或缺的一部分,尤其是在大数据和微服务架构中,它确保了在多个数据库或资源管理系统中的数据一致性。本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java ...
Spring框架提供了对JTA(Java Transaction API)的支持,允许开发者处理跨多个数据存储的事务一致性。本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为...
MySQL是广泛使用的开源关系型数据库管理系统,它支持事务处理,是分布式事务中的关键组件。在这个项目中,MySQL作为数据存储,与JOTM和Spring配合,共同确保分布式事务的正确执行。 项目文件“AjtaAbatisTest”可能...
本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM(Java Open Transaction Manager)以及引用Tomcat的JTA事务。 ### 1. 通过集成JOTM,直接在Spring中使用JTA事务 #### 1.1. 添加JOTM类库到类路径...
通过Spring的`AbstractRoutingDataSource`和JTA,我们可以轻松地管理多个数据源,并通过JOTM保证分布式事务的一致性。在实际项目中,这种架构可以帮助我们构建可扩展、高可用的系统。在SpringDemo项目中,你可以找到...
在IT行业中,分布式事务管理是解决跨多个数据源一致性问题的关键技术。JOTM(Java Open Transaction Manager)是一个开源的事务管理器,它遵循JTA(Java Transaction API)标准,为Java应用程序提供全面的事务服务。...
在Spring框架中,多数据源事务管理是一项关键任务,特别是在大型企业级应用中,往往需要同时操作多个数据库。本篇文章将聚焦于如何结合Spring和JOTM(Java Open Transaction Manager)来实现多数据源的事务管理,...
JOTM 是一个开源的JTA事务管理器,实现了X/Open XA规范,允许跨多个资源进行分布式事务处理。它与各种数据库和JMS提供者兼容,为Java应用提供了强大的事务管理能力。JOTM可以在Spring框架中无缝集成,通过Spring的...
JOTM支持XAResource,使得它可以与其他数据库系统、消息队列等资源适配器协同工作,实现跨多个资源的分布式事务。 **3. 集成Spring与JOTM:** 要将JOTM集成到Spring中,首先需要在项目中引入JOTM的依赖。通常,这...
这个项目可能旨在演示如何在Spring MVC环境中配置和管理事务,特别是使用JOTM作为外部事务管理器来处理数据库操作。 **Spring MVC框架**: Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它提供了...
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...
首先,分布式事务是指在多个数据库或者服务之间协调数据操作的事务。在Spring中,我们可以通过编程式或声明式的方式来管理事务。声明式事务管理更受青睐,因为它更加便捷且易于维护,通常通过在XML配置文件或注解中...
7. **JDBC与JTA事务**:JDBC提供了一种在JTA环境中注册和管理事务的方法,通过`Connection#setAutoCommit(false)`禁用自动提交,并使用`UserTransaction`接口来开始、提交和回滚事务。 8. **Hibernate中的JTA支持**...
当应用程序需要在多个数据库或者服务之间进行事务操作时,JOTM能够确保所有操作要么全部成功,要么全部失败,实现ACID(原子性、一致性、隔离性和持久性)属性。 在压缩包中的“spring-transaction”可能包含了...
在Spring中使用JTA事务管理的文档通常会涵盖以下内容:配置JTA的DataSource、定义事务管理器、设置事务属性,以及在Service层中声明事务边界。"同时处理两个数据库"的场景下,Spring可以通过编程式或者声明式的方式...