本人也是新手。。为了实现双数据库事务全局事务添加回滚。。但是只用了一次。所以没用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 如果是的话
就在把状态改回去。。
其实整套思路。。。其实也比较不人性话。。。。但是也实现双数据的回滚。。。有更好的意见可以指点指点。。
分享到:
相关推荐
在IT行业中,`ZK`(ZooKeeper)、`Spring`和`Hibernate`都是非常重要的技术组件,分别在分布式协调、应用框架和对象关系映射领域有着广泛应用。本项目是将这三个技术进行整合,用于构建一个基于MySQL数据库的完整...
综上所述,"webservice + spring + hibernate"的组合使用,旨在构建一个灵活、健壮的分布式系统,其中Web服务提供远程调用能力,Spring提供整体架构支持,而Hibernate则作为数据访问层,确保了数据操作的便捷和高效...
Hibernate允许开发者使用面向对象的模型与数据库进行交互,从而减少了手动编写SQL的需求。在多数据源场景下,Hibernate可以配置为连接不同的数据库,使得应用可以根据业务需求灵活切换数据源。 **多数据源** 是指在...
- 数据库事务处理:通过Hibernate的Session接口,可以方便地进行事务控制,确保数据的一致性。 在"classes"目录下,你可以找到项目编译后的类文件,这些文件包含了实际运行的代码。通过阅读和理解这些源码,你可以...
这个DEMO展示了如何在Java Web环境中进行持久层操作,以及如何利用Spring的事务管理能力实现分布式事务的控制。这种整合方式在实际开发中具有很高的实用价值,因为它既保持了代码的清晰性,又提供了强大的事务处理...
例如,使用Struts2作为前端框架处理用户的请求和显示,使用Spring进行依赖注入和服务层的管理,而Hibernate则负责数据的持久化。这样的组合可以充分发挥各框架的优势,构建出高效、稳定的应用系统。 综上所述,...
Hibernate Transaction提供了与JTA(Java Transaction API)和JDBC事务管理的集成,支持分布式事务处理。开发者可以使用@Transactional注解在方法级别声明事务边界,使事务管理变得简单易行。此外,Hibernate还提供...
在构建Web应用程序时,"Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】"是一个常见的技术栈,它涵盖了多个关键组件,为高效、灵活的开发提供了坚实的基础。以下是这个技术组合中...
本文将详细讲解如何在这样的MVC架构中进行事务配置,结合"struts+hibernate+spring事务配置_花粉册.htm"和相关文件,我们将深入探讨事务管理的重要性以及具体配置步骤。 首先,理解事务是非常关键的。在数据库操作...
它通过对象关系映射(ORM)技术将Java对象与数据库表进行映射,使开发者能以面向对象的方式处理数据库事务,而无需过多关注SQL语法。在Spring框架中,Hibernate可以作为数据访问层,提供对数据库的CRUD(创建、读取...
4. **事务管理**:集成JTA(Java Transaction API),支持分布式事务处理。 **Spring** Spring是一个全面的后端开发框架,核心特性包括依赖注入(DI)和面向切面编程(AOP)。Spring在Java Web开发中的作用主要包括...
对于多个数据库的事务管理,Spring主要依赖于JTA(Java Transaction API)和XAResource接口来实现分布式事务。然而,JTA的XA事务通常在J2EE环境下工作,需要容器支持,比如JBoss、WebLogic等。在J2SE环境中,Spring...
这个项目旨在展示如何在Java应用程序中有效地管理和协调数据库事务,特别是对于分布式事务处理。 Spring是一个广泛使用的轻量级应用框架,它提供了一个全面的基础架构,支持面向切面编程(AOP)和依赖注入(DI),...
2. **源代码**:项目可能包含Java源代码,比如DAO(数据访问对象)层,它们使用Hibernate进行数据库交互,并可能使用了Spring的事务管理。 3. **配置文件**:如`hibernate.cfg.xml`和`spring-context.xml`,分别配置...
6. 其他依赖库:如 `slf4j-api` 和 `logback-classic`,用于日志记录,以及可能的 `jta`(Java Transaction API),用于处理分布式事务。 整合 Spring 和 Hibernate 需要进行以下关键步骤: 1. **配置 Spring**:...
Spring的Hibernate支持模块(Spring Hibernate Support)使得整合两者变得非常简单,它提供了SessionFactory的管理,事务的协调,以及在服务层自动关闭Session的功能,减少了手动管理数据库连接的麻烦。Spring的DAO...
由于压缩包中已删除了`lib`文件夹中的jar,你需要手动添加这些依赖到你的项目类路径中,包括Tuscany的SCA实现、Spring的核心库和Hibernate的JAR文件。 2. **创建SCA组件**:定义SCA组件,这些组件可以是Spring Bean...
这是一个基于Java技术栈,具体包括SpringMVC、MyBatis、Spring、Maven以及MySQL数据库构建的微信小程序商城系统的源码。这个项目适用于学习、研究或作为毕业设计,旨在提供一个完整的电商解决方案。 首先,...
它简化了数据库访问,将Java对象与数据库表进行映射,从而减少了手动编写SQL语句的工作量。在本系统中,Hibernate3的DAO层通过HQL(Hibernate Query Language)或SQL来执行数据查询和更新操作。 Quartz是Java的作业...