`

hibernate Session在OpenSessionInView资源的获得和关闭

阅读更多
这是一个过滤器,用于确保关闭session资源,也用于获得session资源:HibernateFilter.getSession()


import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateFilter implements Filter {
	
	private static ThreadLocal hibernaThreadLocal = new ThreadLocal();
	private static SessionFactory factory;

	public void destroy() {
		
	}

	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		try {
			//加载页面之前
			filterChain.doFilter(servletRequest, servletResponse);
		}finally {
			//页面加载完hibernate使用的对象后关闭资源
			Session session = (Session)hibernaThreadLocal.get();
			if(session != null) {
				if(session.isOpen()) {
					session.close();
				}
				hibernaThreadLocal.remove();
			}
		}
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		try {
			Configuration cfg = new Configuration().configure();
			factory = cfg.buildSessionFactory();
		}catch(Exception e) {
			e.printStackTrace();
			throw new ServletException(e);
		}
		
	}
	
	public static Session getSession() {
		Session session = (Session)hibernaThreadLocal.get();
		if(session == null) {
			session = factory.openSession();
			hibernaThreadLocal.set(session);
		}
		return session;
	}
}

分享到:
评论
2 楼 qsrock 2009-09-25  
zhaomengsen 写道
OpenSessionInView 大项目是不能用到 。你想一想延迟session的到时间 虽然解决来懒加载问题。 又有来新到问题。与数据连接是有限。 网速越慢问题越多。

哈哈!是的确实应该是这样!这个应该是小项目才用的,数据库的连接时间是比较短的,一般配置个连接池来限定时间!我现在公司内部的项目都是一直500人左右同时在线操作,如果被大量刷新比较复杂的页面的时候就会使系统很慢,连接爆满!不过大部分时间还是没什么问题的!
1 楼 zhaomengsen 2009-09-25  
OpenSessionInView 大项目是不能用到 。你想一想延迟session的到时间 虽然解决来懒加载问题。 又有来新到问题。与数据连接是有限。 网速越慢问题越多。

相关推荐

    Struts Spring Hibernate 整合 OpenSessionInView 例子

    为了练手培训,给大家准备的 Open Session In View 的简单例子,纯代码,大家可以参考,其中主要说了六部分内容: 1.通过接口编程 2.通过spring注入dao到 action 3.通过 open session in view filter 支持 延迟加载...

    OpenSessionInView项目整合jar包

    2. **启用OpenSessionInView过滤器**:在web.xml中配置OpenSessionInViewFilter,该过滤器会在HTTP请求开始时开启一个新的Hibernate Session,并在请求结束时提交或回滚事务并关闭Session。 3. **编写业务逻辑**:在...

    韩顺平spring 雇员管理系统hibernate jar包

    《韩顺平Spring雇员管理系统中的Hibernate ORM框架详解》 ...这个压缩包中的"hibernate jar包"是实现这些功能的关键,它包含Hibernate运行所需的类和库,是开发者在项目中使用Hibernate不可或缺的部分。

    hibernate面试题总结

    - **OpenSessionInView**:是一种设计模式,用于Web应用中,通过过滤器在请求开始时打开`Session`,结束时关闭,确保整个请求过程中`Session`可用,从而支持延迟加载。但这种方法可能导致过多的数据库连接,因此也...

    HibernateSpring多数据库解决方案.doc

    本方案主要探讨如何在基于Hibernate和Spring框架的环境中实现多数据库的管理,特别是在`OpenSessionInView`模式下的配置。 首先,我们看到在`applicationContext.xml`配置文件中定义了两个数据源,一个用于读操作...

    Open_Session_In_View详解.doc

    在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛...

    SSH项目整合示例【OpenSessionInView】所用到的jar包

    OpenSessionInView(OSIV)模式是SSH整合中常见的一种优化策略,它在用户的一次HTTP请求过程中保持Hibernate Session,避免了多次打开和关闭Session,减少了N+1查询问题,提高了性能。 **Spring** 是一个全面的企业...

    spring+spingmvc+hibernate整合总结

    OpenSessionInView过滤器在Web请求的整个生命周期内保持一个Hibernate Session,使得在视图渲染阶段也能访问到数据库对象,避免了懒加载异常。 五、配置文件 1. `jdbc.properties`:存放数据库连接信息,如URL、...

    SSH整合示例项目 hibernate5.2.3+struts2.5.2+spring4.3.3.zip

    在用户请求到达时开启一个数据库Session,在请求处理完后关闭Session。这样,整个请求生命周期内,数据库操作都可以在一个Session内完成,避免了可能出现的 LazyInitializationException。 在本项目中,SSH整合实现...

    struts+spring+hibernate面试题

    - `openSessionInView`模式是在Web层使用Filter打开和关闭Session,确保每个HTTP请求都有一个活跃的Session,以支持延迟加载。 6. Spring的事务管理: - 有两种方式:声明式事务(基于注解或XML配置)和编程式...

    Spring提供的CharacterEncoding和OpenSessionInView功能

    在基于Hibernate或其他ORM框架的Spring应用中,由于HTTP请求的无状态性,一次数据库操作可能跨多个方法调用,这就需要数据库会话(Session)在整个请求处理过程中保持打开状态。`OpenSessionInViewFilter`就是为了...

    spring中lazy=“true”的正常读取关联表(用opensessioninview)

    OSIV模式的核心思想是在Controller层和View层之间保持一个打开的Hibernate Session,这样即使在视图渲染过程中需要访问懒加载属性,也能确保Session是活跃的,从而避免上述异常。但是,OSIV并非无懈可击,过度依赖它...

    Hibernate分页总结

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式处理数据库操作。在大型应用中,数据量通常很大,为了提高用户体验和服务器性能,分页查询成为必不可少的功能。本...

    jsf + spring +hibernate 自己做的一个例子,主要是看一些基本配置

    在整合JSF、Spring和Hibernate时,通常会使用Spring的OpenSessionInView模式来处理数据库会话。这能确保在HTTP请求的整个生命周期内保持有效的Hibernate Session,从而避免可能出现的数据访问问题。 至于压缩包中的...

    关于OpenSessionInViewFilter的学习

    5. 最终,当视图渲染完成后,OpenSessionInViewFilter会关闭Session,释放相关资源,结束这次请求处理。 使用OpenSessionInViewFilter时需要注意以下几点: 1. **事务管理**:OpenSessionInViewFilter并不负责事务...

    收集的struts+spring+hibernate面试题借鉴.pdf

    `openSessionInView`模式在Web层设置过滤器,保持Session在一次HTTP请求的整个生命周期内都开启,确保延迟加载能在Session范围内完成。 8. Spring支持两种事务管理方式:声明式事务(基于注解或XML配置)和编程式...

    SSH框架搭建.doc

    在Web应用的配置文件Web.xml中,有两个重要的配置部分:一是OpenSessionInView(OSIV)模式,通过`OpenSessionInViewFilter`确保在每次HTTP请求中都保持一个有效的Hibernate Session,避免了懒加载异常。二是设置...

    SSH项目整合示例【源码】

    以上就是SSH项目整合示例的核心内容,通过这个示例,开发者可以学习到如何将Struts2、Spring和Hibernate三个框架高效地结合在一起,构建出完整的Web应用程序。理解并熟练掌握这些知识,将有助于提升在Java Web开发...

Global site tag (gtag.js) - Google Analytics