Spring3+后不再对JTOM提供支持,所以可以改用Atomikos管理多数据源事务。
Spring2.5+Hibernate3+JTOM参考:http://hanqunfeng.iteye.com/blog/1554251
Atomikos官网网站:http://www.atomikos.com/
一.pom.xml
<dependency> <groupId>com.atomikos</groupId> <artifactId>transactions-jdbc</artifactId> <version>3.9.3</version> </dependency>
二.applicationContext-atomikos.xml
<bean class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" id="dataSource01"> <!-- Set unique name for this DataSource --> <property name="uniqueResourceName"><value>oracle</value></property> <!-- Set XADatasource class name --> <property name="xaDataSourceClassName" value="oracle.jdbc.xa.client.OracleXADataSource" /> <property name="xaProperties"> <props> <prop key="user">${jdbc.username01}</prop> <prop key="password">${jdbc.password01}</prop> <prop key="URL">${jdbc.url01}</prop> </props> </property> <!-- set properties for datasource connection pool --> <property name="poolSize" value="3" /> <!-- timeout after 20000 seconds --> <property name="reapTimeout"><value>20000</value></property> </bean> <bean id="sessionFactory01" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource01" /> <property name="packagesToScan"> <list> <value>com.cpframework.function.**.model.oracle</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle10gDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.current_session_context_class">jta</prop> <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop> </props> </property> </bean> <!-- oracleDAO --> <bean id="hibernateDAO01" class="org.cpframework.dao.hibernate4.CP_Hibernate4DAOImpl"> <property name="sessionFactory" ref="sessionFactory01"></property> </bean> <bean class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close" id="dataSource02"> <!-- Set unique name for this DataSource --> <property name="uniqueResourceName"><value>mysql</value></property> <!-- Set XADatasource class name --> <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" /> <property name="xaProperties"> <props> <prop key="user">${jdbc.username02}</prop> <prop key="password">${jdbc.password02}</prop> <prop key="URL">${jdbc.url02}</prop> </props> </property> <!-- set properties for datasource connection pool --> <property name="poolSize" value="3" /> <property name="reapTimeout"><value>20000</value></property> </bean> <bean id="sessionFactory02" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource02" /> <property name="packagesToScan"> <list> <value>com.cpframework.function.**.model.mysql</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.current_session_context_class">jta</prop> <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop> </props> </property> </bean> <!-- mysqlDAO --> <bean id="hibernateDAO02" class="org.cpframework.dao.hibernate4.CP_Hibernate4DAOImpl"> <property name="sessionFactory" ref="sessionFactory02"></property> </bean> <!-- atomikos事务管理器 --> <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close"> <description>UserTransactionManager</description> <property name="forceShutdown"> <value>true</value> </property> </bean> <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp"> <property name="transactionTimeout" value="300" /> </bean> <!-- spring 事务管理器 --> <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager" ref="atomikosTransactionManager"/> <property name="userTransaction" ref="atomikosUserTransaction" /> <property name="allowCustomIsolationLevels" value="true"/> </bean> <aop:config proxy-target-class="true"> <aop:pointcut id="servicePoint" expression="execution (* com.cpframework.function.*.service.*.*Service*.*(..))" /> <aop:advisor pointcut-ref="servicePoint" id="txAdvisor" advice-ref="defaultTxAdvice" /> </aop:config> <tx:advice id="defaultTxAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" read-only="true" /> <tx:method name="get*" read-only="true" /> <tx:method name="query*" read-only="true" /> <tx:method name="load*" read-only="true" /> <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="modify*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="apply*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="handle*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="do*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> </tx:attributes> </tx:advice>
三.transactions.properties
将transactions.properties文件放到编译根路径下,可根据需要开启相关注解,参见附件。
四.CP_Hibernate4DAOImpl
需要注意两点:
1.session必须使用sessionFactory.openSession()的方式获得,不能使用sessionFactory.getCurrentSession()。
2.更新操作必须调用session.flush()方法。
例如:
public void update(Object entity) { Session session = sessionFactory.openSession(); session.update(entity); session.flush(); }
参考:
相关推荐
本教程将聚焦于如何利用Spring 3.0、Hibernate ORM框架以及Atomikos这个开源事务管理器来实现高效、可靠的多数据源分布式事务处理。 **Spring 3.0**: Spring是Java开发中最广泛使用的轻量级框架之一,它提供了一个...
Spring、Hibernate和Atomikos的组合就是一种强大的解决方案,它们可以协同工作以支持多数据源的分布式事务处理。接下来,我们将深入探讨这些技术以及如何配置它们来实现多数据源。 1. **Spring**: Spring是一个...
本项目使用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate和MySQL来实现分布式事务处理和多数据源管理,以确保在多个数据库操作之间保持事务的ACID特性。 首先,Spring Boot作为微服务开发的主流...
为了实现多数据源的分布式事务,我们需要对Spring Boot进行配置,定义两个数据源并指定Atomikos作为事务管理器。每个数据源都需要相应的数据库连接信息,并且需要启用Atomikos的全局事务支持。在业务逻辑代码中,...
- **配置文件**:`applicationContext.xml`是Spring的配置文件,其中会配置数据源、Hibernate SessionFactory、事务管理器等。这里可能会使用`PlatformTransactionManager`接口的实现,如`JtaTransactionManager`,...
7. **配置与集成**:将这些组件整合在一起需要详细的配置,包括Spring的事务管理配置、Hibernate的数据源配置以及Atomikos的设置,确保它们能够协同工作。 8. **测试与调试**:"dstest"可能是用于测试这个集成环境...
3. 在Spring配置文件中配置数据源和JMS资源,声明为Atomikos的事务管理器所管理。 4. 使用`@Transactional`注解或者在XML配置中定义事务行为,声明哪些方法应该在一个事务内执行。 在实际应用中,Atomikos能够处理...
`Atomikos` 是一个开源的JTA实现,它提供了对分布式事务的支持,可以与Spring集成,处理多数据源的事务管理。 在Spring中配置Druid和Hibernate结合Atomikos进行分布式事务管理的步骤如下: 1. **引入依赖**:在...
5. 对于MyBatis和Hibernate,需要配置它们使用Atomikos提供的JTA支持,以确保在同一个事务中操作多个数据源。 通过上述配置,SpringBoot应用就能在Atomikos的帮助下,对多数据库进行分布式事务的统一管理。在处理...
5. **多数据源配置**:在Spring Boot项目中,可以通过配置多个数据源来支持分布式事务。每个数据源对应一个数据库连接池,并使用特定的数据源事务管理器。 6. **开源工具和库**:如Atomikos、Bitronix等事务管理器...
Atomikos,是一个基于Java的开源事务管理器,提供了事务管理和连接池,不需要应用服务器支持,支持JDBC和JMS事务,能提供对Spring,Hibernate的集成,有兴趣多了解的可以直接参考说明文当,有详细的介绍和使用说明。
Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...
在使用Atomikos Transactions Hibernate3.jar时,开发者需要在Hibernate配置中指定Atomikos作为事务管理器,并配置相应的属性,例如事务超时时间、数据源等。这通常在`hibernate.cfg.xml`文件中完成。一旦配置完毕,...
当应用涉及到分布式系统时,Spring支持JTA(Java Transaction API)来处理跨多个数据源的事务,例如使用`JtaTransactionManager`。此外,Spring还提供了`Atomikos`和`Bitronix`这样的第三方事务管理器来实现全局...
4. JPA和Hibernate的配置,包括实体定义、数据源配置、事务策略等。 5. 示例应用,展示了如何在一个事务中同时操作多个数据源,体现JTA的分布式事务能力。 通过研究这个项目,开发者可以学习如何在Spring环境中有效...
1. **Java Transaction API (JTA)**:JTA是Java平台的标准接口,用于管理和协调跨越多个数据源的事务。通过JTA,开发者可以编写无需关心底层事务管理逻辑的应用,从而简化代码并提高可移植性。Atomikos 3.7.0实现了...
10. **分布式事务**:在分布式系统中,Spring也提供了对JTA(Java Transaction API)的支持,允许跨多个数据源管理事务,例如使用Atomikos或Bitronix等JTA实现。 通过上述配置和理解,开发者可以轻松地在Spring应用...
在Hibernate中,JTA事务应用总结通常会讲解如何配置Hibernate以使用JTA,以及在多数据源环境下如何处理事务。 跨库事务处理,如在spring+hibernate+struts2+jta的项目中,需要考虑的细节更多,包括异常处理、回滚...