changeset 8470:c5a7aae52396

Added a validation SQL query to database backends. Enable it by storing something like "SELECT 1 FROM DUAL" in config under /artifact-database/backend-database/validation-query/text() or /artifact-database/seddb-database/validation-query/text().
author Sascha L. Teichmann <teichmann@intevation.de>
date Wed, 12 Nov 2014 13:31:53 +0100
parents 079147282650
children a846a3d910a0
files backend/src/main/java/org/dive4elements/river/backend/Credentials.java backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java backend/src/main/java/org/dive4elements/river/backend/SedDBCredentials.java backend/src/main/java/org/dive4elements/river/backend/SessionFactoryProvider.java backend/src/main/java/org/dive4elements/river/backend/utils/DBCPConnectionProvider.java
diffstat 5 files changed, 57 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/backend/src/main/java/org/dive4elements/river/backend/Credentials.java	Thu Nov 06 15:16:37 2014 +0100
+++ b/backend/src/main/java/org/dive4elements/river/backend/Credentials.java	Wed Nov 12 13:31:53 2014 +0100
@@ -16,6 +16,7 @@
     protected String   driver;
     protected String   url;
     protected String   connectionInitSqls;
+    protected String   validationQuery;
     protected Class [] classes;
 
     public Credentials() {
@@ -28,6 +29,7 @@
         String   driver,
         String   url,
         String   connectionInitSqls,
+        String   validationQuery,
         Class [] classes
     ) {
         this.user               = user;
@@ -36,6 +38,7 @@
         this.driver             = driver;
         this.url                = url;
         this.connectionInitSqls = connectionInitSqls;
+        this.validationQuery    = validationQuery;
         this.classes            = classes;
     }
 
@@ -79,6 +82,14 @@
         this.url = url;
     }
 
+    public String getValidationQuery() {
+        return validationQuery;
+    }
+
+    public void setValidationQuery(String validationQuery) {
+        this.validationQuery = validationQuery;
+    }
+
     public String getConnectionInitSqls() {
         return connectionInitSqls;
     }
--- a/backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java	Thu Nov 06 15:16:37 2014 +0100
+++ b/backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java	Wed Nov 12 13:31:53 2014 +0100
@@ -108,6 +108,9 @@
     public static final String XPATH_CONNECTION_INIT_SQLS =
         "/artifact-database/backend-database/connection-init-sqls/text()";
 
+    public static final String XPATH_VALIDATION_QUERY =
+        "/artifact-database/backend-database/validation-query/text()";
+
     public static final String DEFAULT_USER =
         System.getProperty("flys.backend.user", "flys");
 
@@ -133,6 +136,10 @@
         System.getProperty(
             "flys.backend.connection.init.sqls");
 
+    public static final String DEFAULT_VALIDATION_QUERY =
+        System.getProperty(
+            "flys.backend.connection.validation.query");
+
     public static final Class [] CLASSES = {
         Annotation.class,
         AnnotationType.class,
@@ -221,10 +228,12 @@
         String dialect,
         String driver,
         String url,
-        String connectionInitSqls
+        String connectionInitSqls,
+        String validationQuery
     ) {
         super(
-            user, password, dialect, driver, url, connectionInitSqls, CLASSES);
+            user, password, dialect, driver, url,
+            connectionInitSqls, validationQuery, CLASSES);
     }
 
     private static Credentials instance;
@@ -245,9 +254,13 @@
                 Config.getStringXPath(
                     XPATH_CONNECTION_INIT_SQLS,
                     DEFAULT_CONNECTION_INIT_SQLS);
+            String validationQuery =
+                Config.getStringXPath(
+                    XPATH_VALIDATION_QUERY,
+                    DEFAULT_VALIDATION_QUERY);
 
             instance = new FLYSCredentials(
-                user, password, dialect, driver, url, connectionInitSqls);
+                user, password, dialect, driver, url, connectionInitSqls, validationQuery);
         }
         return instance;
     }
@@ -259,7 +272,8 @@
             DEFAULT_DIALECT,
             DEFAULT_DRIVER,
             DEFAULT_URL,
