spring opensession InViewer

2458 ワード

  hibernate         , DAO       ,Session   
                 ,  openSessionInViewer    
       

     :1.      Session
                    spring    hibernate Sessionactory
        2. DAO   session
                 DAO         ,           ThreadLocal 
        3.              Sesison

    Filter   
1.    OpenSessionFilter
    //        spring    hibernate SessionFactory
    @Override
    public void init(FilterConfig cfg) throws ServletException {
        wac=WebApplicationContextUtils
                .getWebApplicationContext(cfg.getServletContext());
        factory=(SessionFactory)wac.getBean("sessionFactory");
    }
    
2.  ThreadLocal   Session
     OpenSessionFilter.class

public class OpenSessionFilter implements Filter{

    /*  spring   , init   */
    private static WebApplicationContext wac;
    private static SessionFactory factory;
    private static ThreadLocal<Session> sessionHolder=new ThreadLocal<Session>();
    @Override
    public void destroy() {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        System.out.println("begin session");
        /**    spring   
         *     new ClassPathXmlApplicationContext()     
         *              , Servlet            
         *           ,
         *     WebApplicationContextUtils.getWebApplicationContext()*/
        try {
            //  session
            setSession(factory.openSession());
            chain.doFilter(request,response);
        } finally{
            //  session
            removeSession();
        }
        
        System.out.println("close session");
    }

    /**        spring    hibernate SessionFactory
     *     WebApplicationContextUtils
     * .getWebApplicationContext(ServletContext)   Spring   
     *       ,    
     * */
    @Override
    public void init(FilterConfig cfg) throws ServletException {
        wac=WebApplicationContextUtils
                .getWebApplicationContext(cfg.getServletContext());
        factory=(SessionFactory)wac.getBean("sessionFactory");
    }

    private static void setSession(Session session){
        sessionHolder.set(session);
    }
    
    private static void removeSession(){
        sessionHolder.remove();
    }
    
    public static Session getSession(){
        return sessionHolder.get();
    }
    
}