`

spring+hibernate+JTA 分布式事务的例子 .

 
阅读更多
对于横跨多个Hibernate SessionFacotry的分布式事务,只需简单地将 JtaTransactionManager 同多个 LocalSessionFactoryBean 的定义结合起来作为事务策略。你的每一个DAO通过bean属性得到各自的 SessionFactory 引用。如果所有的底层JDBC数据源都是支持事务的容器,那么只要业务对象使用了 JtaTransactionManager 作为事务策略,它就可以横跨多个DAO和多个session factories来划分事务,而不需要做任何特殊处理。

<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>

 <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>
分享到:
评论

相关推荐

    第二部分spring+hibernate+jta 分布式事务Demo

    Spring、Hibernate和JTA(Java Transaction API)是Java开发者在构建分布式事务解决方案时常用的三大技术。本示例“第二部分spring+hibernate+jta 分布式事务Demo”将帮助我们理解如何在这三个框架之间协同工作,...

    Jboss4.2.2+Spring2.5.6+hibernate+JTA事务的实现

    "Jboss4.2.2+Spring2.5.6+Hibernate+JTA事务的实现"就是一个典型的例子,它涉及到四个关键的技术栈,即JBoss Application Server 4.2.2、Spring 2.5.6、Hibernate ORM以及Java Transaction API(JTA)。这些技术的...

    基于mysql,SpringBoot 分布式事务例子

    总结来说,学习SpringBoot的分布式事务处理需要理解分布式事务的基本概念、Spring的事务管理机制以及如何在MySQL环境中配置和使用。"spring-boot-example"项目提供了一个实战平台,让你能亲手实践这些理论知识,加深...

    struts hibernate spring 搞定分布式事务

    StrutsHibernateBySQLImplTest.java :为单元测试类 自动生成表:具体数据库 sqlserver2000 ,oracle 服务层代码如下: public class HibernateServerImpl implements HibernateServerInterface { ...测试通过的例子:

    spring-hibernate-jotm 例子

    标题“spring-hibernate-jotm 例子”涉及的是一个整合Spring框架、Hibernate持久化框架以及JOTM(Java Open Transaction Manager)事务管理器的示例项目。这个项目旨在展示如何在Java应用程序中有效地管理和协调...

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

    JTA是Java平台上的标准,用于管理分布式事务,它允许"同时连接两个或以上的数据库"。 JTA提供了统一的API,使得开发者可以在不同的事务资源(如数据库、消息队列等)之间进行协调。在Java环境中,Spring框架是实现...

    hibernate框架jar包整合

    - `jta.jar`(Java Transaction API):如果项目需要支持分布式事务,需要添加此包。 4. **配置文件** Hibernate的配置文件`hibernate.cfg.xml`定义了数据库连接信息、实体扫描路径、缓存策略等。例如: ```xml ...

    hibernate基础配置

    - jta.jar(如果需要进行分布式事务处理) - mysql-connector-java.jar(或其他数据库驱动,取决于你使用的数据库) **2. 配置文件:** Hibernate的核心配置文件是`hibernate.cfg.xml`,在这个文件中,你需要定义...

    spring 的事务管理手册

    Spring的事务管理不仅限于JDBC,还支持Hibernate、JDO、OJB等持久层技术,并且能够处理涉及多个资源的分布式事务。对于只需要单一持久化资源的应用,可以直接使用该资源自身的事务支持;对于需要跨资源的事务,...

    SessionFactory.getCurrentSession与openSession的区别

    使用getCurrentSession()的优点在于,由于其与线程绑定,可以更好地支持分布式事务和多线程环境,同时减少了资源开销。而openSession()适用于简单应用或者在需要独立Session的场景,比如在服务层的每个方法中创建一...

    Spring JPA学习

    - **JTA**: Java事务API,提供了更高级别的分布式事务支持。 **2.2 注解** - `@Entity`: 标记类为实体。 - `@Table`: 指定表名。 - `@Id`: 主键标识。 - `@GeneratedValue`: 主键生成策略。 - `@Column`: 映射字段...

    J2EE应用开发详解(罗玉玲版)光盘内容(源代码)

    5. **JTA(Java Transaction API)**:JTA提供了分布式事务处理的能力,确保在多组件间的操作一致性。源码中可能会有涉及数据库操作和事务管理的例子,帮助读者理解和使用事务。 6. **JNDI**:JNDI用于查找和绑定...

    java web开发详解

    JTA(Java Transaction API)则用于管理分布式事务,确保数据的一致性。 6. **数据库连接与JDBC**: JDBC(Java Database Connectivity)是Java访问数据库的标准接口,通过它,Java程序可以连接到各种数据库系统,...

    J2EE开发全程实录

    4. **JTA(Java Transaction API)**:用于管理事务的API,确保应用在分布式环境下的数据一致性。书中会解释事务的ACID属性,并展示如何配置和使用JTA进行事务管理。 5. **JMS(Java Message Service)**:JMS提供...

    《J2EE案例开发》源代码

    此外,书中可能还会涉及JNDI(Java Naming and Directory Interface)服务,用于查找和绑定资源,以及JTA(Java Transaction API)用于管理事务,这些都是企业级应用中必不可少的部分。对于分布式应用,可能会有RMI...

    java web开发实战1200例

    JNDI用于查找和绑定网络资源,而JTA则用于管理分布式事务。 接着,我们会深入学习MVC(Model-View-Controller)设计模式,这是构建Web应用的常用架构。Spring框架是一个广泛应用的MVC框架,它提供了依赖注入、AOP...

    轻量级Java EE企业应用实战第4版第8章02源代码

    JTA允许在分布式环境中进行事务控制。源代码可能包含如何开启、提交和回滚事务的示例。 8. **EJB(Enterprise JavaBeans)**:虽然轻量级应用通常避免使用重量级的EJB,但可能仍会介绍基本的无状态会话bean...

    JBPM5入门学习.doc

    - **4.3.4 使用jotm配置tomcat数据源以支持JTA**: 通过Jotm配置Tomcat的数据源,以支持分布式事务。 - **4.3.5 Jbpm相关配置文件更新**: 更新JBPM相关的配置文件,如persistence.xml、jbpm.cfg.xml等。 - **4.3.6 ...

    Expert_One-on-One_J2EE_Development_without_EJB中文版 part10

    1. **交易管理**:讨论了JTA(Java Transaction API)和如何在没有EJB的情况下实现事务的ACID特性,确保数据一致性。 2. **安全性**:讲解了J2EE的安全模型,包括认证、授权、加密和会话管理,帮助开发者保护应用免...

    java web服务

    Spring框架中的Spring MVC是实现这一模式的典型例子,它提供了控制器、模型和视图的组件,使得开发更加模块化和易于维护。 7. **Web服务标准**: Java Web服务还涉及到了各种Web服务标准,如SOAP(Simple Object ...

Global site tag (gtag.js) - Google Analytics