teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5992: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5992: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.backend; sascha@3333: tom@9726: import org.apache.logging.log4j.Logger; tom@9726: import org.apache.logging.log4j.LogManager; sascha@3333: sascha@3333: import org.hibernate.Session; sascha@3333: import org.hibernate.SessionFactory; sascha@3333: andre@8576: public class SedDBSessionHolder sascha@3333: { sascha@3333: private static Logger log = tom@9726: LogManager.getLogger(SedDBSessionHolder.class); sascha@3333: andre@8576: public static final ThreadLocal HOLDER = andre@8576: new ThreadLocal() { andre@8576: @Override andre@8576: protected Session initialValue() { andre@8576: Session session = create(); andre@8576: log.debug("Initial session value: " + session.hashCode()); andre@8576: return session; andre@8576: } andre@8576: }; andre@8576: sascha@3333: public synchronized static Session create() { sascha@3333: log.debug("create"); sascha@3333: SessionFactory sessionFactory = sascha@3333: SessionFactoryProvider.getSedDBSessionFactory(); sascha@3333: return sessionFactory.openSession(); sascha@3333: } andre@8576: andre@8576: public static Session acquire() { andre@8576: Session session = create(); andre@8576: log.debug("acquired session: " + session.hashCode()); andre@8576: HOLDER.set(session); andre@8576: return session; andre@8576: } andre@8576: andre@8576: public static void release() { andre@8576: Session session = HOLDER.get(); andre@8576: if (session != null) { andre@8576: log.debug("releasing session: " + session.hashCode()); andre@8576: session.close(); andre@8576: } else { andre@8576: log.error("release() called on NULL session."); andre@8576: } andre@8576: HOLDER.remove(); andre@8576: } sascha@3333: } sascha@3333: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :