2013-02-05 45 views
0

我試圖在每個請求上打開Hibernate Session,並在最後關閉它。如何在Struts 2中將對象放入ThreadLocal中?

This似乎可以工作,但我現在已經想到我該如何將Session對象放在ThreadLocal中,答案並不能解釋這一點。

是否有任何Struts2具體的方式來做到這一點?

+0

Spring可以爲你管理Hibernate會話。尋找Spring OpenSessionInViewFilter。 –

回答

1

您可以添加一個位於Struts2 Servlet之前的HttpFilter。在過濾器:

public class SessionProviderFilter implements Filter { 
    private static ThreadLocal<Session> sessionStore = new ThreadLocal<Session>(); 


    public void doFilter(...) { 
     Session session = ... // get the session 
     sessionStore.set(session); 
     chain.doFilter(...); 
     sessionStore.set(null); 
    } 

    public static Session getCurrentSession() { 
     return sessionStore.get(); 
    } 
} 
從任何代碼

現在,爲了獲得當前Hibernate的Session,你叫SessionProviderFilter.getCurrentSession()。