半途进入一个项目,大体情况是这样的:struts1.3.8 + Hibernate3,
Struts Action 直接调用 Hibernate DAO,
由于项目刚开始的时候没有把握好,开发人员把事务的处理放在了DAO层,导致系统出现莫名其妙的问题,
现在的改造是这样的。
1.把DAO中所有事务处理相关的代码去掉,包括关闭hibernate session 的代码。
2.由于Action太多,当初的开发人员也找不回来了,如果在所有的Action中添加事务处理的代码的话,粒度和位置都不好控制。于是做了一个统一处理所有Action中事务的尝试,大体思路如下:
扩展struts 的 RequestProcessor类,重写processActionPerform方法在Action执行前启动事务,执行成功后提交事务,执行中发生异常回滚事务,代码片段如下:
@Override
protected ActionForward processActionPerform(HttpServletRequest request,
HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping)
throws IOException, ServletException {
Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
ActionForward forward = null;
try {
log.info("begin transaction in HibernateSessionRequestProcessor");
log.info("before action execute");
forward = super.processActionPerform(request, response, action, form, mapping);
log.info("after action execute");
tx.commit();
} catch (Exception e) {
tx.rollback();
log.info("exception rollback transaction HibernateSessionRequestProcessor");
request.setAttribute("error", "执行出现错误了");
return mapping.findForward("error");
} finally {
HibernateSessionFactory.closeSession();
log.info("close session in HibernateSessionRequestProcessor");
}
return forward;
}
从现在测试的情况来看,有好使的地方,有不好使的地方。好使的地方是能够较好控制Action中的事务,不好使的地方是:如果Action执行过程中挂起了,事务没有正常提交或回滚,就会锁表。
还有这样做的一个不合理之处就是事务处理的粒度太大,Action 中所有的DAO 操作都控制在一个事务中了。
3. 由于一些JSP中直接调用DAO,按照网上的写法写了个Filter 处理所有的jsp中的事务和hibernate session的关闭。
4. 之前按照网上的OpenSession in view 的办法来处理事务,经常出现锁表的情况,所以琢磨出上述的做法,参考了很多资料,没有发现一个直接的做法。
请高手们给个思路,欢迎拍砖。
分享到:
相关推荐
总结起来,Spring2.5 + Struts1.3.8 + Hibernate3.0的整合涉及到数据源、SessionFactory、事务管理、Struts配置等多个方面的配置和优化。通过以上步骤,可以有效地降低各层之间的耦合度,提高系统的可扩展性和可维护...
Struts2.0.14、Spring2.5.6、Struts1.3.8以及Hibernate3.2是四个非常关键的Java Web开发框架,它们在2000年代末到2010年代初广泛应用于企业级应用中。这个压缩包文件包含了这些框架的核心组件,对于学习和理解SSH...
Struts1.3.8、Spring2.5.6和Hibernate3.3是经典的Java Web开发框架组合,常被称为SSH框架。这个集成项目是基于这三个框架的整合,旨在提供一个可快速开发、易于维护的后端系统基础。下面将详细阐述这三个框架的主要...
本集成方案聚焦于Spring 4.2.5、Hibernate 4.3.11和Struts 1.3.8这三个特定版本的集成,以下将详细阐述它们的核心功能以及如何进行整合。 首先,Spring是Java企业级应用中的核心框架,它提供了依赖注入(DI)和面向...
在Java Web开发中,Spring、Hibernate和Struts是三个非常重要的框架,它们分别负责不同的职责。Spring是一个全面的后端应用程序框架,提供了依赖注入、面向切面编程等功能;Hibernate是一个对象关系映射(ORM)框架...
本集成方案旨在提供一个基于Spring 4.2.5、Hibernate 4.3.11和Struts 1.3.8的完整开发环境,以帮助开发者构建高效、可维护的企业级Java Web应用程序。 首先,Spring框架是一个全面的后端开发框架,它提供了依赖注入...
Struts 1.3.8、Spring 2.5.6 和 Hibernate 3 是三个非常重要的Java企业级开发框架,它们分别在MVC(模型-视图-控制器)、依赖注入和对象关系映射方面提供了强大的支持。这个压缩包中包含了整合这三个框架所需的jar...
Struts1.3.8_Spring2.0_hibernate3.0(jars)是一个整合了三个主流Java企业级开发框架的压缩包,分别是Struts、Spring和Hibernate。这些框架在Java Web开发中扮演着至关重要的角色,它们各自解决了一部分问题,而组合...
《Spring 2.0、Struts 1.3.8、JavaEE 5 API与MySQL 5 开发指南》 本指南将详细讲解基于Spring 2.0、Struts 1.3.8、JavaEE 5 API以及MySQL 5进行Web应用开发的关键技术和实践方法。这四个组件在企业级应用开发中扮演...
Struts_1.3.8_API.CHM文档可能包含了关于Struts 1.3.8版本的所有API接口和类的详细说明,包括Action、Form Bean、Dispatcher Servlet、Tiles等核心组件的使用方法,以及国际化、异常处理和验证机制等内容。...
SSH1(Struts + Spring + Hibernate 1)是早期Java Web开发中常用的一种框架集成,它结合了Struts的MVC架构、Spring的依赖注入和事务管理以及Hibernate的对象关系映射功能,为开发者提供了一个强大的企业级应用开发...
首先,Struts1.3.8是经典的MVC框架,负责处理HTTP请求并分发到相应的业务逻辑。它提供了ActionForm来封装请求参数,通过配置struts-config.xml文件定义视图与动作的映射。Struts2.2.1则是一个更为现代的版本,引入了...
SSHJAR包part02包含了多个Java开发中常用的库文件,这些库主要涉及Spring、Struts和Hibernate等技术,这些都是Java企业级应用开发中的核心框架。下面将详细讲解这些库的功能和它们在Java开发中的作用。 1. **xerces...
在技术实现上,该系统采用了Ajax技术增强用户体验,搭配Struts框架(1.3.8或2.0.12版本)进行业务逻辑处理,JPA(Hibernate3.3ga)用于持久化数据,而Spring2.5则负责依赖注入和事务管理。数据库服务器可以选择MySQL...
其中,Struts 1.3.8是一个较为成熟的MVC框架,适用于基于Java的Web应用开发。而Struts 2 Core 2.0.11.1则引入了更多的特性,如拦截器、自由标记库等,使其更加灵活和强大。 ### Ajax4jsf: JSF Ajax Ajax4jsf是JSF...
Struts-1.3.8.jar在Jlue中扮演着核心的角色,为应用提供控制器层的支持。 **Spring** Spring是一个全面的后端应用程序框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。Spring-2.5.6.jar包含Spring框架...
Spring的Ioc Spring的AOP , AspectJ Spring的事务管理 , 三大框架的整合 目录 1.1 Spring 框架学习路线:..........................................................................................................