分布式事务是指操作多个数据库之间的事务,在tomcat下,是没有分布式事务的,不过可以借助于第三方软件jotm(Java Open Transaction Manager )和AtomikosTransactionsEssentials实现,在spring中分布式事务是通过jta(jotm,atomikos)来进行实现,下面是采用jotm进行实现spring跨库之间的事务
jotm下载地址:http://jotm.ow2.org/xwiki/bin/view/Main/Download_Releases
我采用的是2.1.4版本的,解压后里面有很多jar包,只需要提取其中的几个即可:
carol.jar,howl.jar,jotm-core.jar,jotm-datasource.jar,ow2-connector-1.5-spec.jar,ow2-jta-1.1-spec.jar,xapool.jar,jotm-client.jar,commons-cli-1.0.jar
applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd ">
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
<!--定义jta事务-->
<bean id="tsManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm"/>
</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="jotm"/>
<property name="driverName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/systemdb"/>
</bean>
</property>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
<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="jotm"/>
<property name="driverName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/userdb"/>
</bean>
</property>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="sessionFactorySystemdb"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/cn/luotoo/system/model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.batch_size">15</prop>
<prop key="hibernate.connection.autocommit ">false</prop>
</props>
</property>
<property name="dataSource">
<ref bean="familyDataSource"/>
</property>
</bean>
<!-- userdb sessionFactory -->
<bean id="sessionFactoryUserdb"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingDirectoryLocations">
<list>
<value>classpath:/cn/luotoo/user/model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.batch_size">15</prop>
<prop key="hibernate.connection.autocommit ">false</prop>
</props>
</property>
<property name="dataSource">
<ref bean="localDataSource"/>
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="tsManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--面向切面事务-->
<aop:config>
<aop:advisor pointcut="execution(* cn.luotoo.user.service.*.*(..))" advice-ref="txAdvice"/>
<aop:advisor pointcut="execution(* cn.luotoo.system.service.*.*(..))" advice-ref="txAdvice"/>
<!--
<aop:pointcut id="interceptorPointCuts"
expression="execution(* cn.luotoo.user.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice"
pointcut-ref="interceptorPointCuts"/>-->
</aop:config>
<bean id="userDao" class="cn.luotoo.user.dao.impl.UserDaoHibernate">
<property name="sessionFactory">
<ref local="sessionFactoryUserdb"/>
</property>
</bean>
<bean id="userService" class="cn.luotoo.user.service.impl.UserServiceImpl">
<property name="userDao"><ref local="userDao"/></property>
<property name="testDao"><ref local="testDao"/></property>
</bean>
<bean id="testDao" class="cn.luotoo.system.dao.impl.TestDaoHibernate">
<property name="sessionFactory">
<ref local="sessionFactorySystemdb"/>
</property>
</bean>
<bean id="testService" class="cn.luotoo.system.service.impl.TestServiceImpl">
<property name="testDao">
<ref local="testDao"/>
</property>
</bean>
</beans>
分享到:
相关推荐
总结来说,Spring分布式事务实现主要依赖于Spring框架的事务管理能力、JOTM作为JTA实现的事务管理器,以及相关的JDBC驱动来连接数据库。通过声明式事务管理,开发者可以在不深入事务管理细节的情况下,编写出可靠的...
Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...
本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...
总结来说,集成Spring、JTA、JOTM或Atomikos进行分布式事务处理,是提高系统扩展性和可靠性的重要手段。通过上述步骤,开发者能够在Tomcat应用服务器上实现跨数据库的事务一致性,从而构建更健壮的分布式应用。
本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...
例子虽小,可覆盖面广,设计spring载入.properties文件,spring配置jta和jotm分布式事务,设置数据源连接池,注解事务驱动。功能是在mysql上建立了两个数据库分别为dbone和dbtwo,在dbone里有表tb1,表中只有一个字段...
2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...
在Spring中,Java Transaction API (JTA) 和 JOTM(Java Open Transaction Manager)是实现分布式事务管理的关键组件。 **Spring 框架** Spring 是一个开源的Java平台,它提供了一个全面的编程和配置模型,用于现代...
通过Spring的`AbstractRoutingDataSource`和JTA,我们可以轻松地管理多个数据源,并通过JOTM保证分布式事务的一致性。在实际项目中,这种架构可以帮助我们构建可扩展、高可用的系统。在SpringDemo项目中,你可以找到...
这个项目可能旨在演示如何在Spring MVC环境中配置和管理事务,特别是使用JOTM作为外部事务管理器来处理数据库操作。 **Spring MVC框架**: Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它提供了...
这篇博客文章“使用JOTM实现分布式事务管理(多数据源)”将深入探讨如何利用JOTM来处理复杂的分布式环境中的事务。 首先,理解JTA是至关重要的。JTA是Java平台的标准,定义了API,使得应用开发者可以控制跨数据库、...
JOTM是Java事务API(JTA)的一个开源实现,用于管理跨多个资源(如数据库和消息队列)的分布式事务。在Spring中,JOTM可以作为全局事务管理器,处理跨越不同数据源的事务。当应用程序需要在多个数据库或者服务之间...
JOTM是Java平台上的一个开放源代码事务管理器,它遵循JTA(Java Transaction API)标准,用于处理分布式事务。在Spring中集成JOTM可以提供更高级别的事务控制,确保在多数据源环境下事务的一致性和完整性。 首先,...
本篇文章将探讨如何在Java环境中,利用Spring框架和Atomikos这样的第三方工具实现分布式事务管理,即JTA(Java Transaction API)的实践。 JTA是Java平台提供的一种标准API,用于管理跨越多个资源(如数据库、消息...
在本篇文章中,我们将深入探讨如何利用Spring框架结合JOTM(Java Open Transaction Manager)来实现多数据源下的分布式事务管理。我们将通过具体实例展示如何在Tomcat服务器环境下配置并使用这些技术。 #### 一、...
JOTM(Java Open Transaction Manager)是一个开源的JTA事务管理器,可以在非J2EE环境下提供分布式事务服务。本篇文章将详细讲解如何利用Spring+iBatis+JOTM来实现JTA事务。 首先,我们需要理解JTA的核心概念。JTA...
本DEMO主要展示了如何在Spring框架中结合JOTM来处理分布式事务,特别是涉及多个数据源的情况。 首先,我们需要理解JOTM的基本概念。JOTM作为一个事务协调者,负责管理跨多个资源的事务,确保它们要么全部成功,要么...
JOTM(Java Open Transaction Manager)是一个开源的Java...总的来说,JOTM、XAPool和Spring的组合为Java开发者提供了一个强大而灵活的分布式事务解决方案,能够在复杂的企业级环境中保证数据的一致性和应用的可靠性。