comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/context/SessionCallContextListener.java @ 307:84f8462790cb

Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request. flys-artifacts/trunk@1687 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 14 Apr 2011 11:18:28 +0000
parents
children 084995dd1c9c
comparison
equal deleted inserted replaced
306:35301cc3b875 307:84f8462790cb
1 package de.intevation.flys.artifacts.context;
2
3 import org.apache.log4j.Logger;
4
5 import org.hibernate.Session;
6 import org.hibernate.SessionFactory;
7
8 import de.intevation.flys.backend.SessionFactoryProvider;
9
10 import de.intevation.artifacts.CallContext;
11 import de.intevation.artifacts.CallContext.Listener;
12
13
14 /**
15 * This CallContextListener is used to initialize a ThreadLocal variable in
16 * each CallContext (for each request) that holds Sessions.
17 *
18 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
19 */
20 public class SessionCallContextListener implements Listener {
21
22 public static final String SESSION_HOLDER_KEY = "context.session.holder";
23
24 /** The logger that is used in this class.*/
25 private static Logger logger =
26 Logger.getLogger(SessionCallContextListener.class);
27
28
29 public SessionCallContextListener() {
30 }
31
32
33 /**
34 * Initializes a ThreadLocal variable that is used to hold sessions.
35 *
36 * @param context The CallContext.
37 */
38 public void init(CallContext context) {
39 logger.debug("SessionCallContextListener.init");
40
41 ThreadLocal<Session> sessionHolder = new ThreadLocal<Session>();
42
43 SessionFactory sessionFactory =
44 SessionFactoryProvider.createSessionFactory();
45
46 Session session = sessionFactory.openSession();
47
48 sessionHolder.set(session);
49
50 context.putContextValue(SESSION_HOLDER_KEY, sessionHolder);
51 }
52
53
54 /**
55 * Closes open sessions of the ThreadLocal variable opened in init().
56 *
57 * @param context The CallContext.
58 */
59 public void close(CallContext context) {
60 logger.debug("SessionCallContextListener.close");
61
62 ThreadLocal<Session> sessionHolder = (ThreadLocal<Session>)
63 context.getContextValue(SESSION_HOLDER_KEY);
64
65 Session session = sessionHolder.get();
66
67 session.close();
68 sessionHolder.remove();
69 }
70 }
71 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org