对于横跨多个Hibernate SessionFacotry的分布式事务,只需简单地将 JtaTransactionManager 同多个 LocalSessionFactoryBean 的定义结合起来作为事务策略。你的每一个DAO通过bean属性得到各自的 SessionFactory 引用。如果所有的底层JDBC数据源都是支持事务的容器,那么只要业务对象使用了 JtaTransactionManager 作为事务策略,它就可以横跨多个DAO和多个session factories来划分事务,而不需要做任何特殊处理。
spring1.x例子如下:
<beans>
<bean id="myDataSource1" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myds1"/>
</bean>
<bean id="myDataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myds2"/>
</bean>
<bean id="mySessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource1"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
</value>
</property>
</bean>
<bean id="mySessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource2"/>
<property name="mappingResources">
<list>
<value>inventory.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.OracleDialect
</value>
</property>
</bean>
<bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
<bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory1"/>
</bean>
<bean id="myInventoryDao" class="product.InventoryDaoImpl">
<property name="sessionFactory" ref="mySessionFactory2"/>
</bean>
<!-- this shows the Spring 1.x style of declarative transaction configuration -->
<!-- it is totally supported, 100% legal in Spring 2.x, but see also above for the sleeker, Spring 2.0 style -->
<bean id="myProductService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="myTxManager"/>
<property name="target">
<bean class="product.ProductServiceImpl">
<property name="productDao" ref="myProductDao"/>
<property name="inventoryDao" ref="myInventoryDao"/>
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="increasePrice*">PROPAGATION_REQUIRED</prop>
<prop key="someOtherBusinessMethod">PROPAGATION_REQUIRES_NEW</prop>
<prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean>
</beans>
spring2.x例子如下:
<bean id="myDataSource1" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myds1"/>
</bean>
<bean id="myDataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myds2"/>
</bean>
<bean id="mySessionFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource1"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
</value>
</property>
</bean>
<bean id="mySessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource2"/>
<property name="mappingResources">
<list>
<value>inventory.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.OracleDialect
</value>
</property>
</bean>
<bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
<bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory1"/>
</bean>
<bean id="myInventoryDao" class="product.InventoryDaoImpl">
<property name="sessionFactory" ref="mySessionFactory2"/>
</bean>
<bean id="myProductService" class="product.service.myProductServiceImpl">
<property name="productDao" ref="myProductDao"/>
<property name="inventoryDao" ref="myInventoryDao"/>
</bean>
<aop:config>
<aop:pointcut id="managerTx"
expression="execution(* product.service..*Service.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="managerTx" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="myTxManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
分享到:
相关推荐
在IT行业中,分布式事务处理是复杂系统设计的关键环节,特别是在大型企业级应用中。...同时,这个例子也能帮助开发者了解在实际项目中如何配置和使用这些组件,提升对分布式事务处理的理解和实践能力。
在IT行业中,分布式事务是大型系统中不可或缺的一部分,特别是在微服务架构中,多个服务之间可能存在事务性的交互。本文将深入探讨基于MySQL和SpringBoot的分布式事务处理,以及如何通过示例进行学习。 首先,让...
StrutsHibernateBySQLImplTest.java :为单元测试类 自动生成表:具体数据库 sqlserver2000 ,oracle 服务层代码如下: public class HibernateServerImpl implements HibernateServerInterface { ...测试通过的例子:
标题“spring-hibernate-jotm 例子”涉及的是一个整合Spring框架、Hibernate持久化框架以及JOTM(Java Open Transaction Manager)事务管理器的示例项目。这个项目旨在展示如何在Java应用程序中有效地管理和协调...
4. 分布式事务:如果涉及多个数据库或服务,可能需要使用分布式事务解决方案,如X/Open XA或两阶段提交协议。 本实例通过Spring、Hibernate和MySQL的整合,展示了如何在实际应用中实现事务处理,保证了数据的一致性...
总之,`Hibernate连接Mycat例子详解.zip`提供的资源是一个很好的学习材料,它涵盖了从Mycat的配置、数据分片,到Hibernate的配置、实体操作等一系列步骤,帮助开发者理解如何在Java应用中集成这两种技术,实现高效的...
在"Spring+hibernate+ZK例子"中,可能包含了一个整合这三个技术的应用示例。Spring作为核心框架管理整个应用的生命周期,通过AOP和DI来协调各个组件。Hibernate则被用来处理数据库交互,简化数据存取操作。而ZK可能...
在IT行业中,分布式服务框架Dubbo与持久层框架Hibernate是两个非常重要的技术组件。本示例结合了两者,提供了一个完整的分层架构,用于展示如何在实际开发中使用它们。Dubbo作为一个高性能、轻量级的RPC(远程过程...
"Jboss4.2.2+Spring2.5.6+Hibernate+JTA事务的实现"就是一个典型的例子,它涉及到四个关键的技术栈,即JBoss Application Server 4.2.2、Spring 2.5.6、Hibernate ORM以及Java Transaction API(JTA)。这些技术的...
5. **事务管理**:Spring的声明式事务管理可以确保在多步骤操作中的数据一致性,即使在分布式环境中也能保持事务的ACID属性。 6. **单元测试与集成测试**:由于Spring的可测试性,项目可能包含了对各个层的单元测试...
- `jta.jar`(Java Transaction API):如果项目需要支持分布式事务,需要添加此包。 4. **配置文件** Hibernate的配置文件`hibernate.cfg.xml`定义了数据库连接信息、实体扫描路径、缓存策略等。例如: ```xml ...
5. **强大的事务管理**:Hibernate内置了完善的事务管理机制,支持本地事务和分布式事务,简化了事务处理的复杂度。 #### 三、Hibernate入门 - **概念理解**:首先需要理解Hibernate的基本概念,包括Session、...
- **Transaction**:事务管理是确保数据一致性的关键,Hibernate提供了对事务的自动管理机制。 - **HQL**:HQL是一种面向对象的查询语言,它允许以面向对象的方式构建查询语句,而无需直接编写SQL语句。 #### 5. ...
11. 分布式应用支持:理解Hibernate在分布式环境中的使用,如集群和分布式缓存。 12. JPA集成:如果项目中同时使用Java Persistence API(JPA),学习如何将Hibernate作为JPA的提供者,以及两者之间的差异和兼容性...
- **事务管理**: 支持本地事务和 JTA(Java Transaction API)分布式事务。 - **缓存机制**: 包括一级缓存和二级缓存,可以显著提高应用程序性能。 - **懒加载与急加载**: 支持延迟加载关联对象,减少不必要的数据库...
Hibernate支持多种事务管理方式,包括本地事务和分布式事务。事务管理是持久化操作的基础,确保了数据的一致性和完整性。通过`Transaction` API,开发人员可以在代码中显式地控制事务的开始、提交和回滚。 ##### ...
1. **数据持久化层**:Hibernate被广泛应用在J2EE应用的数据持久化层,用于处理复杂的查询逻辑和事务管理。 2. **对象关系映射**:对于那些具有复杂关系的数据结构,Hibernate可以很好地处理一对一、一对多和多对多...
`HibernateDemo1.zip`可能包含了一些使用Hibernate进行数据库操作的示例代码,如CRUD(创建、读取、更新、删除)操作,事务管理,以及HQL(Hibernate查询语言)的使用。 **Ehcache** 是一个高性能的、内存级别的...