你可以把这两个操作写在一个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
分享到:
相关推荐
在这个项目中,开发者可能创建了两个或更多的Service,它们都声明了相同的ACTION,并在启动这些Service时展示了不同策略的应用。 在阅读和分析这个示例项目时,你可以查看以下几个关键点: - Service的...
这是Struts框架中一个常见的错误,错误信息表明无法找到相应的Action mapping。解决方法是检查Struts配置文件中的action mappings,确保action的名称和类名正确。 2. java.lang.NullPointerException 这是Java中最...
本项目中,"自己封装的小框架--JDBC封装 Action层封装 手动事务管理"是一个实用的实践案例,旨在提高开发效率,优化代码结构,并确保数据操作的完整性。下面我们将深入探讨这个框架中的主要组成部分及其相关知识点。...
区分Action、Service和Dao功能 在软件开发中,Action、Service和Dao都是常用的架构模式,但是很多开发者对这些概念的理解和使用却存在一定的混淆。因此,本文将对Action、Service和Dao的功能进行详细的区分和解释。...
在不分层的系统中,我们可以将所有的代码都写到一个地方,比如 Struts 的 Action 类。在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要做数据访问。为了更好地理解和分离 Action、Service 和 Dao 的功能,我们...
Struts2是一个强大的Java Web应用程序框架,用于构建和部署企业级的MVC(Model-View-Controller)架构的Web应用。这个框架简化了开发过程,提供了丰富的特性来处理请求、控制流程、展示视图以及与数据库交互。在本文...
在同一个应用中,如果有两个或更多的Service定义了相同的Intent Action,当启动这些Service时,系统可能会遇到困扰,不知道应该启动哪一个。默认情况下,Android会随机选择一个Service来响应Intent,这可能不是...
结合Ibatis,我们可以创建一个Action类,注入Service,Service再注入Dao,其中Dao使用Ibatis的SqlSession进行数据库操作。Struts2的拦截器可以与Spring的AOP配合,实现如权限控制等功能。在配置文件中,需要配置...
LoadRunner是一款功能强大的性能测试工具,常用于模拟大量并发用户执行特定业务流程,以评估系统在高负载下的表现。在使用LoadRunner进行测试时,可能会遇到各种错误,这些错误通常是由于网络问题、脚本错误、资源...
事务是数据库操作的核心概念,确保数据一致性并能够在异常情况下进行回滚。 C#实现AOP事务的关键在于利用特性(Attribute),这是一种元数据,可以附加到类、方法、属性等程序元素上,为代码提供额外的信息。在C#中...
在这个项目中,虽然没有详细列出Action的代码,但通常我们会为每个业务功能创建一个Action类,比如`CategoryAction`,该类会调用`CategoryService`的方法来执行操作,并设置模型数据以供视图展示。 在Action中,...
此外,Service层还可以处理事务管理,确保数据的一致性。这一层与Action层交互,提供业务服务,与DAO层交互,完成数据操作。 4. **Entity层(领域模型层/实体层)**: Entity层定义了应用中的对象模型,这些对象...
Action通常会有一个或多个方法,每个方法对应一个特定的用户操作。当Action方法执行完毕后,可以通过Result来决定返回哪个结果页面,实现页面的跳转。描述中提到的"action调用service",表明Action会调用由Spring...
事务确保了数据的一致性和完整性,通过ACID(原子性、一致性、隔离性和持久性)属性来保证多操作的正确执行。在SSH框架中,Spring是主要负责事务管理的组件,它提供了编程式和声明式两种事务管理方式。 **声明式...
首先,你需要在MySQL数据库中创建名为TEST的表,包含id和name两个字段,确保表引擎为InnoDB,因为InnoDB支持行级事务和外键约束,适合进行事务处理。 在项目配置中,你需要设置Spring的上下文配置,包括bean的定义...
今天反馈过来一个BUG,说一个页面的功能用不了。打开控制台发现报错:object is not a function。 感觉很奇怪,这块的功能最新没动过怎么会突然出问题了呢?上线时主流浏览器都测试过了呀。 虽然奇怪,但是还的解决...
而TCC分布式事务组件则是Hyperf对分布式事务处理的一个重要补充,使得开发者能够在微服务环境中处理复杂的业务逻辑,保证数据的一致性。 TCC模式的核心思想是将一个全局事务拆分为多个本地事务,每个本地事务对应一...
StrutsSpringTestCase是一个用于集成测试Struts和Spring框架的测试工具,它允许开发者在不启动整个应用程序服务器的情况下,对这两个框架的集成应用进行单元测试和功能测试。在使用这个测试框架时,可能会遇到一些...
通过设置特定的事务边界和传播属性,确保多个数据库操作要么全部成功,要么全部回滚,保证了数据的一致性。 总结来说,这个“带事务的ssh框架源代码”着重展示了SSH框架如何在不同版本的Spring中处理事务,特别是...
这里包括两个 eclipse 工程, 在一个工程FirstAndroid里调用另一个工程SecondAndroid里的Activity 和 Service,SecondAndroid只能通过别的app 来启动,它自己不能启动,因为它没有 android.intent.action.MAIN这个...