`

一个action操作两个service,其中一个报错,如何保证事务的一致性?

    博客分类:
  • java
 
阅读更多
你可以把这两个操作写在一个Service中,一般一个Action方法中除了使用get/load以外,应该只操作一个Service, 否则就是两个事务了.
要不你也可以自己写一个反射的Action类,每次调用Action自动打开一个和数据库的会话,里面怎么操作不管,当Action返回之后再commit,就可以保证事务的一致性了.
比如我用的是Struts + Hibernate,在Action中的execute中写:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
 ActionForward forward = null;
 String methodStr = mapping.getParameter(); // 根据parameter名字的不同, 调用不同的方法
 Class[] types = new Class[] { ActionMapping.class, ActionForm.class, HttpServletRequest.class, HttpServletResponse.class, Session.class};
 Session session = null; // 声明会话
 try {
  session = HibernateSessionFactory.getSession();
  session.beginTransaction();
  Object[] params = new Object[] { mapping, form, request, response, session }; // 向Action方法中传递和数据库的会话, 这个会话可以保证事务的完整性
  Method method = this.getClass().getMethod(methodStr, types);
  if (method != null) {
   forward = (ActionForward) method.invoke(this, params);
   session.getTransaction().commit(); // 执行成功, 则提交
  }
 } catch (Exception e) {
  e.printStackTrace();
  session.getTransaction().rollback(); // 出现错误就全部回滚
 }
 return forward;
}
这样Action只要继承这个类, 就可以在自己的方法中获得到一个Session, 用这个session怎么操作数据库, 都可以保证事务的完整性了.

来自:http://zhidao.baidu.com/link?url=xjBH6_YjJxfPu8t2M0OHo21jDY5P0HyFVNYjDT95C3_zY47baZcGHqcv6gwDevX1GZ5Y3p9LZdPNT050Nq3QWa
分享到:
评论

相关推荐

    Android 多个service的action 相同冲突 验证demo

    在这个项目中,开发者可能创建了两个或更多的Service,它们都声明了相同的ACTION,并在启动这些Service时展示了不同策略的应用。 在阅读和分析这个示例项目时,你可以查看以下几个关键点: - Service的...

    WEB开发报错处理集锦

    这是Struts框架中一个常见的错误,错误信息表明无法找到相应的Action mapping。解决方法是检查Struts配置文件中的action mappings,确保action的名称和类名正确。 2. java.lang.NullPointerException 这是Java中最...

    自己封装的小框架--JDBC封装 Action层封装 手动事务管理

    本项目中,"自己封装的小框架--JDBC封装 Action层封装 手动事务管理"是一个实用的实践案例,旨在提高开发效率,优化代码结构,并确保数据操作的完整性。下面我们将深入探讨这个框架中的主要组成部分及其相关知识点。...

    怎样区分Action, Service 和 Dao功能.

    区分Action、Service和Dao功能 在软件开发中,Action、Service和Dao都是常用的架构模式,但是很多开发者对这些概念的理解和使用却存在一定的混淆。因此,本文将对Action、Service和Dao的功能进行详细的区分和解释。...

    Action,Service和Dao功能

    在不分层的系统中,我们可以将所有的代码都写到一个地方,比如 Struts 的 Action 类。在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要做数据访问。为了更好地理解和分离 Action、Service 和 Dao 的功能,我们...

    Struts2 框架搭建(基本)和几个报错问题

    Struts2是一个强大的Java Web应用程序框架,用于构建和部署企业级的MVC(Model-View-Controller)架构的Web应用。这个框架简化了开发过程,提供了丰富的特性来处理请求、控制流程、展示视图以及与数据库交互。在本文...

    Android 多个service的action冲突验证demo

    在同一个应用中,如果有两个或更多的Service定义了相同的Intent Action,当启动这些Service时,系统可能会遇到困扰,不知道应该启动哪一个。默认情况下,Android会随机选择一个Service来响应Intent,这可能不是...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    结合Ibatis,我们可以创建一个Action类,注入Service,Service再注入Dao,其中Dao使用Ibatis的SqlSession进行数据库操作。Struts2的拦截器可以与Spring的AOP配合,实现如权限控制等功能。在配置文件中,需要配置...

    loadrunner常用报错整理

    LoadRunner是一款功能强大的性能测试工具,常用于模拟大量并发用户执行特定业务流程,以评估系统在高负载下的表现。在使用LoadRunner进行测试时,可能会遇到各种错误,这些错误通常是由于网络问题、脚本错误、资源...

    C#自己实现AOP的事务操作

    事务是数据库操作的核心概念,确保数据一致性并能够在异常情况下进行回滚。 C#实现AOP事务的关键在于利用特性(Attribute),这是一种元数据,可以附加到类、方法、属性等程序元素上,为代码提供额外的信息。在C#中...

    SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    在这个项目中,虽然没有详细列出Action的代码,但通常我们会为每个业务功能创建一个Action类,比如`CategoryAction`,该类会调用`CategoryService`的方法来执行操作,并设置模型数据以供视图展示。 在Action中,...

    action层,dao层 ,service层,entity层1

    此外,Service层还可以处理事务管理,确保数据的一致性。这一层与Action层交互,提供业务服务,与DAO层交互,完成数据操作。 4. **Entity层(领域模型层/实体层)**: Entity层定义了应用中的对象模型,这些对象...

    在一个ssh框架的项目当中,页面、action、service、model、dao1

    Action通常会有一个或多个方法,每个方法对应一个特定的用户操作。当Action方法执行完毕后,可以通过Result来决定返回哪个结果页面,实现页面的跳转。描述中提到的"action调用service",表明Action会调用由Spring...

    在SSH框架中加入事务支持

    事务确保了数据的一致性和完整性,通过ACID(原子性、一致性、隔离性和持久性)属性来保证多操作的正确执行。在SSH框架中,Spring是主要负责事务管理的组件,它提供了编程式和声明式两种事务管理方式。 **声明式...

    spring3 struts2 Mybatis3 组件注解 事务注解 实例

    首先,你需要在MySQL数据库中创建名为TEST的表,包含id和name两个字段,确保表引擎为InnoDB,因为InnoDB支持行级事务和外键约束,适合进行事务处理。 在项目配置中,你需要设置Spring的上下文配置,包括bean的定义...

    控制台报错object is not a function的解决方法

    今天反馈过来一个BUG,说一个页面的功能用不了。打开控制台发现报错:object is not a function。 感觉很奇怪,这块的功能最新没动过怎么会突然出问题了呢?上线时主流浏览器都测试过了呀。 虽然奇怪,但是还的解决...

    基于Hyperf框架的TCC分布式事务组件.zip

    而TCC分布式事务组件则是Hyperf对分布式事务处理的一个重要补充,使得开发者能够在微服务环境中处理复杂的业务逻辑,保证数据的一致性。 TCC模式的核心思想是将一个全局事务拆分为多个本地事务,每个本地事务对应一...

    使用StrutsSpringTestCase测试框架报错

    StrutsSpringTestCase是一个用于集成测试Struts和Spring框架的测试工具,它允许开发者在不启动整个应用程序服务器的情况下,对这两个框架的集成应用进行单元测试和功能测试。在使用这个测试框架时,可能会遇到一些...

    带事务的ssh框架源代码

    通过设置特定的事务边界和传播属性,确保多个数据库操作要么全部成功,要么全部回滚,保证了数据的一致性。 总结来说,这个“带事务的ssh框架源代码”着重展示了SSH框架如何在不同版本的Spring中处理事务,特别是...

    Android 工程展示一个Activity 调用另一个app里的 Activity 和 Service

    这里包括两个 eclipse 工程, 在一个工程FirstAndroid里调用另一个工程SecondAndroid里的Activity 和 Service,SecondAndroid只能通过别的app 来启动,它自己不能启动,因为它没有 android.intent.action.MAIN这个...

Global site tag (gtag.js) - Google Analytics