📄 hibernatefilterlong.java
字号:
package org.hibernate.auction.persistence;import net.sf.hibernate.Session;import org.apache.commons.logging.*;import javax.servlet.*;import javax.servlet.http.*;import java.io.IOException;/** * A servlet filter that disconnects and reconnects a Hibernate Session for each request. * <p> * Use this filter for the <b>session-per-application-transaction</b> pattern * with a <i>Long Session</i>. Don't forget to demarcate application transactions * in your code, as described in Hibernate in Action. * * @see HibernateUtil * @author Christian Bauer <christian@hibernate.org> */public class HibernateFilterLong implements Filter { private static final String HTTPSESSIONKEY = "HibernateSession"; private static Log log = LogFactory.getLog(HibernateFilterLong.class); public void init(FilterConfig filterConfig) throws ServletException { log.info("Servlet filter init, now disconnecting/reconnecting a Session for each request."); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Try to get a Hibernate Session from the HttpSession HttpSession userSession = ((HttpServletRequest) request).getSession(); Session hibernateSession = (Session) userSession.getAttribute(HTTPSESSIONKEY); if (hibernateSession != null) HibernateUtil.reconnect(hibernateSession); // If there is no Session, the first call to // HibernateUtil.beginTransaction in application code will open // a new Session for this thread. try { chain.doFilter(request, response); // Commit any pending database transaction. HibernateUtil.commitTransaction(); } finally { // TODO: The Session should be closed if a fatal exceptions occurs // No matter what happens, disconnect the Session. hibernateSession = HibernateUtil.disconnectSession(); // and store it in the users HttpSession userSession.setAttribute(HTTPSESSIONKEY, hibernateSession); } } public void destroy() {}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -