diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/CannotReadScriptException.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/CannotReadScriptException.java index 2341b6d1c2..1fdeb0d6a2 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/CannotReadScriptException.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/CannotReadScriptException.java @@ -1,9 +1,33 @@ +/* + * Copyright 2002-2009 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.springframework.jdbc.datasource.embedded; import org.springframework.core.io.support.EncodedResource; +/** + * Thrown by {@link ResourceDatabasePopulator} if one of its SQL scripts could not be read during population. + * @author Keith Donald + */ public class CannotReadScriptException extends RuntimeException { + /** + * Creates a new cannot read script exception. + * @param resource the resource that could not be read from + * @param cause the underlying cause of the resource access failure + */ public CannotReadScriptException(EncodedResource resource, Throwable cause) { super("Cannot read SQL script from " + resource, cause); } diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/DataSourceFactory.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/DataSourceFactory.java index 0313294a4f..8a67f996be 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/DataSourceFactory.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/DataSourceFactory.java @@ -20,7 +20,7 @@ import javax.sql.DataSource; import org.springframework.jdbc.datasource.SimpleDriverDataSource; /** - * A factory for a kind of DataSource, such as a {@link SimpleDriverDataSource} or connection pool such as Apache DBCP or c3p0. + * A factory for DataSource implementation, such as a {@link SimpleDriverDataSource} or connection pool such as Apache DBCP or c3p0. * Call {@link #getConnectionProperties()} to configure normalized DataSource properties before calling {@link #getDataSource()} to actually get the configured DataSource instance. * @author Keith Donald */ diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurer.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurer.java index 98e16b0b72..7c2e4d5f2c 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurer.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurer.java @@ -19,7 +19,7 @@ import javax.sql.DataSource; /** * Encapsulates the configuration required to create, connect to, and shutdown a specific type of embedded database such as HSQLdb or H2. - * Create a implementation for each database type we wish to support. + * Create a implementation for each database type you wish to support; for example HSQL, H2, or some other type. * @author Keith Donald */ public interface EmbeddedDatabaseConfigurer { diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java index fa618d1895..80e7b04a04 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java @@ -18,22 +18,27 @@ package org.springframework.jdbc.datasource.embedded; import org.springframework.util.Assert; /** - * Package private factory for mapping well-known embedded database types to database configurer strategies. + * Package private factory for mapping well-known {@link EmbeddedDatabaseType embedded database types} to + * {@link EmbeddedDatabaseConfigurer} strategies. * @author Keith Donald */ -class EmbeddedDatabaseConfigurerFactory { +final class EmbeddedDatabaseConfigurerFactory { + private EmbeddedDatabaseConfigurerFactory() { + } + public static EmbeddedDatabaseConfigurer getConfigurer(EmbeddedDatabaseType type) throws IllegalStateException { Assert.notNull(type, "The EmbeddedDatabaseType is required"); try { if (type == EmbeddedDatabaseType.HSQL) { return HsqlEmbeddedDatabaseConfigurer.getInstance(); } else { - throw new UnsupportedOperationException("Other types not yet supported"); + throw new UnsupportedOperationException("Other embedded database types not yet supported"); } } catch (ClassNotFoundException e) { - throw new IllegalStateException("Drivers for test database type [" + type + "] are not available in the classpath", e); + throw new IllegalStateException("Drivers for test database type [" + type + + "] are not available in the classpath", e); } } - + } diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java index db86771f20..d0b89015d4 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactory.java @@ -116,14 +116,19 @@ public class EmbeddedDatabaseFactory { */ public EmbeddedDatabase getDatabase() { if (dataSource == null) { - initDataSource(); + initDatabase(); } return new EmbeddedDataSourceProxy(dataSource); } // subclassing hooks - protected void initDataSource() { + /** + * Hook to initialize the embedded database. + * Subclasses may call to force initialization. + * After calling this method, {@link #getDataSource()} returns the DataSource providing connectivity to the db. + */ + protected void initDatabase() { // create the embedded database source first if (logger.isInfoEnabled()) { logger.info("Created embedded database '" + databaseName + "'"); @@ -136,11 +141,23 @@ public class EmbeddedDatabaseFactory { } } + /** + * Hook that gets the datasource that provides the connectivity to the embedded database. + * Returns null if the datasource has not been initialized or the database has been shutdown. + * Subclasses may call to access the datasource instance directly. + * @return the datasource + */ protected DataSource getDataSource() { return dataSource; } - protected void shutdownDataSource() { + /** + * Hook to shutdown the embedded database. + * Subclasses may call to force shutdown. + * After calling, {@link #getDataSource()} returns null. + * Does nothing if no embedded database has been initialized. + */ + protected void shutdownDatabase() { if (dataSource != null) { databaseConfigurer.shutdown(dataSource); dataSource = null; @@ -200,7 +217,7 @@ public class EmbeddedDatabaseFactory { } public void shutdown() { - shutdownDataSource(); + shutdownDatabase(); } } diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryBean.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryBean.java index e6682fe238..758bb1c90d 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryBean.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryBean.java @@ -32,7 +32,7 @@ import org.springframework.beans.factory.InitializingBean; public class EmbeddedDatabaseFactoryBean extends EmbeddedDatabaseFactory implements FactoryBean, InitializingBean, DisposableBean { public void afterPropertiesSet() throws Exception { - initDataSource(); + initDatabase(); } public DataSource getObject() throws Exception { @@ -48,7 +48,7 @@ public class EmbeddedDatabaseFactoryBean extends EmbeddedDatabaseFactory impleme } public void destroy() throws Exception { - shutdownDataSource(); + shutdownDatabase(); } } 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 ccf0c756d3..874b778731 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 @@ -25,12 +25,26 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.util.ClassUtils; -public class HsqlEmbeddedDatabaseConfigurer implements EmbeddedDatabaseConfigurer { +/** + * Initializes a HSQL embedded database instance. + * Call {@link #getInstance()} to get the singleton instance of this class. + * + * @author Keith Donald + */ +final class HsqlEmbeddedDatabaseConfigurer implements EmbeddedDatabaseConfigurer { private static final Log logger = LogFactory.getLog(HsqlEmbeddedDatabaseConfigurer.class); private static HsqlEmbeddedDatabaseConfigurer INSTANCE; + private HsqlEmbeddedDatabaseConfigurer() { + } + + /** + * Get the singleton {@link HsqlEmbeddedDatabaseConfigurer} instance. + * @return the configurer + * @throws ClassNotFoundException if HSQL is not on the classpath + */ public static synchronized HsqlEmbeddedDatabaseConfigurer getInstance() throws ClassNotFoundException { if (INSTANCE == null) { ClassUtils.forName("org.hsqldb.jdbcDriver", HsqlEmbeddedDatabaseConfigurer.class.getClassLoader()); diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/SimpleDriverDataSourceFactory.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/SimpleDriverDataSourceFactory.java index 3b4ca73ebe..22d370f1e6 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/SimpleDriverDataSourceFactory.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/SimpleDriverDataSourceFactory.java @@ -4,13 +4,12 @@ import javax.sql.DataSource; import org.springframework.jdbc.datasource.SimpleDriverDataSource; -public class SimpleDriverDataSourceFactory implements DataSourceFactory { +final class SimpleDriverDataSourceFactory implements DataSourceFactory { private SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); public ConnectionProperties getConnectionProperties() { return new ConnectionProperties() { - public void setDriverClass(Class driverClass) { dataSource.setDriverClass(driverClass); } @@ -26,13 +25,11 @@ public class SimpleDriverDataSourceFactory implements DataSourceFactory { public void setPassword(String password) { dataSource.setPassword(password); } - }; } public DataSource getDataSource() { return dataSource; } - }