`
qq5345339
  • 浏览: 11656 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

spring+hibernate 手动进行双数据库分布式事务控制

阅读更多

本人也是新手。。为了实现双数据库事务全局事务添加回滚。。但是只用了一次。所以没用aomikos 第三方分布式事务

  所以拿出来跟大家分享一下 。。。。。。请各位高手提提意见。。。。指点指点

 

 

主要的就是实现A数据库对B 数据库 数据复制。如果复制成功  B 的状态开下

如果在改状态的时候出错B  把A的数据库回滚 。主要是实现这种功能

 

配置的话。。就像以前配置ssh集成一个。以前就用一个sessionFacory 现在咋们配两个其他都相同 。只要还是在代码那控制。

 

 

 Session session1=null;
 Session session2=null;
 Transaction tx1=null;
 Transaction tx2=null;

try

{

   //开启第一个session工厂

    session1=stockDao.getHibernateTemplate().getSessionFactory().openSession();

   //打开第一个事务

   session1.beginTransaction();

 

 

  //开启第二个session工厂

   session2=taskDao.getHibernateTemplate().getSessionFactory().openSession();

  //打开第二个事务
    tx2=session2.beginTransaction();

  

    ........//这里就是做一些业务的操作保存

 

    //最后保存第一个事务

   session1.persist(test1);   //用persist 是不马上保存到数据库去。

 

  //test2.setStatus("10");  //页面操作改变状态

 

  //修改test2 (注意必须要用 merge ) 

   session2.merge(test2);

 

  //先提交第一个数据  

  tx2.commit();

  //在提交第二个数据
  tx1.commit();

 

 

  //这里有个判断  说明第一个保存成功就i=1

if(taskBase.getId()!=null)
   {
    i=1;
   }
   i=1;

 

}

//如果有一个出错

catch(Exception e)

{

   e.printStackTrace();

   //如果状态被修改为10
    if(test2.getStatus().equals("10"))
    {

  //那么就从新获得事务。。因为在出错的时候就已经自动的关闭事务了 。所以要在开启。
     session2=stockDao.getHibernateTemplate().getSessionFactory().openSession();

// 开启事务
     tx2=session2.beginTransaction();
     tx2.begin();

//把状态给改回去
     stock.setStatus("9");

//然后再修改
     session2.merge(stock);

//提交
     tx2.commit();

//关闭session工厂
     stockDao.getHibernateTemplate().getSessionFactory().close();
     i=-1;
    }

//事务回滚
    tx1.rollback();
    tx2.rollback();

 

}

 

 

整体思路详解 :

     首先先说

      第一:tx2.commit  说明当B状态改为10的时候报错的话 。。他就不保存A 的数据 因为设置session1为persist

      第二:B 状态 修改成功了之后  说明数据库已经改了。。但是A 数据出错

      当在抛异常的时候说明

        判断if(test2.getStatus().equals("10"))  是否为10 如果是的话

        就在把状态改回去。。

 

其实整套思路。。。其实也比较不人性话。。。。但是也实现双数据的回滚。。。有更好的意见可以指点指点。。

 

0
1
分享到:
评论

相关推荐

    zk+spring+hibernate整合

    在IT行业中,`ZK`(ZooKeeper)、`Spring`和`Hibernate`都是非常重要的技术组件,分别在分布式协调、应用框架和对象关系映射领域有着广泛应用。本项目是将这三个技术进行整合,用于构建一个基于MySQL数据库的完整...

    webservice + spring + hibernate

    综上所述,"webservice + spring + hibernate"的组合使用,旨在构建一个灵活、健壮的分布式系统,其中Web服务提供远程调用能力,Spring提供整体架构支持,而Hibernate则作为数据访问层,确保了数据操作的便捷和高效...

    spring3+springmvc+jpa+hibernate多数据源

    Hibernate允许开发者使用面向对象的模型与数据库进行交互,从而减少了手动编写SQL的需求。在多数据源场景下,Hibernate可以配置为连接不同的数据库,使得应用可以根据业务需求灵活切换数据源。 **多数据源** 是指在...

    XmlRpc+Spring+Hibernate系统(源码)

    - 数据库事务处理:通过Hibernate的Session接口,可以方便地进行事务控制,确保数据的一致性。 在"classes"目录下,你可以找到项目编译后的类文件,这些文件包含了实际运行的代码。通过阅读和理解这些源码,你可以...

    spring+hibernate+jta demo

    这个DEMO展示了如何在Java Web环境中进行持久层操作,以及如何利用Spring的事务管理能力实现分布式事务的控制。这种整合方式在实际开发中具有很高的实用价值,因为它既保持了代码的清晰性,又提供了强大的事务处理...

    Struts+spring+hibernate面试资料

    例如,使用Struts2作为前端框架处理用户的请求和显示,使用Spring进行依赖注入和服务层的管理,而Hibernate则负责数据的持久化。这样的组合可以充分发挥各框架的优势,构建出高效、稳定的应用系统。 综上所述,...

    软件依赖包(Spring AOP+Hibernate Transaction)

    Hibernate Transaction提供了与JTA(Java Transaction API)和JDBC事务管理的集成,支持分布式事务处理。开发者可以使用@Transactional注解在方法级别声明事务边界,使事务管理变得简单易行。此外,Hibernate还提供...

    Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】

    在构建Web应用程序时,"Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】"是一个常见的技术栈,它涵盖了多个关键组件,为高效、灵活的开发提供了坚实的基础。以下是这个技术组合中...

    struts+hibernate+spring事务配置_花粉册.rar

    本文将详细讲解如何在这样的MVC架构中进行事务配置,结合"struts+hibernate+spring事务配置_花粉册.htm"和相关文件,我们将深入探讨事务管理的重要性以及具体配置步骤。 首先,理解事务是非常关键的。在数据库操作...

    zk+hibernate+spring零配置

    它通过对象关系映射(ORM)技术将Java对象与数据库表进行映射,使开发者能以面向对象的方式处理数据库事务,而无需过多关注SQL语法。在Spring框架中,Hibernate可以作为数据访问层,提供对数据库的CRUD(创建、读取...

    论坛系统(Struts 2+Hibernate+Spring实现)源码

    4. **事务管理**:集成JTA(Java Transaction API),支持分布式事务处理。 **Spring** Spring是一个全面的后端开发框架,核心特性包括依赖注入(DI)和面向切面编程(AOP)。Spring在Java Web开发中的作用主要包括...

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

    对于多个数据库的事务管理,Spring主要依赖于JTA(Java Transaction API)和XAResource接口来实现分布式事务。然而,JTA的XA事务通常在J2EE环境下工作,需要容器支持,比如JBoss、WebLogic等。在J2SE环境中,Spring...

    spring-hibernate-jotm 例子

    这个项目旨在展示如何在Java应用程序中有效地管理和协调数据库事务,特别是对于分布式事务处理。 Spring是一个广泛使用的轻量级应用框架,它提供了一个全面的基础架构,支持面向切面编程(AOP)和依赖注入(DI),...

    hibernate4+spring4+memcached 工程

    2. **源代码**:项目可能包含Java源代码,比如DAO(数据访问对象)层,它们使用Hibernate进行数据库交互,并可能使用了Spring的事务管理。 3. **配置文件**:如`hibernate.cfg.xml`和`spring-context.xml`,分别配置...

    spring4与hibernate4.2整合全部jar包

    6. 其他依赖库:如 `slf4j-api` 和 `logback-classic`,用于日志记录,以及可能的 `jta`(Java Transaction API),用于处理分布式事务。 整合 Spring 和 Hibernate 需要进行以下关键步骤: 1. **配置 Spring**:...

    J2EE大家好.rar_J2EE_hibernate_spring_spring hibernate

    Spring的Hibernate支持模块(Spring Hibernate Support)使得整合两者变得非常简单,它提供了SessionFactory的管理,事务的协调,以及在服务层自动关闭Session的功能,减少了手动管理数据库连接的麻烦。Spring的DAO...

    Tuscany SCA与Spring、Hibernate整合实例-简洁方法

    由于压缩包中已删除了`lib`文件夹中的jar,你需要手动添加这些依赖到你的项目类路径中,包括Tuscany的SCA实现、Spring的核心库和Hibernate的JAR文件。 2. **创建SCA组件**:定义SCA组件,这些组件可以是Spring Bean...

    基于springmvc+mybatis+spring+maven+mysql的微信小程序商城系统源码.zip

    这是一个基于Java技术栈,具体包括SpringMVC、MyBatis、Spring、Maven以及MySQL数据库构建的微信小程序商城系统的源码。这个项目适用于学习、研究或作为毕业设计,旨在提供一个完整的电商解决方案。 首先,...

    基于struts2 spring2.5 hibernate3的人事管理系统 源码完整包

    它简化了数据库访问,将Java对象与数据库表进行映射,从而减少了手动编写SQL语句的工作量。在本系统中,Hibernate3的DAO层通过HQL(Hibernate Query Language)或SQL来执行数据查询和更新操作。 Quartz是Java的作业...

Global site tag (gtag.js) - Google Analytics