`

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

    Android 多个service的action 相同冲突 验证demo,对应博客地址是http://blog.csdn.net/czlove110/article/details/50791390

    Action,Service和Dao功能

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

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

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

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

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

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

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

    Struts2从一个带参数action跳转到另一个action

    资源中示例了一个struts2的配置文件中配置的action的result结果为另外一个action的配置,该跳转的过程中是带所有参赛调整的,在另外一个action中可以接受到当前action的所有参数,此配置文件是我日常开发中的经验...

    一个Action多方法调用的Struts 2的应用程序

    利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...

    配置文件的配置信息报错

    假如我们在写action属性名的时候忘写name属性了或着当我们写配置文件的是时候,配置文件容易报错,呈现灰色,也没有任何的提示。这是因为我们没有为eclipse设置自动提示功能。现在我们以strut2配置文件为例。

    Mirillis Action是一个非常有用的工具,可以捕捉和录制Windows桌面的高清视频

    解压密码:123 ||Mirillis Action是一个非常有用的工具,可以捕捉和录制Windows桌面的高清视频。 在这个程序的帮助下,用户可以监控屏幕上各种各样的质量视频教程。 这个应用程序能够在任何环境,包括游戏环境,视频...

    uni-swipe-action组件实现列表项左划操作

    应用uni-swipe-action组件实现列表项左划操作。 真正做到开箱即用。

    spring_day01_all.zip_Action!_ioc mechanism_service调用dao

    Spring框架提供了一个容器,该容器可以管理应用程序的组件,还提供了IoC和AoP机制,实现组件之间解耦,提高程序结构的灵活性,增强系统的可维护和可扩展性。 在SSH整合开发中,利用Spring管理Service、DAO等组件,...

    java比较两个mysql数据库中的表信息差异

    一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表,表中列,索引,函数过程差异比对结果。...

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

    1。实现了action层的调度 2。实现了JDBC的封装 3。实现了简单的事务管理

    Loadrunner报错日志

    这个问题一般是客户端链接到服务失败,原因有两个客户端连接限制(也就是压力负载机器),一个网络延迟严重,解决办法: 1、修改负载机器注册表中的TcpTimedWaitDelay减小延时和MaxUserPort增加端口数。注:这将增加...

    struts2一个action处理多个请求 struts2实例

    struts2一个action处理多个请求

    一个Jsp两个ActionForm分别提交.rar

    一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar一个Jsp两个ActionForm分别提交.rar

    Idea2023.1版本SaveAction插件

    原始SaveAction插件在idea更新到2023.1版本后会报错无法使用,所以有人修复了,源码放在https://github.com/fishermans/intellij-plugin-save-actions,在根目录调用脚本gradlew.bat build后构建,会在根目录下build...

    Web服务器端在Action、dao、service之外实现spring注入

    我们在开发过程中经常会发生spring注入错误或失败的情况,其实Web服务器端在Action、dao、service包之内是很容易实现的,在这些包之外实现spring注入就不容易了,总是出错,其实根本原因是无法获得相应的spring上...

    c#中SqlTransaction——事务详解

    事务将多个操作紧密联系到一起,这样就能保证有联系的两种操作的一致性、以及数据的完整性。举个简单例子:公司的员工信息管理系统,现在要录入数据,员工信息系统假设只有部门、员工信息两张表,其中员工信息表中有...

Global site tag (gtag.js) - Google Analytics