`
ta8210
  • 浏览: 14819 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Spring + Hibernater 整合时 一个Hibernater 查询无限等待的问题.

阅读更多

最近在给一个公司做一个项目, 项目技术选择采用 struts+spring+hibernater 框架技术

问题是这样的,在前台显示记录时使用分页技术, 具体分页实现细节这里不必介绍. 在分页代码中需要一个值这个值是返回要分页结果的记录总条数.
首先排除使用 dao.getList().size()方法,使用这种办法还不如不使用分页技术.这里不详细谈为什么不使用.
程序运行一切正常, 如果多次调用分页需要的这个方法 在某一时刻(databse maxconnection + 1) 用户所有数据库查询全部死掉,而且不报任何异常,IE进度条一直显示等待服务器响应, 如果在程序中加断点,程序在运行到hibernater向数据库查询的语句上时立即死掉(现象有点像线程被挂起).....

这段查询记录总数的代码如下:

publicintgetMaxResult(Stringhql){
Objectobj
=getSession().createQuery("selectcount(*)"+hql).uniqueResult();
returnInteger.parseInt(obj.toString());
}

这个方法所在的类是继承自HibernateDaoSupport类的

问题就出在Object obj=getSession().createQuery("select count(*) " + hql).uniqueResult();这句话上,

在调用getSession()之后 必须要 手动调用session.close()
否则数据库那边显示始终有一条连接线程存在而且状态处于sleeping状态,当调用getMaxResult方法多次时候 由于session没有关闭造成的 数据库连接被站用。测试数据库服务器SQLServer2000


出现问题前的SQLServer



出现问题时IE浏览器状态拦

图上已经标住要注意的几个变化地方

2007-12-14 16:47:36 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setOffset]之前!
2007-12-14 16:47:36 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setOffset]之后!
2007-12-14 16:47:36 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setLength]之前!
2007-12-14 16:47:36 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setLength]之后!
2007-12-14 16:47:36 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setPage]之前!
2007-12-14 16:47:36 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setPage]之后!
2007-12-14 16:47:36 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[getListByHQL]之前!

上面信息是方法经过AOP装配之后的日志记录. 很明显在2007-12-14 16:47:36 之后getListByHQL方法根本没有返回而是死掉了

下面是正确执行的日志记录

信息: 调用方法[setLength]之后!
2007-12-14 16:47:34 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setPage]之前!
2007-12-14 16:47:34 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[setPage]之后!
2007-12-14 16:47:34 org.oasystem.safety.util.PublicLog putMessage
信息: 调用方法[getListByHQL]之前!
2007-12-14 16:47:34 org.hibernate.util.JDBCExceptionReporter logWarnings
警告: SQL Warning: 0, SQLState:
2007-12-14 16:47:34 org.hibernate.util.JDBCExceptionReporter logWarnings
警告: [Microsoft][SQLServer 2000 Driver for JDBC]Database changed to OASystem
2007-12-14 16:47:34 org.hibernate.util.JDBCExceptionReporter logWarnings

解决办法是代码像下面这样写,然后在把getMaxResult做成同步方法。 同步方法是为了避免多个用户同时调用getMaxResult()时方法中还没来得及关闭session而再次引发这个死掉的现象。。。

不过这个现象网上还有因为包问题也可能存在。。。

publicintgetMaxResult(Stringhql){
Sessionsession
=getSession();
Objectobj
=session.createQuery("selectcount(*)"+hql).uniqueResult();
session.close();
returnInteger.parseInt(obj.toString());
}

这是正确的代码

希望碰到这类问题的朋友以后也少走弯路

分享到:
评论

相关推荐

    struts2+spring +hibernater 整合

    Spring是一个全面的后端框架,它提供依赖注入(DI)和面向切面编程(AOP)等功能,管理应用程序的组件和生命周期。在SSH整合中,Spring主要负责控制反转,管理Struts2 Action和Hibernate SessionFactory的实例,实现...

    spring+hibernater+struts权限管理

    标题"spring+hibernater+struts权限管理"表明我们将探讨如何在这三个框架的基础上实现权限控制功能。权限管理是任何应用程序中必不可少的一部分,确保只有授权用户可以访问特定资源或执行操作。 首先,Spring提供了...

    spring+springmvc+hibernater框架架包

    Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。依赖注入帮助开发者解耦组件,使得代码更易于测试和维护。而AOP则允许在不修改原有代码的情况下,添加新的功能或进行日志...

    springMVC+Hibernater整合及测试(亲测可运行)所需jar包

    Spring MVC 提供了一个模型-视图-控制器的架构模式,使得开发者可以方便地处理HTTP请求和响应,而Hibernate 则是ORM(对象关系映射)工具,它简化了数据库操作,使得开发者可以通过Java对象来操作数据库。...

    struts2+Hibernater+spring整合之插入数据

    Spring框架则是一个全面的后端解决方案,包含IoC(控制反转)和AOP(面向切面编程)等核心特性,提供了事务管理、数据源管理、依赖注入等功能,帮助构建松耦合的系统。 在整合这三个框架时,首先需要配置Spring的上...

    Struts2.5+ Spring5 + Hibernater5.2整合后项目(包含jar包和配置文件)

    Spring是一个全面的Java企业级应用开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心功能。Spring5在原有的基础上加强了对Java 8的支持,改进了WebFlux响应式编程模型,以及提升了Spring Data和Spring ...

    springmvc spring hibernate整合Demo

    这个"springmvc spring hibernate整合Demo"旨在帮助初学者理解如何将这三个框架协同工作,实现一个完整的CRUD(创建、读取、更新、删除)应用。 Spring MVC 是 Spring 框架的一部分,专门用于构建Web应用程序。它...

    spring2.54+struts2+hibernater3.1

    标题 "spring2.54+struts2+hibernater3.1" 指的是一个集成开发环境,其中包含了三个关键的Java企业级框架:Spring 2.5.4、Struts 2和Hibernate 3.1。这些框架在Web应用开发中扮演着重要角色,特别是对于大型的企业级...

    springdm整合hibernater

    在本文中,我们将深入探讨如何在OSGi环境中整合Spring-DM和Hibernate,以实现一个动态的、可扩展的持久化解决方案。Spring-DM(现在被称为Spring OSGi)是Spring框架在OSGi容器中的扩展,它允许我们充分利用OSGi的...

    基于Struts2.18+Spring2.5+Hibernater3.3+Annotation注解开发的电子商务网站demo

    这个“基于Struts2.18+Spring2.5+Hibernate3.3+Annotation注解开发的电子商务网站demo”是一个很好的学习资源,可以帮助开发者加深对这些框架的理解并熟悉实际应用。 1. **Struts2.18**:Struts2是MVC(模型-视图-...

    springMVC+Hibernater整合及测试(亲测可运行)

    在网上找了好久,大部分都有一些小问题,这个代码是自己亲自调试,测试可运行。springMVC3,hibernate4,进行整合并采用junit进行测试,jar包齐全,文件上传,json转换的jar包多有。亲测可用,没有问题,代码简单。

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用所需jar包

    Spring是一个全面的企业级应用框架,其核心特性包括依赖注入(DI)和面向切面编程(AOP)。Spring提供了IoC容器,管理对象的生命周期和依赖关系,使得代码更易于测试和维护。同时,Spring的AOP模块允许在不修改源...

    Struts2+Json+Hibernater

    Hibernate则是一个强大的ORM(对象关系映射)框架,用于简化数据库操作。它允许开发者使用Java对象而不是SQL语句来操作数据库,减少了数据库层的复杂性。Hibernate提供了丰富的API,包括实体管理、会话管理、查询...

    JAVA+Sping+Hibernater+Html5+mysql(资讯门户网站)源码

    【标题】"JAVA+Spring+Hibernate+HTML5+MySQL(资讯门户网站)源码"是一个基于Java技术栈开发的完整资讯门户系统。这个项目利用了Java的强大力量,结合Spring框架、Hibernate对象关系映射工具以及HTML5和MySQL数据库,...

    spring dwr hibernater ibatis

    Spring 是一个全面的后端开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,使得开发者可以更专注于业务逻辑而不是底层的基础设施。Spring 还包括了 MVC 模式,用于构建 Web 应用的控制层,以及对数据...

    springmvc +hibernate demo

    这个"springmvc +hibernate demo"是一个入门级别的示例项目,旨在帮助初学者理解如何将这两个框架整合在一起进行实际的开发工作。 首先,我们来看`.classpath`文件,这是一个Eclipse项目配置文件,其中包含了项目的...

    jSF_hibernater_spring写一个简单的登陆页面

    这是老外写的用JSF+Spring+Hibernate开发的简单应用实例 使用MySQL作为数据库,整合了JSF(MyFaces)、 Spring及Hibernate,以具体的用户登陆及注册业务来说明具体的使用过程

    spring3.0+hibernate3.3+mysql8.0

    在本项目中,我们关注的是一个经典的Java Web开发技术栈:Spring 3.0、Hibernate 3.3以及MySQL 8.0的整合。这个组合是企业级应用中常见的技术选型,它们各自承担着不同的职责,共同构建了一个强大、灵活且可扩展的...

    SSHjar.rar

    struts2.16+spring2.5+hibernater3.2框架整合必要的jar包,spring和hibernate的jar包可以使用MyEclipse自动导入,导完后删除asm2.23这个包是多余的

Global site tag (gtag.js) - Google Analytics