+++ /dev/null
-/*
- * $Id: HibernateSessionManager.java,v 1.1 2004/11/06 16:20:48 idfx Exp $
- *
- * Copyright (C) 2001, 2002, 2003, 2004 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with any library licensed under the Apache Software License,
- * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
- * (or with modified versions of the above that use the same license as the above),
- * and distribute linked combinations including the two. You must obey the
- * GNU General Public License in all respects for all of the code used other than
- * the above mentioned libraries. If you modify this file, you may extend this
- * exception to your version of the file, but you are not obligated to do so.
- * If you do not wish to do so, delete this exception statement from your version.
- */
-package org.codecoop.mir.core.dao.hibernate;
-
-import net.sf.hibernate.HibernateException;
-import net.sf.hibernate.Interceptor;
-import net.sf.hibernate.Session;
-import net.sf.hibernate.SessionFactory;
-import net.sf.hibernate.cfg.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codecoop.mir.core.dao.DatabaseFailure;
-
-/**
- * HibernateUtil
- *
- * @author idefix
- * @version $Revision: 1.1 $
- */
-class HibernateSessionManager {
-
- private static Log log = LogFactory.getLog(HibernateSessionManager.class);
-
- private static Configuration configuration;
- private static SessionFactory sessionFactory;
- private static final ThreadLocal threadSession = new ThreadLocal();
- private static final ThreadLocal threadInterceptor = new ThreadLocal();
-
- // Create the initial SessionFactory from the default configuration files
- static {
- try {
- configuration = new Configuration();
- sessionFactory = configuration.configure().buildSessionFactory();
- log.debug("SessionFactory built.");
- } catch (Throwable ex) {
- log.error("Building SessionFactory failed.", ex);
- throw new ExceptionInInitializerError(ex);
- }
- }
-
- /**
- * Returns the SessionFactory used for this static class.
- *
- * @return SessionFactory
- */
- static SessionFactory getSessionFactory() {
- return sessionFactory;
- }
-
- /**
- * Returns the original Hibernate configuration.
- *
- * @return Configuration
- */
- static Configuration getConfiguration() {
- return configuration;
- }
-
- /**
- * Rebuild the SessionFactory with the static Configuration.
- *
- */
- static void rebuildSessionFactory() throws DatabaseFailure {
- synchronized (sessionFactory) {
- try {
- sessionFactory = getConfiguration().buildSessionFactory();
- } catch (Exception ex) {
- throw new DatabaseFailure(ex);
- }
- }
- }
-
- /**
- * Rebuild the SessionFactory with the given Hibernate Configuration.
- *
- * @param cfg
- */
- static void rebuildSessionFactory(Configuration cfg) throws DatabaseFailure {
- synchronized (sessionFactory) {
- try {
- sessionFactory = cfg.buildSessionFactory();
- configuration = cfg;
- } catch (Exception ex) {
- throw new DatabaseFailure(ex);
- }
- }
- }
-
- /**
- * Retrieves the current Session local to the thread. <p/>If no Session is
- * open, opens a new Session for the running thread.
- *
- * @return Session
- */
- static Session getSession() throws DatabaseFailure {
- Session s = (Session) threadSession.get();
- try {
- if (s == null) {
- log.debug("Opening new Session for this thread.");
- if (getInterceptor() != null) {
- log.debug("Using interceptor: " + getInterceptor().getClass());
- s = getSessionFactory().openSession(getInterceptor());
- } else {
- s = getSessionFactory().openSession();
- }
- threadSession.set(s);
- }
- } catch (HibernateException ex) {
- throw new DatabaseFailure(ex);
- }
- return s;
- }
-
- /**
- * Closes the Session local to the thread.
- */
- static void closeSession() throws DatabaseFailure {
- try {
- Session s = (Session) threadSession.get();
- threadSession.set(null);
- if (s != null && s.isOpen()) {
- log.debug("Closing Session of this thread.");
- s.close();
- }
- } catch (HibernateException ex) {
- throw new DatabaseFailure(ex);
- }
- }
-
- /**
- * Reconnects a Hibernate Session to the current Thread.
- *
- * @param session
- * The Hibernate Session to be reconnected.
- */
- static void reconnect(Session session) throws DatabaseFailure {
- try {
- session.reconnect();
- threadSession.set(session);
- } catch (HibernateException ex) {
- throw new DatabaseFailure(ex);
- }
- }
-
- /**
- * Disconnect and return Session from current Thread.
- *
- * @return Session the disconnected Session
- */
- static Session disconnectSession() throws DatabaseFailure {
-
- Session session = getSession();
- try {
- threadSession.set(null);
- if (session.isConnected() && session.isOpen())
- session.disconnect();
- } catch (HibernateException ex) {
- throw new DatabaseFailure(ex);
- }
- return session;
- }
-
- /**
- * Register a Hibernate interceptor with the current thread.
- * <p>
- * Every Session opened is opened with this interceptor after registration.
- * Has no effect if the current Session of the thread is already open,
- * effective on next close()/getSession().
- */
- static void registerInterceptor(Interceptor interceptor) {
- threadInterceptor.set(interceptor);
- }
-
- private static Interceptor getInterceptor() {
- Interceptor interceptor = (Interceptor) threadInterceptor.get();
- return interceptor;
- }
-
-}
-