如何在Struts 2中的ThreadLocal中放置对象?

时间:2013-02-05 19:34:26

标签: java hibernate

我正在尝试在每个请求上打开Hibernate Session并在最后关闭它。

This似乎可行,但我现在知道如何将Session对象放入ThreadLocal并且答案没有解释。

是否有任何Struts2特定的方法来执行此操作?

1 个答案:

答案 0 :(得分: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会话,都可以调用SessionProviderFilter.getCurrentSession()。