这是一个过滤器,用于确保关闭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;
}
}
分享到:
相关推荐
为了练手培训,给大家准备的 Open Session In View 的简单例子,纯代码,大家可以参考,其中主要说了六部分内容: 1.通过接口编程 2.通过spring注入dao到 action 3.通过 open session in view filter 支持 延迟加载...
2. **启用OpenSessionInView过滤器**:在web.xml中配置OpenSessionInViewFilter,该过滤器会在HTTP请求开始时开启一个新的Hibernate Session,并在请求结束时提交或回滚事务并关闭Session。 3. **编写业务逻辑**:在...
《韩顺平Spring雇员管理系统中的Hibernate ORM框架详解》 ...这个压缩包中的"hibernate jar包"是实现这些功能的关键,它包含Hibernate运行所需的类和库,是开发者在项目中使用Hibernate不可或缺的部分。
- **OpenSessionInView**:是一种设计模式,用于Web应用中,通过过滤器在请求开始时打开`Session`,结束时关闭,确保整个请求过程中`Session`可用,从而支持延迟加载。但这种方法可能导致过多的数据库连接,因此也...
本方案主要探讨如何在基于Hibernate和Spring框架的环境中实现多数据库的管理,特别是在`OpenSessionInView`模式下的配置。 首先,我们看到在`applicationContext.xml`配置文件中定义了两个数据源,一个用于读操作...
在没有使用Spring提供的Open Session In View情况下,因需要在service(or Dao)层里把session关闭,所以lazy loading 为true的话,要在应用层内把关系集合都初始化,如 company.getEmployees(),否则Hibernate抛...
OpenSessionInView(OSIV)模式是SSH整合中常见的一种优化策略,它在用户的一次HTTP请求过程中保持Hibernate Session,避免了多次打开和关闭Session,减少了N+1查询问题,提高了性能。 **Spring** 是一个全面的企业...
OpenSessionInView过滤器在Web请求的整个生命周期内保持一个Hibernate Session,使得在视图渲染阶段也能访问到数据库对象,避免了懒加载异常。 五、配置文件 1. `jdbc.properties`:存放数据库连接信息,如URL、...
在用户请求到达时开启一个数据库Session,在请求处理完后关闭Session。这样,整个请求生命周期内,数据库操作都可以在一个Session内完成,避免了可能出现的 LazyInitializationException。 在本项目中,SSH整合实现...
- `openSessionInView`模式是在Web层使用Filter打开和关闭Session,确保每个HTTP请求都有一个活跃的Session,以支持延迟加载。 6. Spring的事务管理: - 有两种方式:声明式事务(基于注解或XML配置)和编程式...
在基于Hibernate或其他ORM框架的Spring应用中,由于HTTP请求的无状态性,一次数据库操作可能跨多个方法调用,这就需要数据库会话(Session)在整个请求处理过程中保持打开状态。`OpenSessionInViewFilter`就是为了...
OSIV模式的核心思想是在Controller层和View层之间保持一个打开的Hibernate Session,这样即使在视图渲染过程中需要访问懒加载属性,也能确保Session是活跃的,从而避免上述异常。但是,OSIV并非无懈可击,过度依赖它...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式处理数据库操作。在大型应用中,数据量通常很大,为了提高用户体验和服务器性能,分页查询成为必不可少的功能。本...
在整合JSF、Spring和Hibernate时,通常会使用Spring的OpenSessionInView模式来处理数据库会话。这能确保在HTTP请求的整个生命周期内保持有效的Hibernate Session,从而避免可能出现的数据访问问题。 至于压缩包中的...
5. 最终,当视图渲染完成后,OpenSessionInViewFilter会关闭Session,释放相关资源,结束这次请求处理。 使用OpenSessionInViewFilter时需要注意以下几点: 1. **事务管理**:OpenSessionInViewFilter并不负责事务...
`openSessionInView`模式在Web层设置过滤器,保持Session在一次HTTP请求的整个生命周期内都开启,确保延迟加载能在Session范围内完成。 8. Spring支持两种事务管理方式:声明式事务(基于注解或XML配置)和编程式...
在Web应用的配置文件Web.xml中,有两个重要的配置部分:一是OpenSessionInView(OSIV)模式,通过`OpenSessionInViewFilter`确保在每次HTTP请求中都保持一个有效的Hibernate Session,避免了懒加载异常。二是设置...
以上就是SSH项目整合示例的核心内容,通过这个示例,开发者可以学习到如何将Struts2、Spring和Hibernate三个框架高效地结合在一起,构建出完整的Web应用程序。理解并熟练掌握这些知识,将有助于提升在Java Web开发...