2011-07-29 15 views
1

私はブログシステムを書くためにHibernateとjspを使用しています。 セッションとトランザクションを管理するフィルタを使用したいと思います。結果は私のフォームフィールドは、MySQLに保存されていないです、今休止状態のフィルタでsession.commitを使用するにはどうすればよいですか?

public class SessionFilter implements Filter { 

FilterConfig config; 
SessionFactory sessionFactory; 
Session session; 

public void destroy() { 

    session.getTransaction().commit(); 
    this.config=null; 
    System.out.println("session Filter is destroyed."); 

} 

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    sessionFactory = (SessionFactory) config.getServletContext().getAttribute("sessionFactory"); 
    session = sessionFactory.getCurrentSession(); 
    session.beginTransaction(); 


    chain.doFilter(request, response); 
} 

public void init(FilterConfig config) throws ServletException { 
    this.config=config; 
    System.out.println("session Filter is inited."); 

} 

}

:今私は、フィルタを記述します。

答えて

6

destroy()は、コンテナがシャットダウンしたときにのみ呼び出されると思います。このアプローチをしたい場合は、doFilter()の末尾にcommit()を置く必要があります。

+0

絶対に正しいです。通常のパターンは、chain.doFilter呼び出しの後にdoFilterでcommit()を呼び出すことです。このパターンはかなり一般的です。たとえば、struts2-hibernateモジュールはこのように動作します(ただし、フィルタの代わりにstrutsインターセプタを使用する場合を除く)。 THANKS.IT'S TRUE。 – pap

+0

。 – evolever

関連する問題