teichmann@5831: package org.dive4elements.river.artifacts.context; ingo@307: ingo@307: import org.apache.log4j.Logger; ingo@307: ingo@310: import org.w3c.dom.Document; ingo@310: import org.w3c.dom.Node; ingo@310: ingo@307: import org.hibernate.Session; ingo@307: teichmann@5831: import org.dive4elements.river.backend.SessionHolder; ingo@315: teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.CallContext.Listener; ingo@307: ingo@307: ingo@307: /** ingo@307: * This CallContextListener is used to initialize a ThreadLocal variable in ingo@307: * each CallContext (for each request) that holds Sessions. ingo@307: * ingo@307: * @author Ingo Weinzierl ingo@307: */ ingo@307: public class SessionCallContextListener implements Listener { ingo@307: sascha@308: public static final String SESSION_KEY = "context.session"; ingo@307: ingo@307: /** The logger that is used in this class.*/ ingo@307: private static Logger logger = ingo@307: Logger.getLogger(SessionCallContextListener.class); ingo@307: ingo@307: ingo@307: public SessionCallContextListener() { ingo@307: } ingo@307: ingo@307: ingo@310: public void setup(Document config, Node listenerConfig) { ingo@310: // nothing to do here ingo@310: } ingo@310: ingo@310: ingo@307: /** ingo@307: * Initializes a ThreadLocal variable that is used to hold sessions. ingo@307: * ingo@307: * @param context The CallContext. ingo@307: */ ingo@307: public void init(CallContext context) { ingo@307: logger.debug("SessionCallContextListener.init"); ingo@307: sascha@308: Session session = SessionHolder.acquire(); ingo@307: sascha@308: context.putContextValue(SESSION_KEY, session); ingo@307: } ingo@307: ingo@307: ingo@307: /** ingo@307: * Closes open sessions of the ThreadLocal variable opened in init(). ingo@307: * ingo@307: * @param context The CallContext. ingo@307: */ ingo@307: public void close(CallContext context) { ingo@307: logger.debug("SessionCallContextListener.close"); ingo@307: sascha@308: Session session = (Session)context.getContextValue(SESSION_KEY); sascha@308: session.close(); ingo@307: sascha@308: SessionHolder.release(); ingo@307: } ingo@307: } ingo@307: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :