Mercurial > dive4elements > river
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 : |