comparison flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java @ 3333:76c75c8b9ee0

SedDB: Make access to SedDB configurable over conf.xml and provide access to sessions. flys-backend/trunk@4666 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 14 Jun 2012 15:39:42 +0000
parents a2a33eff93aa
children 69f06b83b3ec
comparison
equal deleted inserted replaced
3332:aa8ed778c8cc 3333:76c75c8b9ee0
1 package de.intevation.flys.backend; 1 package de.intevation.flys.backend;
2 2
3 import de.intevation.artifacts.common.utils.Config; 3 import java.lang.management.ManagementFactory;
4 4
5 import java.lang.management.ManagementFactory;
6 import java.util.Properties; 5 import java.util.Properties;
7 6
8 import javax.management.InstanceAlreadyExistsException; 7 import javax.management.InstanceAlreadyExistsException;
9 import javax.management.MalformedObjectNameException;
10 import javax.management.MBeanRegistrationException; 8 import javax.management.MBeanRegistrationException;
11 import javax.management.MBeanServer; 9 import javax.management.MBeanServer;
10 import javax.management.MalformedObjectNameException;
12 import javax.management.NotCompliantMBeanException; 11 import javax.management.NotCompliantMBeanException;
13 import javax.management.ObjectName; 12 import javax.management.ObjectName;
14 13
14 import org.apache.log4j.Logger;
15
15 import org.hibernate.SessionFactory; 16 import org.hibernate.SessionFactory;
17
18 import org.hibernate.cfg.Configuration;
19 import org.hibernate.cfg.Environment;
16 20
17 import org.hibernate.impl.SessionFactoryImpl; 21 import org.hibernate.impl.SessionFactoryImpl;
18 22
19 import org.hibernate.jmx.StatisticsService; 23 import org.hibernate.jmx.StatisticsService;
20 24
21 import org.hibernate.cfg.Configuration;
22 import org.hibernate.cfg.Environment;
23
24 import de.intevation.flys.model.Annotation;
25 import de.intevation.flys.model.AnnotationType;
26 import de.intevation.flys.model.Attribute;
27 import de.intevation.flys.model.BedHeightEpoch;
28 import de.intevation.flys.model.BedHeightEpochValue;
29 import de.intevation.flys.model.BedHeightSingle;
30 import de.intevation.flys.model.BedHeightSingleValue;
31 import de.intevation.flys.model.BedHeightType;
32 import de.intevation.flys.model.Building;
33 import de.intevation.flys.model.Catchment;
34 import de.intevation.flys.model.CrossSection;
35 import de.intevation.flys.model.CrossSectionLine;
36 import de.intevation.flys.model.CrossSectionPoint;
37 import de.intevation.flys.model.CrossSectionTrack;
38 import de.intevation.flys.model.Depth;
39 import de.intevation.flys.model.DGM;
40 import de.intevation.flys.model.DischargeTable;
41 import de.intevation.flys.model.DischargeTableValue;
42 import de.intevation.flys.model.DischargeZone;
43 import de.intevation.flys.model.Edge;
44 import de.intevation.flys.model.ElevationModel;
45 import de.intevation.flys.model.Fixpoint;
46 import de.intevation.flys.model.Floodmaps;
47 import de.intevation.flys.model.Floodplain;
48 import de.intevation.flys.model.FlowVelocityMeasurement;
49 import de.intevation.flys.model.FlowVelocityMeasurementValue;
50 import de.intevation.flys.model.FlowVelocityModel;
51 import de.intevation.flys.model.FlowVelocityModelValue;
52 import de.intevation.flys.model.Gauge;
53 import de.intevation.flys.model.GaugeLocation;
54 import de.intevation.flys.model.GrainFraction;
55 import de.intevation.flys.model.Hws;
56 import de.intevation.flys.model.HydrBoundary;
57 import de.intevation.flys.model.HydrBoundaryPoly;
58 import de.intevation.flys.model.HYK;
59 import de.intevation.flys.model.HYKEntry;
60 import de.intevation.flys.model.HYKFormation;
61 import de.intevation.flys.model.HYKFlowZoneType;
62 import de.intevation.flys.model.HYKFlowZone;
63 import de.intevation.flys.model.Line;
64 import de.intevation.flys.model.LocationSystem;
65 import de.intevation.flys.model.MainValueType;
66 import de.intevation.flys.model.MorphologicalWidth;
67 import de.intevation.flys.model.MorphologicalWidthValue;
68 import de.intevation.flys.model.NamedMainValue;
69 import de.intevation.flys.model.MainValue;
70 import de.intevation.flys.model.Position;
71 import de.intevation.flys.model.Range;
72 import de.intevation.flys.model.River;
73 import de.intevation.flys.model.RiverAxis;
74 import de.intevation.flys.model.RiverAxisKm;
75 import de.intevation.flys.model.SedimentDensity;
76 import de.intevation.flys.model.SedimentDensityValue;
77 import de.intevation.flys.model.SedimentYield;
78 import de.intevation.flys.model.SedimentYieldValue;
79 import de.intevation.flys.model.SQRelation;
80 import de.intevation.flys.model.SQRelationValue;
81 import de.intevation.flys.model.TimeInterval;
82 import de.intevation.flys.model.Unit;
83 import de.intevation.flys.model.Waterlevel;
84 import de.intevation.flys.model.WaterlevelDifference;
85 import de.intevation.flys.model.WaterlevelDifferenceColumn;
86 import de.intevation.flys.model.WaterlevelDifferenceValue;
87 import de.intevation.flys.model.WaterlevelQRange;
88 import de.intevation.flys.model.WaterlevelValue;
89 import de.intevation.flys.model.WstColumn;
90 import de.intevation.flys.model.WstColumnQRange;
91 import de.intevation.flys.model.WstColumnValue;
92 import de.intevation.flys.model.Wst;
93 import de.intevation.flys.model.WstQRange;
94
95 import org.apache.log4j.Logger;
96
97 public final class SessionFactoryProvider 25 public final class SessionFactoryProvider
98 { 26 {
99 private static Logger log = Logger.getLogger(SessionFactoryProvider.class); 27 private static Logger log = Logger.getLogger(SessionFactoryProvider.class);
100 28
101 public static final String XPATH_USER =
102 "/artifact-database/backend-database/user/text()";
103
104 public static final String XPATH_PASSWORD =
105 "/artifact-database/backend-database/password/text()";
106
107 public static final String XPATH_DIALECT =
108 "/artifact-database/backend-database/dialect/text()";
109
110 public static final String XPATH_DRIVER =
111 "/artifact-database/backend-database/driver/text()";
112
113 public static final String XPATH_URL =
114 "/artifact-database/backend-database/url/text()";
115
116 public static final String DEFAULT_USER =
117 System.getProperty("flys.backend.user", "flys");
118
119 public static final String DEFAULT_PASSWORD =
120 System.getProperty("flys.backend.password", "flys");
121
122 public static final String DEFAULT_DIALECT =
123 System.getProperty(
124 "flys.backend.dialect",
125 "org.hibernate.dialect.PostgreSQLDialect");
126
127 public static final String DEFAULT_DRIVER =
128 System.getProperty(
129 "flys.backend.driver",
130 "org.postgresql.Driver");
131
132 public static final String DEFAULT_URL =
133 System.getProperty(
134 "flys.backend.url",
135 "jdbc:postgresql://localhost:5432/flys");
136
137 public static final boolean ENABLE_JMX = 29 public static final boolean ENABLE_JMX =
138 Boolean.getBoolean("flys.backend.enablejmx"); 30 Boolean.getBoolean("flys.backend.enablejmx");
139 31
140 private static SessionFactory sessionFactory; 32 private static SessionFactory flysSessionFactory;
33 private static SessionFactory sedDBSessionFactory;
141 34
142 private SessionFactoryProvider() { 35 private SessionFactoryProvider() {
143 } 36 }
144 37
145 public static synchronized SessionFactory getSessionFactory() { 38 public static synchronized SessionFactory getSessionFactory() {
146 if (sessionFactory == null) { 39 if (flysSessionFactory == null) {
147 String user = 40 flysSessionFactory =
148 Config.getStringXPath(XPATH_USER, DEFAULT_USER); 41 createSessionFactory(FLYSCredentials.getInstance());
149 String password =
150 Config.getStringXPath(XPATH_PASSWORD, DEFAULT_PASSWORD);
151 String dialect =
152 Config.getStringXPath(XPATH_DIALECT, DEFAULT_DIALECT);
153 String driver =
154 Config.getStringXPath(XPATH_DRIVER, DEFAULT_DRIVER);
155 String url =
156 Config.getStringXPath(XPATH_URL, DEFAULT_URL);
157
158 sessionFactory = createSessionFactory(
159 user, password, dialect, driver, url);
160 } 42 }
161 return sessionFactory; 43 return flysSessionFactory;
162 } 44 }
163 45
164 public static SessionFactory createSessionFactory() { 46 public static SessionFactory createSessionFactory() {
165 return createSessionFactory( 47 return createSessionFactory(FLYSCredentials.getDefault());
166 DEFAULT_USER, 48 }
167 DEFAULT_PASSWORD, 49
168 DEFAULT_DIALECT, 50 public static synchronized SessionFactory getSedDBSessionFactory() {
169 DEFAULT_DRIVER, 51 if (sedDBSessionFactory == null) {
170 DEFAULT_URL); 52 sedDBSessionFactory =
53 createSessionFactory(SedDBCredentials.getInstance());
54 }
55 return sedDBSessionFactory;
56 }
57
58 public static SessionFactory createSedDBSessionFactory() {
59 return createSessionFactory(SedDBCredentials.getDefault());
171 } 60 }
172 61
173 public static SessionFactory createSessionFactory( 62 public static SessionFactory createSessionFactory(
174 String user, 63 Credentials credentials
175 String password,
176 String dialect,
177 String driver,
178 String url
179 ) { 64 ) {
180 Configuration cfg = createConfiguration( 65 Configuration cfg = createConfiguration(credentials);
181 user, password, dialect, driver, url);
182 66
183 SessionFactory factory = cfg.buildSessionFactory(); 67 SessionFactory factory = cfg.buildSessionFactory();
184 68
185 if (ENABLE_JMX) { 69 if (ENABLE_JMX) {
186 registerAsMBean(factory); 70 registerAsMBean(factory);
189 log.info("No JMX support for hibernate."); 73 log.info("No JMX support for hibernate.");
190 } 74 }
191 75
192 return factory; 76 return factory;
193 } 77 }
194
195 78
196 public static void registerAsMBean(SessionFactory factory) { 79 public static void registerAsMBean(SessionFactory factory) {
197 80
198 StatisticsService statsMBean = new StatisticsService(); 81 StatisticsService statsMBean = new StatisticsService();
199 statsMBean.setSessionFactory(factory); 82 statsMBean.setSessionFactory(factory);
219 catch (NotCompliantMBeanException ncmbe) { 102 catch (NotCompliantMBeanException ncmbe) {
220 log.warn(ncmbe, ncmbe); 103 log.warn(ncmbe, ncmbe);
221 } 104 }
222 } 105 }
223 106
224
225 public static Configuration createConfiguration() { 107 public static Configuration createConfiguration() {
226 return createConfiguration( 108 return createConfiguration(FLYSCredentials.getInstance());
227 DEFAULT_USER,
228 DEFAULT_PASSWORD,
229 DEFAULT_DIALECT,
230 DEFAULT_DRIVER,
231 DEFAULT_URL);
232 } 109 }
233 110
234 public static Configuration createConfiguration( 111 public static Configuration createConfiguration(
235 String user, 112 Credentials credentials
236 String password,
237 String dialect,
238 String driver,
239 String url
240 ) { 113 ) {
241 Configuration cfg = new Configuration(); 114 Configuration cfg = new Configuration();
242 115
243 // TODO: Use package reflection here. 116 for (Class clazz: credentials.getClasses()) {
244 cfg.addAnnotatedClass(Annotation.class); 117 cfg.addAnnotatedClass(clazz);
245 cfg.addAnnotatedClass(AnnotationType.class); 118 }
246 cfg.addAnnotatedClass(Attribute.class);
247 cfg.addAnnotatedClass(BedHeightEpoch.class);
248 cfg.addAnnotatedClass(BedHeightEpochValue.class);
249 cfg.addAnnotatedClass(BedHeightSingle.class);
250 cfg.addAnnotatedClass(BedHeightSingleValue.class);
251 cfg.addAnnotatedClass(BedHeightType.class);
252 cfg.addAnnotatedClass(Building.class);
253 cfg.addAnnotatedClass(Catchment.class);
254 cfg.addAnnotatedClass(CrossSection.class);
255 cfg.addAnnotatedClass(CrossSectionLine.class);
256 cfg.addAnnotatedClass(CrossSectionPoint.class);
257 cfg.addAnnotatedClass(CrossSectionTrack.class);
258 cfg.addAnnotatedClass(Depth.class);
259 cfg.addAnnotatedClass(DGM.class);
260 cfg.addAnnotatedClass(DischargeTable.class);
261 cfg.addAnnotatedClass(DischargeTableValue.class);
262 cfg.addAnnotatedClass(DischargeZone.class);
263 cfg.addAnnotatedClass(Edge.class);
264 cfg.addAnnotatedClass(ElevationModel.class);
265 cfg.addAnnotatedClass(Fixpoint.class);
266 cfg.addAnnotatedClass(Floodplain.class);
267 cfg.addAnnotatedClass(Floodmaps.class);
268 cfg.addAnnotatedClass(FlowVelocityMeasurement.class);
269 cfg.addAnnotatedClass(FlowVelocityMeasurementValue.class);
270 cfg.addAnnotatedClass(FlowVelocityModel.class);
271 cfg.addAnnotatedClass(FlowVelocityModelValue.class);
272 cfg.addAnnotatedClass(Gauge.class);
273 cfg.addAnnotatedClass(GaugeLocation.class);
274 cfg.addAnnotatedClass(GrainFraction.class);
275 cfg.addAnnotatedClass(Hws.class);
276 cfg.addAnnotatedClass(HydrBoundary.class);
277 cfg.addAnnotatedClass(HydrBoundaryPoly.class);
278 cfg.addAnnotatedClass(HYK.class);
279 cfg.addAnnotatedClass(HYKEntry.class);
280 cfg.addAnnotatedClass(HYKFormation.class);
281 cfg.addAnnotatedClass(HYKFlowZoneType.class);
282 cfg.addAnnotatedClass(HYKFlowZone.class);
283 cfg.addAnnotatedClass(Line.class);
284 cfg.addAnnotatedClass(LocationSystem.class);
285 cfg.addAnnotatedClass(MainValueType.class);
286 cfg.addAnnotatedClass(MorphologicalWidth.class);
287 cfg.addAnnotatedClass(MorphologicalWidthValue.class);
288 cfg.addAnnotatedClass(NamedMainValue.class);
289 cfg.addAnnotatedClass(MainValue.class);
290 cfg.addAnnotatedClass(Position.class);
291 cfg.addAnnotatedClass(Range.class);
292 cfg.addAnnotatedClass(River.class);
293 cfg.addAnnotatedClass(RiverAxis.class);
294 cfg.addAnnotatedClass(RiverAxisKm.class);
295 cfg.addAnnotatedClass(SedimentDensity.class);
296 cfg.addAnnotatedClass(SedimentDensityValue.class);
297 cfg.addAnnotatedClass(SedimentYield.class);
298 cfg.addAnnotatedClass(SedimentYieldValue.class);
299 cfg.addAnnotatedClass(SQRelation.class);
300 cfg.addAnnotatedClass(SQRelationValue.class);
301 cfg.addAnnotatedClass(TimeInterval.class);
302 cfg.addAnnotatedClass(Unit.class);
303 cfg.addAnnotatedClass(Waterlevel.class);
304 cfg.addAnnotatedClass(WaterlevelDifference.class);
305 cfg.addAnnotatedClass(WaterlevelDifferenceColumn.class);
306 cfg.addAnnotatedClass(WaterlevelDifferenceValue.class);
307 cfg.addAnnotatedClass(WaterlevelQRange.class);
308 cfg.addAnnotatedClass(WaterlevelValue.class);
309 cfg.addAnnotatedClass(WstColumn.class);
310 cfg.addAnnotatedClass(WstColumnQRange.class);
311 cfg.addAnnotatedClass(WstColumnValue.class);
312 cfg.addAnnotatedClass(Wst.class);
313 cfg.addAnnotatedClass(WstQRange.class);
314 119
315 if (log.isDebugEnabled()) { 120 if (log.isDebugEnabled()) {
316 log.debug("user: " + user); 121 log.debug("user: " + credentials.getUser());
317 log.debug("dialect: " + dialect); 122 log.debug("dialect: " + credentials.getDialect());
318 log.debug("driver: " + driver); 123 log.debug("driver: " + credentials.getDriver());
319 log.debug("url: " + url); 124 log.debug("url: " + credentials.getUrl());
320 } 125 }
321 126
322 Properties props = new Properties(); 127 Properties props = new Properties();
323 128
324 // We rely on our own connection pool 129 // We rely on our own connection pool
325 props.setProperty( 130 props.setProperty(
326 "hibernate.connection.provider_class", 131 "hibernate.connection.provider_class",
327 "org.hibernate.connection.DBCPConnectionProvider"); 132 "org.hibernate.connection.DBCPConnectionProvider");
328 133
329 props.setProperty(Environment.DIALECT, dialect); 134 props.setProperty(Environment.DIALECT, credentials.getDialect());
330 props.setProperty(Environment.USER, user); 135 props.setProperty(Environment.USER, credentials.getUser());
331 props.setProperty(Environment.PASS, password); 136 props.setProperty(Environment.PASS, credentials.getPassword());
332 props.setProperty(Environment.DRIVER, driver); 137 props.setProperty(Environment.DRIVER, credentials.getDriver());
333 props.setProperty(Environment.URL, url); 138 props.setProperty(Environment.URL, credentials.getUrl());
334 139
335 cfg.mergeProperties(props); 140 cfg.mergeProperties(props);
336 141
337 return cfg; 142 return cfg;
338 } 143 }

http://dive4elements.wald.intevation.org