comparison flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java @ 1259:54365104835c 2.5

merged flys-backend/2.5
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:14:18 +0200
parents 774dff3ee546
children 52d712cd2384
comparison
equal deleted inserted replaced
1190:f514894ec2fd 1259:54365104835c
1 package de.intevation.flys.backend;
2
3 import de.intevation.artifacts.common.utils.Config;
4
5 import java.util.Properties;
6
7 import org.hibernate.SessionFactory;
8
9 import org.hibernate.cfg.Configuration;
10 import org.hibernate.cfg.Environment;
11
12 import de.intevation.flys.model.Annotation;
13 import de.intevation.flys.model.AnnotationType;
14 import de.intevation.flys.model.Attribute;
15 import de.intevation.flys.model.Building;
16 import de.intevation.flys.model.CrossSection;
17 import de.intevation.flys.model.CrossSectionLine;
18 import de.intevation.flys.model.CrossSectionPoint;
19 import de.intevation.flys.model.CrossSectionTrack;
20 import de.intevation.flys.model.DGM;
21 import de.intevation.flys.model.DischargeTable;
22 import de.intevation.flys.model.DischargeTableValue;
23 import de.intevation.flys.model.Edge;
24 import de.intevation.flys.model.Fixpoint;
25 import de.intevation.flys.model.Floodplain;
26 import de.intevation.flys.model.Gauge;
27 import de.intevation.flys.model.HYK;
28 import de.intevation.flys.model.HYKEntry;
29 import de.intevation.flys.model.HYKFormation;
30 import de.intevation.flys.model.HYKFlowZoneType;
31 import de.intevation.flys.model.HYKFlowZone;
32 import de.intevation.flys.model.Line;
33 import de.intevation.flys.model.MainValueType;
34 import de.intevation.flys.model.NamedMainValue;
35 import de.intevation.flys.model.MainValue;
36 import de.intevation.flys.model.Position;
37 import de.intevation.flys.model.Range;
38 import de.intevation.flys.model.River;
39 import de.intevation.flys.model.RiverAxis;
40 import de.intevation.flys.model.TimeInterval;
41 import de.intevation.flys.model.WstColumn;
42 import de.intevation.flys.model.WstColumnQRange;
43 import de.intevation.flys.model.WstColumnValue;
44 import de.intevation.flys.model.Wst;
45 import de.intevation.flys.model.WstQRange;
46
47 import org.apache.log4j.Logger;
48
49 public final class SessionFactoryProvider
50 {
51 private static Logger log = Logger.getLogger(SessionFactoryProvider.class);
52
53 public static final String XPATH_USER =
54 "/artifact-database/backend-database/user/text()";
55
56 public static final String XPATH_PASSWORD =
57 "/artifact-database/backend-database/password/text()";
58
59 public static final String XPATH_DIALECT =
60 "/artifact-database/backend-database/dialect/text()";
61
62 public static final String XPATH_DRIVER =
63 "/artifact-database/backend-database/driver/text()";
64
65 public static final String XPATH_URL =
66 "/artifact-database/backend-database/url/text()";
67
68 public static final String DEFAULT_USER =
69 System.getProperty("flys.backend.user", "flys");
70
71 public static final String DEFAULT_PASSWORD =
72 System.getProperty("flys.backend.password", "flys");
73
74 public static final String DEFAULT_DIALECT =
75 System.getProperty(
76 "flys.backend.dialect",
77 "org.hibernate.dialect.PostgreSQLDialect");
78
79 public static final String DEFAULT_DRIVER =
80 System.getProperty(
81 "flys.backend.driver",
82 "org.postgresql.Driver");
83
84 public static final String DEFAULT_URL =
85 System.getProperty(
86 "flys.backend.url",
87 "jdbc:postgresql://localhost:5432/flys");
88
89 private static SessionFactory sessionFactory;
90
91 private SessionFactoryProvider() {
92 }
93
94 public static synchronized SessionFactory getSessionFactory() {
95 if (sessionFactory == null) {
96 String user =
97 Config.getStringXPath(XPATH_USER, DEFAULT_USER);
98 String password =
99 Config.getStringXPath(XPATH_PASSWORD, DEFAULT_PASSWORD);
100 String dialect =
101 Config.getStringXPath(XPATH_DIALECT, DEFAULT_DIALECT);
102 String driver =
103 Config.getStringXPath(XPATH_DRIVER, DEFAULT_DRIVER);
104 String url =
105 Config.getStringXPath(XPATH_URL, DEFAULT_URL);
106
107 sessionFactory = createSessionFactory(
108 user, password, dialect, driver, url);
109 }
110 return sessionFactory;
111 }
112
113 public static SessionFactory createSessionFactory() {
114 return createSessionFactory(
115 DEFAULT_USER,
116 DEFAULT_PASSWORD,
117 DEFAULT_DIALECT,
118 DEFAULT_DRIVER,
119 DEFAULT_URL);
120 }
121
122 public static SessionFactory createSessionFactory(
123 String user,
124 String password,
125 String dialect,
126 String driver,
127 String url
128 ) {
129 Configuration cfg = createConfiguration(
130 user, password, dialect, driver, url);
131
132 return cfg.buildSessionFactory();
133 }
134
135 public static Configuration createConfiguration() {
136 return createConfiguration(
137 DEFAULT_USER,
138 DEFAULT_PASSWORD,
139 DEFAULT_DIALECT,
140 DEFAULT_DRIVER,
141 DEFAULT_URL);
142 }
143
144 public static Configuration createConfiguration(
145 String user,
146 String password,
147 String dialect,
148 String driver,
149 String url
150 ) {
151 Configuration cfg = new Configuration();
152
153 // TODO: Use package reflection here.
154 cfg.addAnnotatedClass(Annotation.class);
155 cfg.addAnnotatedClass(AnnotationType.class);
156 cfg.addAnnotatedClass(Attribute.class);
157 cfg.addAnnotatedClass(Building.class);
158 cfg.addAnnotatedClass(CrossSection.class);
159 cfg.addAnnotatedClass(CrossSectionLine.class);
160 cfg.addAnnotatedClass(CrossSectionPoint.class);
161 cfg.addAnnotatedClass(CrossSectionTrack.class);
162 cfg.addAnnotatedClass(DGM.class);
163 cfg.addAnnotatedClass(DischargeTable.class);
164 cfg.addAnnotatedClass(DischargeTableValue.class);
165 cfg.addAnnotatedClass(Edge.class);
166 cfg.addAnnotatedClass(Fixpoint.class);
167 cfg.addAnnotatedClass(Floodplain.class);
168 cfg.addAnnotatedClass(Gauge.class);
169 cfg.addAnnotatedClass(HYK.class);
170 cfg.addAnnotatedClass(HYKEntry.class);
171 cfg.addAnnotatedClass(HYKFormation.class);
172 cfg.addAnnotatedClass(HYKFlowZoneType.class);
173 cfg.addAnnotatedClass(HYKFlowZone.class);
174 cfg.addAnnotatedClass(Line.class);
175 cfg.addAnnotatedClass(MainValueType.class);
176 cfg.addAnnotatedClass(NamedMainValue.class);
177 cfg.addAnnotatedClass(MainValue.class);
178 cfg.addAnnotatedClass(Position.class);
179 cfg.addAnnotatedClass(Range.class);
180 cfg.addAnnotatedClass(River.class);
181 cfg.addAnnotatedClass(RiverAxis.class);
182 cfg.addAnnotatedClass(TimeInterval.class);
183 cfg.addAnnotatedClass(WstColumn.class);
184 cfg.addAnnotatedClass(WstColumnQRange.class);
185 cfg.addAnnotatedClass(WstColumnValue.class);
186 cfg.addAnnotatedClass(Wst.class);
187 cfg.addAnnotatedClass(WstQRange.class);
188
189 if (log.isDebugEnabled()) {
190 log.debug("user: " + user);
191 log.debug("dialect: " + dialect);
192 log.debug("driver: " + driver);
193 log.debug("url: " + url);
194 }
195
196 Properties props = new Properties();
197
198 // We rely on our own connection pool
199 props.setProperty(
200 "hibernate.connection.provider_class",
201 "org.hibernate.connection.DBCPConnectionProvider");
202
203 props.setProperty(Environment.DIALECT, dialect);
204 props.setProperty(Environment.USER, user);
205 props.setProperty(Environment.PASS, password);
206 props.setProperty(Environment.DRIVER, driver);
207 props.setProperty(Environment.URL, url);
208
209 cfg.mergeProperties(props);
210
211 return cfg;
212 }
213 }
214 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org