Skip to content
Snippets Groups Projects
Commit 8c519303 authored by jakubs's avatar jakubs
Browse files

BIS-169 default validation query only for postgres

SVN: 26630
parent e10da7b4
No related branches found
No related tags found
No related merge requests found
...@@ -45,7 +45,7 @@ public class BasicDataSourceFactory implements IDataSourceFactory ...@@ -45,7 +45,7 @@ public class BasicDataSourceFactory implements IDataSourceFactory
@Override @Override
public final DataSource createDataSource(final String driver, final String url, public final DataSource createDataSource(final String driver, final String url,
final String owner, final String password) final String owner, final String password, final String validationQuery)
{ {
final BasicDataSource dataSource = new BasicDataSource(); final BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(driver); dataSource.setDriverClassName(driver);
...@@ -55,7 +55,7 @@ public class BasicDataSourceFactory implements IDataSourceFactory ...@@ -55,7 +55,7 @@ public class BasicDataSourceFactory implements IDataSourceFactory
dataSource.setMaxIdle(maxIdle); dataSource.setMaxIdle(maxIdle);
dataSource.setMaxActive(maxActive); dataSource.setMaxActive(maxActive);
dataSource.setMaxWait(maxWait); dataSource.setMaxWait(maxWait);
dataSource.setValidationQuery("SELECT 1"); dataSource.setValidationQuery(validationQuery);
return dataSource; return dataSource;
} }
......
...@@ -131,7 +131,8 @@ public class DatabaseConfigurationContext implements DisposableBean ...@@ -131,7 +131,8 @@ public class DatabaseConfigurationContext implements DisposableBean
{ {
final String dsDriver = getDriver(); final String dsDriver = getDriver();
final String url = getDatabaseURL(); final String url = getDatabaseURL();
return dataSourceFactory.createDataSource(dsDriver, url, owner, password); final String validationQuery = getValidationQuery();
return dataSourceFactory.createDataSource(dsDriver, url, owner, password, validationQuery);
} }
/** /**
...@@ -157,6 +158,11 @@ public class DatabaseConfigurationContext implements DisposableBean ...@@ -157,6 +158,11 @@ public class DatabaseConfigurationContext implements DisposableBean
return databaseEngine.getDriverClass(); return databaseEngine.getDriverClass();
} }
private final String getValidationQuery() throws ConfigurationFailureException
{
checkDatabaseEngine();
return databaseEngine.getValidationQuery();
}
/** /**
* Returns user name of the administrator. * Returns user name of the administrator.
* *
...@@ -241,7 +247,7 @@ public class DatabaseConfigurationContext implements DisposableBean ...@@ -241,7 +247,7 @@ public class DatabaseConfigurationContext implements DisposableBean
{ {
adminDataSource = adminDataSource =
dataSourceFactory.createDataSource(getDriver(), getAdminURL(), getAdminUser(), dataSourceFactory.createDataSource(getDriver(), getAdminURL(), getAdminUser(),
getAdminPassword()); getAdminPassword(), getValidationQuery());
} }
return adminDataSource; return adminDataSource;
} }
......
...@@ -21,13 +21,13 @@ import java.text.MessageFormat; ...@@ -21,13 +21,13 @@ import java.text.MessageFormat;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.jdbc.support.lob.DefaultLobHandler; import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobHandler;
import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
import ch.systemsx.cisd.common.db.ISequencerHandler; import ch.systemsx.cisd.common.db.ISequencerHandler;
import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
import ch.systemsx.cisd.common.db.PostgreSQLSequencerHandler; import ch.systemsx.cisd.common.db.PostgreSQLSequencerHandler;
import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
import ch.systemsx.cisd.dbmigration.h2.H2DAOFactory; import ch.systemsx.cisd.dbmigration.h2.H2DAOFactory;
import ch.systemsx.cisd.dbmigration.postgresql.PostgreSQLDAOFactory; import ch.systemsx.cisd.dbmigration.postgresql.PostgreSQLDAOFactory;
...@@ -40,11 +40,11 @@ public enum DatabaseEngine ...@@ -40,11 +40,11 @@ public enum DatabaseEngine
{ {
POSTGRESQL("postgresql", "org.postgresql.Driver", PostgreSQLDAOFactory.class, POSTGRESQL("postgresql", "org.postgresql.Driver", PostgreSQLDAOFactory.class,
new DefaultLobHandler(), new PostgreSQLSequencerHandler(), "jdbc:postgresql:{0}", new DefaultLobHandler(), new PostgreSQLSequencerHandler(), "jdbc:postgresql:{0}",
"jdbc:postgresql:{0}{1}", "//localhost/", "postgres"), "jdbc:postgresql:{0}{1}", "//localhost/", "postgres", "SELECT 1"),
H2("h2", "org.h2.Driver", H2DAOFactory.class, new DefaultLobHandler(), H2("h2", "org.h2.Driver", H2DAOFactory.class, new DefaultLobHandler(),
new PostgreSQLSequencerHandler(), "jdbc:h2:{0}{1};DB_CLOSE_DELAY=-1", new PostgreSQLSequencerHandler(), "jdbc:h2:{0}{1};DB_CLOSE_DELAY=-1",
"jdbc:h2:{0}{1};DB_CLOSE_DELAY=-1", "file:db/", "sa"); "jdbc:h2:{0}{1};DB_CLOSE_DELAY=-1", "file:db/", "sa", null);
private static Map<String, DatabaseEngine> engines = initEngineMap(); private static Map<String, DatabaseEngine> engines = initEngineMap();
...@@ -68,10 +68,12 @@ public enum DatabaseEngine ...@@ -68,10 +68,12 @@ public enum DatabaseEngine
private final String defaultAdminUser; private final String defaultAdminUser;
private final String validationQuery;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
DatabaseEngine(String code, String driver, Class<?> daoFactoryClass, LobHandler lobHandler, DatabaseEngine(String code, String driver, Class<?> daoFactoryClass, LobHandler lobHandler,
ISequencerHandler sequenceHandler, String adminUrlTemplate, String urlTemplate, ISequencerHandler sequenceHandler, String adminUrlTemplate, String urlTemplate,
String defaultURLHostPart, String defaultAdminUser) String defaultURLHostPart, String defaultAdminUser, String validationQuery)
{ {
assert code != null; assert code != null;
assert driver != null; assert driver != null;
...@@ -91,6 +93,7 @@ public enum DatabaseEngine ...@@ -91,6 +93,7 @@ public enum DatabaseEngine
this.driverClass = driver; this.driverClass = driver;
this.lobHandler = lobHandler; this.lobHandler = lobHandler;
this.sequenceHandler = sequenceHandler; this.sequenceHandler = sequenceHandler;
this.validationQuery = validationQuery;
this.daoFactoryClass = (Class<ch.systemsx.cisd.dbmigration.IDAOFactory>) daoFactoryClass; this.daoFactoryClass = (Class<ch.systemsx.cisd.dbmigration.IDAOFactory>) daoFactoryClass;
try try
{ {
...@@ -143,8 +146,8 @@ public enum DatabaseEngine ...@@ -143,8 +146,8 @@ public enum DatabaseEngine
} }
/** /**
* @param urlHostPartOrNull The host part of the URL, or <code>null</code>, if the default * @param urlHostPartOrNull The host part of the URL, or <code>null</code>, if the default host
* host part should be used. * part should be used.
* @param databaseName The name of the database (may be ignored for the admin URL, depending on * @param databaseName The name of the database (may be ignored for the admin URL, depending on
* the database engine) * the database engine)
* @return The admin URL of the db. * @return The admin URL of the db.
...@@ -162,9 +165,14 @@ public enum DatabaseEngine ...@@ -162,9 +165,14 @@ public enum DatabaseEngine
return defaultAdminUser; return defaultAdminUser;
} }
public String getValidationQuery()
{
return validationQuery;
}
/** /**
* @param urlHostPartOrNull The host part of the URL, or <code>null</code>, if the default * @param urlHostPartOrNull The host part of the URL, or <code>null</code>, if the default host
* host part should be used. * part should be used.
* @param databaseName The name of the database. * @param databaseName The name of the database.
* @return The URL of the db. * @return The URL of the db.
*/ */
......
...@@ -31,7 +31,8 @@ public interface IDataSourceFactory ...@@ -31,7 +31,8 @@ public interface IDataSourceFactory
/** /**
* Creates a data source for the specified database credentials. * Creates a data source for the specified database credentials.
*/ */
public DataSource createDataSource(String driver, String url, String owner, String password); public DataSource createDataSource(String driver, String url, String owner, String password,
String validationQuery);
/** /**
* @see BasicDataSource#setMaxIdle(int) * @see BasicDataSource#setMaxIdle(int)
......
...@@ -53,6 +53,8 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean ...@@ -53,6 +53,8 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean
static final String MAX_ACTIVE_KEY = "database-max-active"; static final String MAX_ACTIVE_KEY = "database-max-active";
static final String VALIDATION_QUERY_KEY = "validation-query";
private IDataSourceFactory dataSourceFactory = new BasicDataSourceFactory(); private IDataSourceFactory dataSourceFactory = new BasicDataSourceFactory();
private DataSource dataSource; private DataSource dataSource;
...@@ -65,14 +67,17 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean ...@@ -65,14 +67,17 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean
private final String password; private final String password;
private final String validationQuery;
// for testing // for testing
public SimpleDatabaseConfigurationContext(String driverClassName, String url, String username, public SimpleDatabaseConfigurationContext(String driverClassName, String url, String username,
String password) String password, String validationQuery)
{ {
this.driverClassName = driverClassName; this.driverClassName = driverClassName;
this.url = url; this.url = url;
this.username = username; this.username = username;
this.password = password; this.password = password;
this.validationQuery = validationQuery;
} }
public SimpleDatabaseConfigurationContext(Properties properties) public SimpleDatabaseConfigurationContext(Properties properties)
...@@ -95,6 +100,8 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean ...@@ -95,6 +100,8 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean
{ {
dataSourceFactory.setMaxIdle(maxIdle); dataSourceFactory.setMaxIdle(maxIdle);
} }
this.validationQuery = PropertyUtils.getProperty(properties, VALIDATION_QUERY_KEY);
} }
/** /**
...@@ -114,7 +121,8 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean ...@@ -114,7 +121,8 @@ public class SimpleDatabaseConfigurationContext implements DisposableBean
*/ */
private final DataSource createDataSource() private final DataSource createDataSource()
{ {
return dataSourceFactory.createDataSource(driverClassName, url, username, password); return dataSourceFactory.createDataSource(driverClassName, url, username, password,
validationQuery);
} }
/** Closes opened database connections. */ /** Closes opened database connections. */
......
...@@ -8,7 +8,8 @@ public class SqlMigrationDataSourceFactory implements IDataSourceFactory ...@@ -8,7 +8,8 @@ public class SqlMigrationDataSourceFactory implements IDataSourceFactory
{ {
@Override @Override
public DataSource createDataSource(String driver, String url, String owner, String password) public DataSource createDataSource(String driver, String url, String owner, String password,
String validationQuery)
{ {
return new SqlMigrationDataSource(driver, url, owner, password); return new SqlMigrationDataSource(driver, url, owner, password);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment