准备工作
hibernate3
spring2
jotm2.1.9
2个oracle数据源
目标:在同一个service方法内,分别操作2个数据源的数据,任何一个发生错误,全部回滚
1、spring配置
1.1、jta《jotm》配置,所需jar包【spring.jar】
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" /> <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction" ref="jotm" /> </bean> <!-- 声明式事物,service方法必须声明@Transactional 才能使用jta的事物管理,否则就会独立开来,必须jar包【cglib.jar】--> <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true" />
1.2、dataSource配置,所需jar包【xapool.jar, jotm-core.jar, carol.jar, carol-interceptor.jar】
<bean id="dataSourceA" 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="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@192.168.3.122:1521:LXHORCL" /> </bean> </property> <property name="user" value="ADS" /> <property name="password" value="ADS" /> </bean> <bean id="dataSourceB" 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="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@192.168.7.13:1521:LWORCL" /> </bean> </property> <property name="user" value="ADS" /> <property name="password" value="ADS" /> </bean>
1.3、hibernate sessionFactory配置
<bean id="sessionFactoryA" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSourceA" /> </property> <property name="mappingResources"> <list> <value>META-INF/hbm-A.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.OracleDialect </prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.cglib.use_reflection_optimizer"> true </prop> <prop key="hibernate.cache.provider_class"> org.hibernate.cache.HashtableCacheProvider </prop> <prop key="hibernate.jdbc.bach_size">10</prop> <prop key="hibernate.jdbc.use_query_cache">true</prop> </props> </property> </bean> <bean id="sessionFactoryB" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSourceB" /> </property> <property name="mappingResources"> <list> <value>META-INF/hbm-B.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.OracleDialect </prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.cglib.use_reflection_optimizer"> true </prop> <prop key="hibernate.cache.provider_class"> org.hibernate.cache.HashtableCacheProvider </prop> <prop key="hibernate.jdbc.bach_size">10</prop> <prop key="hibernate.jdbc.use_query_cache">true</prop> </props> </property> </bean>
好了,到这里基本上完成了基本的配置
1.5、具体的功能
<!-- BASE --> <bean id="baseDaoA" class="com.hmf.alex.simple.dao.BaseDao"> <property name="sessionFactory"> <ref local="sessionFactoryA" /> </property> </bean> <bean id="baseDaoB" class="com.hmf.alex.simple.dao.BaseDao"> <property name="sessionFactory"> <ref local="sessionFactoryB" /> </property> </bean> <!-- FUNCTION --> <bean id="userDaoA" parent="baseDaoA" lazy-init="true"> <property name="clazz"> <value>com.hmf.alex.simple.entities.User</value> </property> </bean> <bean id="userDaoB" parent="baseDaoB" lazy-init="true"> <property name="clazz"> <value>com.hmf.alex.simple.entities.User</value> </property> </bean> <bean id="userService" class="com.hmf.alex.simple.service.UserService" lazy-init="true"> <property name="daoA"> <ref bean="userDaoA" /> </property> <property name="daoB"> <ref bean="userDaoB" /> </property> </bean>
2、测试
public class UserService { private IDao daoA; private IDao daoB; ..... @Transactional public void createAB(Object a ,Object b){ this.create(a, "A"); this.create(b, "B"); } public Serializable create(Object o ,String type){ if("B".equals(type)){ return daoB.create(o); } return daoA.create(o); } }
推荐阅读
代码之余轻松一下:当前热门-人民的名义
JAVAEE容器如何管理EntityManager和PersistenceContext
相关推荐
struts + spring + hibernate + velocity + ajax + jotm + acegi
1)Demo 学习要点简介: ...(特别注意:Spring3.0里不在提供对jotm的封装,spring-tx里没有JotmFactoryBean.class,我在jar里添加了类) 2)Demo 导入说明: 1.Eclipse Encoding:GBK 2.内附Oracle建表等可执行语句
在本文中,我们将深入探讨如何使用Spring、Hibernate和JOTM进行分布式事务管理,以实现在一个Service方法中同时操作两个不同数据源的数据,并确保任何错误都能导致所有操作回滚。首先,我们需要了解这些技术的基本...
在集成Spring+iBatis+JOTM的环境中,Spring主要负责事务策略的配置和管理,iBatis则作为持久层框架,负责SQL的执行,而JOTM作为事务管理器,确保跨数据库的事务一致性。 1. **环境搭建** - 首先,确保安装了JDK ...
"Java分布式开发spring+jta+jotm"的主题涵盖了Spring框架在分布式系统中的应用,特别是如何利用JTA和JOTM来处理跨资源的分布式事务。理解和掌握这些技术对于构建可扩展、健壮的Java应用至关重要。通过深入学习和实践...
这个整合项目中的文档,如"Spring2.5+Hibernate3.2+Struts2.0+jotm2.0集成配置.doc"、"spring 2.0 + hibernate3.2 + struts 2.0 开放配置.pdf"和"Spring2.5.3+Hibernate3.2+Struts2.0.11整合.pdf"应该详细介绍了这些...
标题“spring-hibernate-jotm 例子”涉及的是一个整合Spring框架、Hibernate持久化框架以及JOTM(Java Open Transaction Manager)事务管理器的示例项目。这个项目旨在展示如何在Java应用程序中有效地管理和协调...
本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...
本篇文章将聚焦于如何结合Spring和JOTM(Java Open Transaction Manager)来实现多数据源的事务管理,特别是针对使用Hibernate的情况。 JOTM是Java平台上的一个开放源代码事务管理器,它遵循JTA(Java Transaction ...
Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...
本项目“spring+jotm+ibatis+mysql实现JTA分布式事务”旨在利用这些技术来确保在分布式环境中的数据一致性。下面将详细介绍这个项目所涉及的知识点。 首先,Spring框架是Java开发中最常用的应用框架之一,它提供了...
标题 "hibernate+tomcat5.5+JOTM 2.10 JTA配置" 涉及的是在Java环境下使用Hibernate ORM框架与Tomcat 5.5应用服务器,以及集成JOTM(Java Open Transaction Manager)进行JTA(Java Transaction API)管理的配置过程...
### Spring + JOTM 多数据源事务管理详解(三):JNDI + Tomcat 在本篇文章中,我们将深入探讨如何利用Spring框架结合JOTM(Java Open Transaction Manager)来实现多数据源下的分布式事务管理。我们将通过具体实例...
标题中的“spring 3.0.5 + jotm 实现的的spring mvc 的例子”表明这是一个关于使用Spring 3.0.5版本与JOTM(Java Open Transaction Manager)结合构建Spring MVC应用的示例项目。这个项目可能旨在演示如何在Spring ...
本DEMO主要展示了如何在Spring框架中结合JOTM来处理分布式事务,特别是涉及多个数据源的情况。 首先,我们需要理解JOTM的基本概念。JOTM作为一个事务协调者,负责管理跨多个资源的事务,确保它们要么全部成功,要么...