⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hibernatefilterlong.java

📁 hibernate in action 源码 caveatemptor-0.9.5初学者很适合
💻 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 + -