一、背景:
开发J2EE项目时会常常考虑到Session对象创建的问题,一般有以下几种使用方法:
1、类的某个方法中创建一个对象。
2、创建一个工具类,负责创建Session对象,要获取Session对象时调用方法获取即可。
a、工具类中是采用单例模式。
b、static{}中加入SessionFactory对象,表示整个应用程序只创建一次。
c、提供一个getSesssion()方法,使用户获取对象。
3、在应用程序Tomcat服务器启动时就创建对象。
以下代码使用第三种方式创建Session对象。
二、在Tomcat启动的时,利用Filter进行Session的创建及关闭:
1、创建一个Filter文件:HibernateFilter.java
public class HibernateFilter implements Filter { private static ThreadLocal threadLocal=new ThreadLocal(); private static SessionFactory sessionFactory=null;
public void destroy() { } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { try{ getSession(); }finally{ Session session=(Session)threadLocal.get(); if(session!=null){ if(session.isOpen()){ session.close(); } threadLocal.remove(); } } } public void init(FilterConfig arg0) throws ServletException { Configuration cfg=new Configuration().configure(); sessionFactory=cfg.buildSessionFactory(); } public static Session getSession(){ Session session=(Session)threadLocal.get(); if(session==null){ session=sessionFactory.getCurrentSession(); } return session; } } |
优点:Session的打开和关闭统一由Filter进行管理。
2、配置文件中配置Filter:(web.xml)
<filter> ......... </filter> |
3、测试
在程序中调用HibernateFilter类获取一个Session对象。