-            DEFAULT_CONNECTION_INIT_SQLS);
+            DEFAULT_CONNECTION_INIT_SQLS,
+            DEFAULT_VALIDATION_QUERY);
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/backend/src/main/java/org/dive4elements/river/backend/SedDBCredentials.java	Thu Nov 06 15:16:37 2014 +0100
+++ b/backend/src/main/java/org/dive4elements/river/backend/SedDBCredentials.java	Wed Nov 12 13:31:53 2014 +0100
@@ -84,6 +84,9 @@
     public static final String XPATH_CONNECTION_INIT_SQLS =
         "/artifact-database/seddb-database/connection-init-sqls/text()";
 
+    public static final String XPATH_VALIDATION_QUERY =
+        "/artifact-database/seddb-database/validation-query/text()";
+
     public static final String DEFAULT_USER =
         System.getProperty("flys.seddb.user", "seddb");
 
@@ -109,6 +112,10 @@
         System.getProperty(
             "flys.seddb.connection.init.sqls");
 
+    public static final String DEFAULT_VALIDATION_QUERY =
+        System.getProperty(
+            "flys.seddb.connection.validation.query");
+
     public static final Class [] CLASSES = {
         BezugspegelgewId.class,
         Bezugspegelgew.class,
@@ -175,10 +182,12 @@
         String dialect,
         String driver,
         String url,
-        String connectionInitSqls
+        String connectionInitSqls,
+        String validationQuery
     ) {
         super(
-            user, password, dialect, driver, url, connectionInitSqls, CLASSES);
+            user, password, dialect, driver, url,
+            connectionInitSqls, validationQuery, CLASSES);
     }
 
     public static synchronized Credentials getInstance() {
@@ -197,9 +206,14 @@
                 Config.getStringXPath(
                     XPATH_CONNECTION_INIT_SQLS,
                     DEFAULT_CONNECTION_INIT_SQLS);
+            String validationQuery =
+                Config.getStringXPath(
+                    XPATH_VALIDATION_QUERY,
+                    DEFAULT_VALIDATION_QUERY);
 
             instance = new SedDBCredentials(
-                user, password, dialect, driver, url, connectionInitSqls);
+                user, password, dialect, driver, url,
+                connectionInitSqls, validationQuery);
         }
         return instance;
     }
@@ -211,7 +225,8 @@
             DEFAULT_DIALECT,
             DEFAULT_DRIVER,
             DEFAULT_URL,
-            DEFAULT_CONNECTION_INIT_SQLS);
+            DEFAULT_CONNECTION_INIT_SQLS,
+            DEFAULT_VALIDATION_QUERY);
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/backend/src/main/java/org/dive4elements/river/backend/SessionFactoryProvider.java	Thu Nov 06 15:16:37 2014 +0100
+++ b/backend/src/main/java/org/dive4elements/river/backend/SessionFactoryProvider.java	Wed Nov 12 13:31:53 2014 +0100
@@ -144,6 +144,10 @@
         if (connectionInitSqls != null) {
             props.setProperty("connectionInitSqls", connectionInitSqls);
         }
+        String validationQuery = credentials.getValidationQuery();
+        if (validationQuery != null) {
+            props.setProperty("validationQuery", validationQuery);
+        }
 
         cfg.mergeProperties(props);
 
--- a/backend/src/main/java/org/dive4elements/river/backend/utils/DBCPConnectionProvider.java	Thu Nov 06 15:16:37 2014 +0100
+++ b/backend/src/main/java/org/dive4elements/river/backend/utils/DBCPConnectionProvider.java	Wed Nov 12 13:31:53 2014 +0100
@@ -211,6 +211,11 @@
                 StringTokenizer tokenizer = new StringTokenizer(connectionInitSqls, ";");
                 ds.setConnectionInitSqls(Collections.list(tokenizer));
             }
+
+            String validationQuery = props.getProperty("validationQuery");
+            if (validationQuery != null) {
+                ds.setValidationQuery(validationQuery);
+            }
             // The BasicDataSource has lazy initialization
             // borrowing a connection will start the DataSource
             // and make sure it is configured correctly.

http://dive4elements.wald.intevation.org