annotate backend/src/main/java/org/dive4elements/river/backend/SessionHolder.java @ 8567:9bbce0edd36b

(issue1797) Increase session debug output
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 24 Feb 2015 18:32:18 +0100
parents fe7e9da6312a
children 5c53b7de04d9
rev   line source
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5992
4c3ccf2b0304 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5992
4c3ccf2b0304 Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5844
diff changeset
6 * documentation coming with Dive4Elements River for details.
5844
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4dd33b86dc61 Added header to river backend.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5829
18619c1e7c2a Repaired internal references.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5828
diff changeset
9 package org.dive4elements.river.backend;
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
10
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
11 import org.apache.log4j.Logger;
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
12
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
13 import org.hibernate.Session;
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import org.hibernate.SessionFactory;
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
15
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17 public class SessionHolder
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
18 {
3333
76c75c8b9ee0 SedDB: Make access to SedDB configurable over conf.xml and provide access to sessions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 466
diff changeset
19 private static Logger log =
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
20 Logger.getLogger(SessionHolder.class);
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
21
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
22 public static final ThreadLocal<Session> HOLDER =
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
23 new ThreadLocal<Session>() {
3333
76c75c8b9ee0 SedDB: Make access to SedDB configurable over conf.xml and provide access to sessions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 466
diff changeset
24 @Override
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
25 protected Session initialValue() {
8567
9bbce0edd36b (issue1797) Increase session debug output
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8566
diff changeset
26 Session session = create();
9bbce0edd36b (issue1797) Increase session debug output
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8566
diff changeset
27 log.debug("Initial session value: " + session.hashCode());
9bbce0edd36b (issue1797) Increase session debug output
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8566
diff changeset
28 return session;
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
29 }
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
30 };
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
31
8566
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
32 protected SessionHolder() {
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33 }
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35 public synchronized static Session create() {
3333
76c75c8b9ee0 SedDB: Make access to SedDB configurable over conf.xml and provide access to sessions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 466
diff changeset
36 log.debug("create");
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
37 SessionFactory sessionFactory =
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38 SessionFactoryProvider.getSessionFactory();
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 return sessionFactory.openSession();
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40 }
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
41
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
42 public static Session acquire() {
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
43 Session session = create();
8567
9bbce0edd36b (issue1797) Increase session debug output
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8566
diff changeset
44 log.debug("acquired session: " + session.hashCode());
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 HOLDER.set(session);
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46 return session;
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47 }
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
48
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
49 public static void release() {
8566
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
50 Session session = HOLDER.get();
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
51 if (session != null) {
8567
9bbce0edd36b (issue1797) Increase session debug output
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8566
diff changeset
52 log.debug("releasing session: " + session.hashCode());
8566
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
53 try {
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
54 if (!session.isOpen()) {
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
55 /* If this check really works in all cases why does hibernate
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
56 * does not use it when you call close anyway. */
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
57 log.debug("Session is not open. Calling close anyway.");
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
58 }
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
59 session.close();
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
60 } catch (Exception e) {
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
61 /* Do not try this at home. But hibernate may fail with an NPE
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
62 * or any other exception depending on the state of the session.
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
63 * According to doc this should only throw a HibernateException but
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
64 * we definetely get NPE's here.
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
65 */
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
66 log.error("Exception caught on session close! Session already closed?" + e.getMessage());
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
67 }
8567
9bbce0edd36b (issue1797) Increase session debug output
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8566
diff changeset
68 } else {
9bbce0edd36b (issue1797) Increase session debug output
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8566
diff changeset
69 log.debug("release called on NULL session.");
8566
fe7e9da6312a (issue1797) Move close into session release and guard it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 5992
diff changeset
70 }
466
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
71 HOLDER.remove();
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
72 }
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
73 }
8bd50b41dea6 Moved the SessionHolder from flys-artifacts to flys-backend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
74 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org