diff 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
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java	Thu Jun 14 10:06:34 2012 +0000
+++ b/flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java	Thu Jun 14 15:39:42 2012 +0000
@@ -1,184 +1,68 @@
 package de.intevation.flys.backend;
 
-import de.intevation.artifacts.common.utils.Config;
+import java.lang.management.ManagementFactory;
 
-import java.lang.management.ManagementFactory;
 import java.util.Properties;
 
 import javax.management.InstanceAlreadyExistsException;
-import javax.management.MalformedObjectNameException;
 import javax.management.MBeanRegistrationException;
 import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
 import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
 
+import org.apache.log4j.Logger;
+
 import org.hibernate.SessionFactory;
 
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+
 import org.hibernate.impl.SessionFactoryImpl;
 
 import org.hibernate.jmx.StatisticsService;
 
-import org.hibernate.cfg.Configuration;
-import org.hibernate.cfg.Environment;
-
-import de.intevation.flys.model.Annotation;
-import de.intevation.flys.model.AnnotationType;
-import de.intevation.flys.model.Attribute;
-import de.intevation.flys.model.BedHeightEpoch;
-import de.intevation.flys.model.BedHeightEpochValue;
-import de.intevation.flys.model.BedHeightSingle;
-import de.intevation.flys.model.BedHeightSingleValue;
-import de.intevation.flys.model.BedHeightType;
-import de.intevation.flys.model.Building;
-import de.intevation.flys.model.Catchment;
-import de.intevation.flys.model.CrossSection;
-import de.intevation.flys.model.CrossSectionLine;
-import de.intevation.flys.model.CrossSectionPoint;
-import de.intevation.flys.model.CrossSectionTrack;
-import de.intevation.flys.model.Depth;
-import de.intevation.flys.model.DGM;
-import de.intevation.flys.model.DischargeTable;
-import de.intevation.flys.model.DischargeTableValue;
-import de.intevation.flys.model.DischargeZone;
-import de.intevation.flys.model.Edge;
-import de.intevation.flys.model.ElevationModel;
-import de.intevation.flys.model.Fixpoint;
-import de.intevation.flys.model.Floodmaps;
-import de.intevation.flys.model.Floodplain;
-import de.intevation.flys.model.FlowVelocityMeasurement;
-import de.intevation.flys.model.FlowVelocityMeasurementValue;
-import de.intevation.flys.model.FlowVelocityModel;
-import de.intevation.flys.model.FlowVelocityModelValue;
-import de.intevation.flys.model.Gauge;
-import de.intevation.flys.model.GaugeLocation;
-import de.intevation.flys.model.GrainFraction;
-import de.intevation.flys.model.Hws;
-import de.intevation.flys.model.HydrBoundary;
-import de.intevation.flys.model.HydrBoundaryPoly;
-import de.intevation.flys.model.HYK;
-import de.intevation.flys.model.HYKEntry;
-import de.intevation.flys.model.HYKFormation;
-import de.intevation.flys.model.HYKFlowZoneType;
-import de.intevation.flys.model.HYKFlowZone;
-import de.intevation.flys.model.Line;
-import de.intevation.flys.model.LocationSystem;
-import de.intevation.flys.model.MainValueType;
-import de.intevation.flys.model.MorphologicalWidth;
-import de.intevation.flys.model.MorphologicalWidthValue;
-import de.intevation.flys.model.NamedMainValue;
-import de.intevation.flys.model.MainValue;
-import de.intevation.flys.model.Position;
-import de.intevation.flys.model.Range;
-import de.intevation.flys.model.River;
-import de.intevation.flys.model.RiverAxis;
-import de.intevation.flys.model.RiverAxisKm;
-import de.intevation.flys.model.SedimentDensity;
-import de.intevation.flys.model.SedimentDensityValue;
-import de.intevation.flys.model.SedimentYield;
-import de.intevation.flys.model.SedimentYieldValue;
-import de.intevation.flys.model.SQRelation;
-import de.intevation.flys.model.SQRelationValue;
-import de.intevation.flys.model.TimeInterval;
-import de.intevation.flys.model.Unit;
-import de.intevation.flys.model.Waterlevel;
-import de.intevation.flys.model.WaterlevelDifference;
-import de.intevation.flys.model.WaterlevelDifferenceColumn;
-import de.intevation.flys.model.WaterlevelDifferenceValue;
-import de.intevation.flys.model.WaterlevelQRange;
-import de.intevation.flys.model.WaterlevelValue;
-import de.intevation.flys.model.WstColumn;
-import de.intevation.flys.model.WstColumnQRange;
-import de.intevation.flys.model.WstColumnValue;
-import de.intevation.flys.model.Wst;
-import de.intevation.flys.model.WstQRange;
-
-import org.apache.log4j.Logger;
-
 public final class SessionFactoryProvider
 {
     private static Logger log = Logger.getLogger(SessionFactoryProvider.class);
 
-    public static final String XPATH_USER =
-        "/artifact-database/backend-database/user/text()";
-
-    public static final String XPATH_PASSWORD =
-        "/artifact-database/backend-database/password/text()";
-
-    public static final String XPATH_DIALECT =
-        "/artifact-database/backend-database/dialect/text()";
-
-    public static final String XPATH_DRIVER =
-        "/artifact-database/backend-database/driver/text()";
-
-    public static final String XPATH_URL =
-        "/artifact-database/backend-database/url/text()";
-
-    public static final String DEFAULT_USER =
-        System.getProperty("flys.backend.user", "flys");
-
-    public static final String DEFAULT_PASSWORD =
-        System.getProperty("flys.backend.password", "flys");
-
-    public static final String DEFAULT_DIALECT =
-        System.getProperty(
-            "flys.backend.dialect",
-            "org.hibernate.dialect.PostgreSQLDialect");
-
-    public static final String DEFAULT_DRIVER =
-        System.getProperty(
-            "flys.backend.driver",
-            "org.postgresql.Driver");
-
-    public static final String DEFAULT_URL =
-        System.getProperty(
-            "flys.backend.url",
-            "jdbc:postgresql://localhost:5432/flys");
-
     public static final boolean ENABLE_JMX =
         Boolean.getBoolean("flys.backend.enablejmx");
 
-    private static SessionFactory sessionFactory;
+    private static SessionFactory flysSessionFactory;
+    private static SessionFactory sedDBSessionFactory;
 
     private SessionFactoryProvider() {
     }
 
     public static synchronized SessionFactory getSessionFactory() {
-        if (sessionFactory == null) {
-            String user =
-                Config.getStringXPath(XPATH_USER, DEFAULT_USER);
-            String password =
-                Config.getStringXPath(XPATH_PASSWORD, DEFAULT_PASSWORD);
-            String dialect =
-                Config.getStringXPath(XPATH_DIALECT, DEFAULT_DIALECT);
-            String driver =
-                Config.getStringXPath(XPATH_DRIVER, DEFAULT_DRIVER);
-            String url =
-                Config.getStringXPath(XPATH_URL, DEFAULT_URL);
-
-            sessionFactory = createSessionFactory(
-                user, password, dialect, driver, url);
+        if (flysSessionFactory == null) {
+            flysSessionFactory =
+                createSessionFactory(FLYSCredentials.getInstance());
         }
-        return sessionFactory;
+        return flysSessionFactory;
     }
 
     public static SessionFactory createSessionFactory() {
-        return createSessionFactory(
-            DEFAULT_USER,
-            DEFAULT_PASSWORD,
-            DEFAULT_DIALECT,
-            DEFAULT_DRIVER,
-            DEFAULT_URL);
+        return createSessionFactory(FLYSCredentials.getDefault());
+    }
+
+    public static synchronized SessionFactory getSedDBSessionFactory() {
+        if (sedDBSessionFactory == null) {
+            sedDBSessionFactory =
+                createSessionFactory(SedDBCredentials.getInstance());
+        }
+        return sedDBSessionFactory;
+    }
+
+    public static SessionFactory createSedDBSessionFactory() {
+        return createSessionFactory(SedDBCredentials.getDefault());
     }
 
     public static SessionFactory createSessionFactory(
-        String user,
-        String password,
-        String dialect,
-        String driver,
-        String url
+        Credentials credentials
     ) {
-        Configuration cfg = createConfiguration(
-            user, password, dialect, driver, url);
+        Configuration cfg = createConfiguration(credentials);
 
         SessionFactory factory = cfg.buildSessionFactory();
 
@@ -192,7 +76,6 @@
         return factory;
     }
 
-
     public static void registerAsMBean(SessionFactory factory) {
 
         StatisticsService statsMBean = new StatisticsService();
@@ -221,102 +104,24 @@
         }
     }
 
-
     public static Configuration createConfiguration() {
-        return createConfiguration(
-            DEFAULT_USER,
-            DEFAULT_PASSWORD,
-            DEFAULT_DIALECT,
-            DEFAULT_DRIVER,
-            DEFAULT_URL);
+        return createConfiguration(FLYSCredentials.getInstance());
     }
 
     public static Configuration createConfiguration(
-        String user,
-        String password,
-        String dialect,
-        String driver,
-        String url
+        Credentials credentials
     ) {
         Configuration cfg = new Configuration();
 
-        // TODO: Use package reflection here.
-        cfg.addAnnotatedClass(Annotation.class);
-        cfg.addAnnotatedClass(AnnotationType.class);
-        cfg.addAnnotatedClass(Attribute.class);
-        cfg.addAnnotatedClass(BedHeightEpoch.class);
-        cfg.addAnnotatedClass(BedHeightEpochValue.class);
-        cfg.addAnnotatedClass(BedHeightSingle.class);
-        cfg.addAnnotatedClass(BedHeightSingleValue.class);
-        cfg.addAnnotatedClass(BedHeightType.class);
-        cfg.addAnnotatedClass(Building.class);
-        cfg.addAnnotatedClass(Catchment.class);
-        cfg.addAnnotatedClass(CrossSection.class);
-        cfg.addAnnotatedClass(CrossSectionLine.class);
-        cfg.addAnnotatedClass(CrossSectionPoint.class);
-        cfg.addAnnotatedClass(CrossSectionTrack.class);
-        cfg.addAnnotatedClass(Depth.class);
-        cfg.addAnnotatedClass(DGM.class);
-        cfg.addAnnotatedClass(DischargeTable.class);
-        cfg.addAnnotatedClass(DischargeTableValue.class);
-        cfg.addAnnotatedClass(DischargeZone.class);
-        cfg.addAnnotatedClass(Edge.class);
-        cfg.addAnnotatedClass(ElevationModel.class);
-        cfg.addAnnotatedClass(Fixpoint.class);
-        cfg.addAnnotatedClass(Floodplain.class);
-        cfg.addAnnotatedClass(Floodmaps.class);
-        cfg.addAnnotatedClass(FlowVelocityMeasurement.class);
-        cfg.addAnnotatedClass(FlowVelocityMeasurementValue.class);
-        cfg.addAnnotatedClass(FlowVelocityModel.class);
-        cfg.addAnnotatedClass(FlowVelocityModelValue.class);
-        cfg.addAnnotatedClass(Gauge.class);
-        cfg.addAnnotatedClass(GaugeLocation.class);
-        cfg.addAnnotatedClass(GrainFraction.class);
-        cfg.addAnnotatedClass(Hws.class);
-        cfg.addAnnotatedClass(HydrBoundary.class);
-        cfg.addAnnotatedClass(HydrBoundaryPoly.class);
-        cfg.addAnnotatedClass(HYK.class);
-        cfg.addAnnotatedClass(HYKEntry.class);
-        cfg.addAnnotatedClass(HYKFormation.class);
-        cfg.addAnnotatedClass(HYKFlowZoneType.class);
-        cfg.addAnnotatedClass(HYKFlowZone.class);
-        cfg.addAnnotatedClass(Line.class);
-        cfg.addAnnotatedClass(LocationSystem.class);
-        cfg.addAnnotatedClass(MainValueType.class);
-        cfg.addAnnotatedClass(MorphologicalWidth.class);
-        cfg.addAnnotatedClass(MorphologicalWidthValue.class);
-        cfg.addAnnotatedClass(NamedMainValue.class);
-        cfg.addAnnotatedClass(MainValue.class);
-        cfg.addAnnotatedClass(Position.class);
-        cfg.addAnnotatedClass(Range.class);
-        cfg.addAnnotatedClass(River.class);
-        cfg.addAnnotatedClass(RiverAxis.class);
-        cfg.addAnnotatedClass(RiverAxisKm.class);
-        cfg.addAnnotatedClass(SedimentDensity.class);
-        cfg.addAnnotatedClass(SedimentDensityValue.class);
-        cfg.addAnnotatedClass(SedimentYield.class);
-        cfg.addAnnotatedClass(SedimentYieldValue.class);
-        cfg.addAnnotatedClass(SQRelation.class);
-        cfg.addAnnotatedClass(SQRelationValue.class);
-        cfg.addAnnotatedClass(TimeInterval.class);
-        cfg.addAnnotatedClass(Unit.class);
-        cfg.addAnnotatedClass(Waterlevel.class);
-        cfg.addAnnotatedClass(WaterlevelDifference.class);
-        cfg.addAnnotatedClass(WaterlevelDifferenceColumn.class);
-        cfg.addAnnotatedClass(WaterlevelDifferenceValue.class);
-        cfg.addAnnotatedClass(WaterlevelQRange.class);
-        cfg.addAnnotatedClass(WaterlevelValue.class);
-        cfg.addAnnotatedClass(WstColumn.class);
-        cfg.addAnnotatedClass(WstColumnQRange.class);
-        cfg.addAnnotatedClass(WstColumnValue.class);
-        cfg.addAnnotatedClass(Wst.class);
-        cfg.addAnnotatedClass(WstQRange.class);
+        for (Class clazz: credentials.getClasses()) {
+            cfg.addAnnotatedClass(clazz);
+        }
 
         if (log.isDebugEnabled()) {
-            log.debug("user: "    + user);
-            log.debug("dialect: " + dialect);
-            log.debug("driver: "  + driver);
-            log.debug("url: "     + url);
+            log.debug("user: "    + credentials.getUser());
+            log.debug("dialect: " + credentials.getDialect());
+            log.debug("driver: "  + credentials.getDriver());
+            log.debug("url: "     + credentials.getUrl());
         }
 
         Properties props = new Properties();
@@ -326,11 +131,11 @@
             "hibernate.connection.provider_class",
             "org.hibernate.connection.DBCPConnectionProvider");
 
-        props.setProperty(Environment.DIALECT, dialect);
-        props.setProperty(Environment.USER,    user);
-        props.setProperty(Environment.PASS,    password);
-        props.setProperty(Environment.DRIVER,  driver);
-        props.setProperty(Environment.URL,     url);
+        props.setProperty(Environment.DIALECT, credentials.getDialect());
+        props.setProperty(Environment.USER,    credentials.getUser());
+        props.setProperty(Environment.PASS,    credentials.getPassword());
+        props.setProperty(Environment.DRIVER,  credentials.getDriver());
+        props.setProperty(Environment.URL,     credentials.getUrl());
 
         cfg.mergeProperties(props);
 

http://dive4elements.wald.intevation.org