由于项目的需要,初步学习了分布式事务的相关知识,了解了可以和tomcat集成的几款分布式软件,在此基础之上,将事务处理和项目集成到了一起。
应用层采用了spring的声明式事务处理方式,经过测试知道sping本身支持单数据源的跨表事务。
集成了jotm后,对跨数据源的事务进行统一管理。经过测试,可以通过配置文件的方式将jotm和spring较好的集成在一起。
项目使用的框架:struts2+spring2.5
数据库:mysql5
第三方事务软件:jotm2.2.1
下面是配置文件,仅供参考。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="dsDefault" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager" ref="jotm"/>
<property name="driverName" value="org.logicalcobwebs.proxool.ProxoolDriver" />
<property name="url" value="proxool.guopei" />
</bean>
<bean id="dsTestLocal" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager" ref="jotm"/>
<property name="driverName" value="org.logicalcobwebs.proxool.ProxoolDriver" />
<property name="url" value="proxool.test" />
</bean>
<bean id="dsTestVm" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
<property name="transactionManager" ref="jotm"/>
<property name="driverName" value="org.logicalcobwebs.proxool.ProxoolDriver" />
<property name="url" value="proxool.vm" />
</bean>
<!--JOTM本地实例-->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/>
<!--JTA事务管理器-->
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm"/><!--指定userTransaction属性引用JOTM本地实例-->
</bean>
<!--XAPool配置,内部包含了一XA数据源,对应了数据库jtatesta支持JTA事务的数据源,必须封装成XAPool-->
<bean id="jtaDs" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource">
<ref local="dsDefault" />
</property>
</bean>
<!--类似地,对应了数据库jtatestb的XAPool配置,内部包含了一XA数据源-->
<bean id="jtaTest" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource">
<ref local="dsTestLocal" />
</property>
</bean>
<bean id="jtaVm" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
<property name="dataSource">
<ref local="dsTestVm" />
</property>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="txManager" />
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED, -Throwable</prop>
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
</props>
</property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="singleDsService" class="com.test.service.SingleDsService">
</bean>
<bean id="dsMultiService" class="com.test.service.DsMultiService">
<property name="dsLocalGuopeiDao" ref="dsLocalGuopeiDao"/>
<property name="dsLocalTestDao" ref="dsLocalTestDao"/>
<property name="dsVmTestDao" ref="dsVmTestDao"/>
</bean>
<bean id="dsLocalGuopeiDao" class="com.test.dao.DsLocalGuopeiDao">
<property name="dataSource" ref="jtaDs" />
</bean>
<bean id="dsLocalTestDao" class="com.test.dao.DsLocalTestDao">
<property name="dataSource" ref="jtaTest" />
</bean>
<bean id="dsVmTestDao" class="com.test.dao.DsVmTestDao">
<property name="dataSource" ref="jtaVm" />
</bean>
</beans>
分享到:
相关推荐
5. **性能优化**:JOTM设计时考虑了性能,提供了一种轻量级的事务处理机制,适合高性能的应用场景。 在实际应用中,开发者会将JOTM集成到Java EE服务器或Spring框架中,利用JOTM的事务管理能力来保证业务逻辑的正确...
标题中的"ow2-jotm-src-2.2.1-src.tar"是一个开源项目JOTM(Java Open Transaction Manager)的源代码压缩包,版本号为...通过深入理解其源代码和使用方法,开发者可以更好地控制和优化他们的应用程序的事务处理能力。
这个项目旨在展示如何在Java应用程序中有效地管理和协调数据库事务,特别是对于分布式事务处理。 Spring是一个广泛使用的轻量级应用框架,它提供了一个全面的基础架构,支持面向切面编程(AOP)和依赖注入(DI),...
总的来说,这个项目展示了如何利用Spring的事务管理能力,结合JOTM作为事务协调器,以及iBATIS作为数据访问层,实现基于MySQL的JTA分布式事务处理。这不仅有助于理解分布式事务的原理,也为实际开发提供了可参考的...
Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...
4. jts1_0.jar:JTS(Java Transaction Service)1.0版本的实现,它是JTA的扩展,提供更强大的分布式事务支持。 5. xapool.jar:这通常是一个连接池库,例如XAPool,用于高效管理数据库连接。 6. jotm-1.4.3.jar:...
JOTM 是一个开源的JTA事务管理器,实现了X/Open XA规范,允许跨多个资源进行分布式事务处理。它与各种数据库和JMS提供者兼容,为Java应用提供了强大的事务管理能力。JOTM可以在Spring框架中无缝集成,通过Spring的...
总结来说,集成Spring、JTA、JOTM或Atomikos进行分布式事务处理,是提高系统扩展性和可靠性的重要手段。通过上述步骤,开发者能够在Tomcat应用服务器上实现跨数据库的事务一致性,从而构建更健壮的分布式应用。
JTA是Java平台的标准事务API,它允许应用程序进行跨多个数据源(如数据库或消息队列)的全局事务处理。通过JTA,开发者可以编写不关心具体事务管理细节的代码,这样就提高了代码的可移植性和可维护性。 JOTM则是JTA...
JTA提供了一种标准接口,使得应用程序可以透明地处理分布式事务。在Spring中集成JOTM,可以利用其功能来管理跨数据库的事务。 JOTM相关的jar包包括`jotm-core.jar`,`xapool.jar`,`ow2-connector-1.5-spec.jar`和`...
"分布式事务处理"则强调了在多个节点或服务间处理事务的复杂性,这是Jtom所解决的问题。 文件列表中的"jotm.pdf"可能包含了Jtom的详细文档,涵盖了安装指南、使用示例、API参考等内容,对于开发者来说是宝贵的资源...
JOTM是Java世界里一个开源的事务管理器,遵循JTA(Java Transaction API)规范,提供了分布式事务处理的能力。在多数据源环境中,JOTM可以帮助我们处理复杂的事务边界,保证在不同的数据库或服务之间的一致性,即使...
它支持两阶段提交(2PC)协议,这是分布式事务处理中的标准模式。 2. **JTA兼容**:遵循Java EE的JTA标准,使得JOTM可以无缝集成到任何符合J2EE规范的应用服务器中,如Tomcat、Jetty等轻量级容器。 3. **高性能与...
Java开源事务管理器JOTM(Java Open Transaction Manager)是一个强大的、完全符合X/Open XA规范的事务管理器,它提供了分布式事务处理的能力。在Java应用程序中,事务管理是确保数据一致性、完整性和原子性的重要...
分布式事务处理模型X/Open DTP定义了一套标准,包括了AP(Application)和RM(Resource Manager),以及TM(Transaction Manager)。AP是应用层,RM是数据库或其他资源管理者,TM负责协调整个事务的执行。其中,XA...
本文将详细介绍JOTM的核心功能、如何使用MVN进行编译以及其在分布式事务处理中的应用。 一、JOTM核心功能 1. 分布式事务管理:JOTM遵循JTA(Java Transaction API)标准,能够管理跨多个数据库、消息队列和其他...
JOTM是一个完全遵循Java Transaction API (JTA) 1.1规范的开放源代码事务管理器,它为分布式环境提供了高级的事务处理能力。 首先,让我们深入理解什么是Java Transaction API (JTA)。JTA是Java平台标准版(Java EE...
JOTM作为事务管理器,可能在后端服务器上支持Flex应用的事务处理。 压缩包内的两个文件: 1. `ow2-jotm-dist-2.1.4-bin`:这是JOTM的二进制发行版,包含预编译的库和可执行文件,用户可以直接在服务器上部署,无需...