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();
}
}