`
ytfei
  • 浏览: 89426 次
社区版块
存档分类
最新评论

在Spring中使用JOTM 实现JTA事务管理(支持多个数据库事务)

    博客分类:
  • Java
阅读更多

参考: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 

 

 

分享到:
评论

相关推荐

    Spring+iBatis+JOTM实现JTA事务

    在Java开发中,事务管理是确保数据一致性与完整性...然而,需要注意的是,JTA事务管理相对于本地事务会有一定的性能开销,因此在不需要分布式事务的情况下,可以选择使用Spring的本地事务管理,以提高系统的运行效率。

    spring + JTA + JOTM实现分布式事务

    分布式事务是现代企业级应用中不可或缺的一部分,尤其是在大数据和微服务架构中,它确保了在多个数据库或资源管理系统中的数据一致性。本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java ...

    spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

    Spring框架提供了对JTA(Java Transaction API)的支持,允许开发者处理跨多个数据存储的事务一致性。本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为...

    spring+jotm+ibatis+mysql实现JTA分布式事务

    MySQL是广泛使用的开源关系型数据库管理系统,它支持事务处理,是分布式事务中的关键组件。在这个项目中,MySQL作为数据存储,与JOTM和Spring配合,共同确保分布式事务的正确执行。 项目文件“AjtaAbatisTest”可能...

    在Spring中使用JTA事务管理

    本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM(Java Open Transaction Manager)以及引用Tomcat的JTA事务。 ### 1. 通过集成JOTM,直接在Spring中使用JTA事务 #### 1.1. 添加JOTM类库到类路径...

    多数据源 更新 spring jta java jotm

    通过Spring的`AbstractRoutingDataSource`和JTA,我们可以轻松地管理多个数据源,并通过JOTM保证分布式事务的一致性。在实际项目中,这种架构可以帮助我们构建可扩展、高可用的系统。在SpringDemo项目中,你可以找到...

    使用JOTM实现分布式事务管理(多数据源)

    在IT行业中,分布式事务管理是解决跨多个数据源一致性问题的关键技术。JOTM(Java Open Transaction Manager)是一个开源的事务管理器,它遵循JTA(Java Transaction API)标准,为Java应用程序提供全面的事务服务。...

    spring+jotm 多数据源事务管理(二)hibernate

    在Spring框架中,多数据源事务管理是一项关键任务,特别是在大型企业级应用中,往往需要同时操作多个数据库。本篇文章将聚焦于如何结合Spring和JOTM(Java Open Transaction Manager)来实现多数据源的事务管理,...

    Java分布式开发spring+jta+jotm

    JOTM 是一个开源的JTA事务管理器,实现了X/Open XA规范,允许跨多个资源进行分布式事务处理。它与各种数据库和JMS提供者兼容,为Java应用提供了强大的事务管理能力。JOTM可以在Spring框架中无缝集成,通过Spring的...

    Spring+JOTM 分布式事务管理

    JOTM支持XAResource,使得它可以与其他数据库系统、消息队列等资源适配器协同工作,实现跨多个资源的分布式事务。 **3. 集成Spring与JOTM:** 要将JOTM集成到Spring中,首先需要在项目中引入JOTM的依赖。通常,这...

    spring 3.0.5 + jotm 实现的的spring mvc 的例子

    这个项目可能旨在演示如何在Spring MVC环境中配置和管理事务,特别是使用JOTM作为外部事务管理器来处理数据库操作。 **Spring MVC框架**: Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它提供了...

    Spring+Jotm+Hibernate+Oracle+Junit 实现JTA分布式事务要求Demo工程

    2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...

    spring对多个数据库进行事务管理.doc

    Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...

    Spring分布式事务实现

    首先,分布式事务是指在多个数据库或者服务之间协调数据操作的事务。在Spring中,我们可以通过编程式或声明式的方式来管理事务。声明式事务管理更受青睐,因为它更加便捷且易于维护,通常通过在XML配置文件或注解中...

    跨多个数据库操作,同时连接多个的数据库,同时操作

    7. **JDBC与JTA事务**:JDBC提供了一种在JTA环境中注册和管理事务的方法,通过`Connection#setAutoCommit(false)`禁用自动提交,并使用`UserTransaction`接口来开始、提交和回滚事务。 8. **Hibernate中的JTA支持**...

    spring-hibernate-jotm 例子

    当应用程序需要在多个数据库或者服务之间进行事务操作时,JOTM能够确保所有操作要么全部成功,要么全部失败,实现ACID(原子性、一致性、隔离性和持久性)属性。 在压缩包中的“spring-transaction”可能包含了...

    跨多个数据库操作,同时连接两个一上的数据库,用事物关联起来

    在Spring中使用JTA事务管理的文档通常会涵盖以下内容:配置JTA的DataSource、定义事务管理器、设置事务属性,以及在Service层中声明事务边界。"同时处理两个数据库"的场景下,Spring可以通过编程式或者声明式的方式...

Global site tag (gtag.js) - Google Analytics