From 69646339093dfc36ec2dc84a211d3b695bff6cbd Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 19 May 2009 22:42:03 +0000 Subject: [PATCH] reflective loading of driver classes --- .../H2EmbeddedDatabaseConfigurer.java | 24 ++++++++++++------- .../HsqlEmbeddedDatabaseConfigurer.java | 22 +++++++++++------ 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/H2EmbeddedDatabaseConfigurer.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/H2EmbeddedDatabaseConfigurer.java index 67262fe3c42..77440b3cf5d 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/H2EmbeddedDatabaseConfigurer.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/H2EmbeddedDatabaseConfigurer.java @@ -13,19 +13,25 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.jdbc.datasource.embedded; import org.springframework.util.ClassUtils; /** * Initializes a H2 embedded database instance. - * Call {@link #getInstance()} to get the singleton instance of this class. * + * Call {@link #getInstance()} to get the singleton instance of this class. + * * @author Oliver Gierke + * @since 3.0 */ final class H2EmbeddedDatabaseConfigurer extends AbstractEmbeddedDatabaseConfigurer { private static H2EmbeddedDatabaseConfigurer INSTANCE; + private final Class driverClass; + + /** * Get the singleton {@link H2EmbeddedDatabaseConfigurer} instance. * @return the configurer @@ -33,20 +39,22 @@ final class H2EmbeddedDatabaseConfigurer extends AbstractEmbeddedDatabaseConfigu */ public static synchronized H2EmbeddedDatabaseConfigurer getInstance() throws ClassNotFoundException { if (INSTANCE == null) { - ClassUtils.forName("org.h2.Driver", H2EmbeddedDatabaseConfigurer.class.getClassLoader()); - INSTANCE = new H2EmbeddedDatabaseConfigurer(); + INSTANCE = new H2EmbeddedDatabaseConfigurer( + ClassUtils.forName("org.h2.Driver", H2EmbeddedDatabaseConfigurer.class.getClassLoader())); } return INSTANCE; } + + public H2EmbeddedDatabaseConfigurer(Class driverClass) { + this.driverClass = driverClass; + } + public void configureConnectionProperties(ConnectionProperties properties, String databaseName) { - properties.setDriverClass(org.h2.Driver.class); + properties.setDriverClass(this.driverClass); properties.setUrl(String.format("jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1", databaseName)); properties.setUsername("sa"); properties.setPassword(""); } - - private H2EmbeddedDatabaseConfigurer() { - } -} \ No newline at end of file +} diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/HsqlEmbeddedDatabaseConfigurer.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/HsqlEmbeddedDatabaseConfigurer.java index df69bc718ea..18047430d1e 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/HsqlEmbeddedDatabaseConfigurer.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/HsqlEmbeddedDatabaseConfigurer.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.jdbc.datasource.embedded; import org.springframework.util.ClassUtils; @@ -20,13 +21,18 @@ import org.springframework.util.ClassUtils; /** * Initializes a HSQL embedded database instance. * Call {@link #getInstance()} to get the singleton instance of this class. + * * @author Keith Donald * @author Oliver Gierke + * @since 3.0 */ final class HsqlEmbeddedDatabaseConfigurer extends AbstractEmbeddedDatabaseConfigurer { private static HsqlEmbeddedDatabaseConfigurer INSTANCE; + private final Class driverClass; + + /** * Get the singleton {@link HsqlEmbeddedDatabaseConfigurer} instance. * @return the configurer @@ -34,20 +40,22 @@ final class HsqlEmbeddedDatabaseConfigurer extends AbstractEmbeddedDatabaseConfi */ public static synchronized HsqlEmbeddedDatabaseConfigurer getInstance() throws ClassNotFoundException { if (INSTANCE == null) { - ClassUtils.forName("org.hsqldb.jdbcDriver", HsqlEmbeddedDatabaseConfigurer.class.getClassLoader()); - INSTANCE = new HsqlEmbeddedDatabaseConfigurer(); + INSTANCE = new HsqlEmbeddedDatabaseConfigurer( + ClassUtils.forName("org.hsqldb.jdbcDriver", HsqlEmbeddedDatabaseConfigurer.class.getClassLoader())); } return INSTANCE; } + + private HsqlEmbeddedDatabaseConfigurer(Class driverClass) { + this.driverClass = driverClass; + } + public void configureConnectionProperties(ConnectionProperties properties, String databaseName) { - properties.setDriverClass(org.hsqldb.jdbcDriver.class); + properties.setDriverClass(this.driverClass); properties.setUrl("jdbc:hsqldb:mem:" + databaseName); properties.setUsername("sa"); properties.setPassword(""); } - - private HsqlEmbeddedDatabaseConfigurer() { - } -} \ No newline at end of file +}