annotate artifacts/src/main/java/org/dive4elements/river/artifacts/context/SessionCallContextListener.java @ 8566:fe7e9da6312a

(issue1797) Move close into session release and guard it. To avoid leaking open and Held sessions we centrally close the session in the SessionHolder on release. This also removes some duplicated code in SedDBSessionHolder
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 24 Feb 2015 17:16:14 +0100
parents e4606eae8ea5
children 0a5239a1e46e
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 315
diff changeset
9 package org.dive4elements.river.artifacts.context;
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import org.apache.log4j.Logger;
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12
310
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
13 import org.w3c.dom.Document;
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
14 import org.w3c.dom.Node;
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
15
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16 import org.hibernate.Session;
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 315
diff changeset
18 import org.dive4elements.river.backend.SessionHolder;
315
94c176fdcb89 Removed the SessionHolder and adapted imports.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 310
diff changeset
19
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 315
diff changeset
20 import org.dive4elements.artifacts.CallContext;
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 315
diff changeset
21 import org.dive4elements.artifacts.CallContext.Listener;
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
24 /**
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25 * This CallContextListener is used to initialize a ThreadLocal variable in
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
26 * each CallContext (for each request) that holds Sessions.
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
27 *
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
28 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 */
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 public class SessionCallContextListener implements Listener {
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
308
084995dd1c9c Added a session holder to hold hibernate sessions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 307
diff changeset
32 public static final String SESSION_KEY = "context.session";
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
34 /** The log that is used in this class.*/
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
35 private static Logger log =
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
36 Logger.getLogger(SessionCallContextListener.class);
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 public SessionCallContextListener() {
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40 }
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42
310
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
43 public void setup(Document config, Node listenerConfig) {
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
44 // nothing to do here
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
45 }
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
46
6d2c8915e22c Finalized the SessionCallContextListener and registered it as CallContext.Listener in the configuration.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 308
diff changeset
47
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48 /**
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 * Initializes a ThreadLocal variable that is used to hold sessions.
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
50 *
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
51 * @param context The CallContext.
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
52 */
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
53 public void init(CallContext context) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
54 log.debug("SessionCallContextListener.init");
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
55
308
084995dd1c9c Added a session holder to hold hibernate sessions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 307
diff changeset
56 Session session = SessionHolder.acquire();
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
57
308
084995dd1c9c Added a session holder to hold hibernate sessions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 307
diff changeset
58 context.putContextValue(SESSION_KEY, session);
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
59 }
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
60
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
61
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
62 /**
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
63 * Closes open sessions of the ThreadLocal variable opened in init().
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
64 *
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
65 * @param context The CallContext.
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
66 */
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
67 public void close(CallContext context) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
68 log.debug("SessionCallContextListener.close");
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
69
308
084995dd1c9c Added a session holder to hold hibernate sessions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 307
diff changeset
70 SessionHolder.release();
307
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
71 }
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72 }
84f8462790cb Added an Implementation of CallContext.Listener to open/close Hibernate Sessions for each request.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
73 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org