# HG changeset patch # User Sascha L. Teichmann # Date 1415795513 -3600 # Node ID c5a7aae523966f7f89a0ea68babbace6c9e04416 # Parent 07914728265025448da4ce8c78cabd7e5e5acf41 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(). diff -r 079147282650 -r c5a7aae52396 backend/src/main/java/org/dive4elements/river/backend/Credentials.java --- 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; } diff -r 079147282650 -r c5a7aae52396 backend/src/main/java/org/dive4elements/river/backend/FLYSCredentials.java --- 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 : diff -r 079147282650 -r c5a7aae52396 backend/src/main/java/org/dive4elements/river/backend/SedDBCredentials.java --- 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 : diff -r 079147282650 -r c5a7aae52396 backend/src/main/java/org/dive4elements/river/backend/SessionFactoryProvider.java --- 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); diff -r 079147282650 -r c5a7aae52396 backend/src/main/java/org/dive4elements/river/backend/utils/DBCPConnectionProvider.java --- 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.