diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilder.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilder.java index 5b0e224294..8393a8602f 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilder.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilder.java @@ -16,7 +16,6 @@ package org.springframework.jdbc.datasource.embedded; -import org.springframework.core.io.ClassRelativeResourceLoader; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; @@ -27,7 +26,7 @@ import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; *

Usage example: *

  * EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
- * EmbeddedDatabase db = builder.script("schema.sql").script("data.sql").build();
+ * EmbeddedDatabase db = builder.setType(H2).addScript("schema.sql").addScript("data.sql").build();
  * db.shutdown();
  * 
* @@ -69,7 +68,7 @@ public class EmbeddedDatabaseBuilder { * @param databaseName the database name * @return this, for fluent call chaining */ - public EmbeddedDatabaseBuilder name(String databaseName) { + public EmbeddedDatabaseBuilder setName(String databaseName) { this.databaseFactory.setDatabaseName(databaseName); return this; } @@ -80,7 +79,7 @@ public class EmbeddedDatabaseBuilder { * @param databaseType the database type * @return this, for fluent call chaining */ - public EmbeddedDatabaseBuilder type(EmbeddedDatabaseType databaseType) { + public EmbeddedDatabaseBuilder setType(EmbeddedDatabaseType databaseType) { this.databaseFactory.setDatabaseType(databaseType); return this; } @@ -90,7 +89,7 @@ public class EmbeddedDatabaseBuilder { * @param sqlResource the sql resource location * @return this, for fluent call chaining */ - public EmbeddedDatabaseBuilder script(String sqlResource) { + public EmbeddedDatabaseBuilder addScript(String sqlResource) { this.databasePopulator.addScript(this.resourceLoader.getResource(sqlResource)); return this; } @@ -102,26 +101,5 @@ public class EmbeddedDatabaseBuilder { public EmbeddedDatabase build() { return this.databaseFactory.getDatabase(); } - - - /** - * Factory method that builds a default EmbeddedDatabase instance. - *

The default instance is HSQL with a schema created from "classpath:schema.sql" - * and data loaded from "classpath:data.sql". - * @return an embedded database - */ - public static EmbeddedDatabase buildDefault() { - return new EmbeddedDatabaseBuilder().script("schema.sql").script("data.sql").build(); - } - - /** - * Factory method that creates a EmbeddedDatabaseBuilder that loads SQL resources - * relative to the provided class. - * @param clazz the class to load relative to - * @return the embedded database builder - */ - public static EmbeddedDatabaseBuilder relativeTo(Class clazz) { - return new EmbeddedDatabaseBuilder(new ClassRelativeResourceLoader(clazz)); - } - + } diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabases.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabases.java new file mode 100644 index 0000000000..d529aa3967 --- /dev/null +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabases.java @@ -0,0 +1,56 @@ +/* + * 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.ClassRelativeResourceLoader; + +/** + * Convenience factory for constructing commonly used EmbeddedDatabase configurations. + * @author Keith Donald + */ +public final class EmbeddedDatabases { + + private EmbeddedDatabases() { + + } + + /** + * Factory method that creates a default EmbeddedDatabase instance. + *

The default instance is HQL populated with a schema loaded from classpath:schema.sql and data loaded from classpath:data.sql. + * @return an embedded database + */ + public static EmbeddedDatabase createDefault() { + return buildDefault(new EmbeddedDatabaseBuilder()); + } + + /** + * Factory method that creates a default HSQL EmbeddedDatabase instance. + *

The default instance is HQL populated with a schema loaded from schema.sql and data loaded from data.sql, where + * each .sql file location is relative to the specified class. + * @param clazz the class to load .sql resources relative to + * @return an embedded database + */ + public static EmbeddedDatabase createDefault(Class clazz) { + return buildDefault(new EmbeddedDatabaseBuilder(new ClassRelativeResourceLoader(clazz))); + } + + // internal helpers + + private static EmbeddedDatabase buildDefault(EmbeddedDatabaseBuilder builder) { + return builder.addScript("schema.sql").addScript("data.sql").build(); + } + +} diff --git a/org.springframework.jdbc/src/test/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilderTests.java b/org.springframework.jdbc/src/test/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilderTests.java index 78043d842b..3784ff00a9 100644 --- a/org.springframework.jdbc/src/test/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilderTests.java +++ b/org.springframework.jdbc/src/test/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseBuilderTests.java @@ -6,42 +6,37 @@ import static org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType. import static org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType.H2; import org.junit.Test; +import org.springframework.core.io.ClassRelativeResourceLoader; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.init.CannotReadScriptException; public class EmbeddedDatabaseBuilderTests { - @Test - public void testBuildDefaults() { - EmbeddedDatabase db = EmbeddedDatabaseBuilder.buildDefault(); - assertDatabaseCreatedAndShutdown(db); - } - @Test public void testBuild() { - EmbeddedDatabaseBuilder builder = EmbeddedDatabaseBuilder.relativeTo(getClass()); - EmbeddedDatabase db = builder.script("db-schema.sql").script("db-test-data.sql").build(); + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(new ClassRelativeResourceLoader(getClass())); + EmbeddedDatabase db = builder.addScript("db-schema.sql").addScript("db-test-data.sql").build(); assertDatabaseCreatedAndShutdown(db); } @Test public void testBuildH2() { - EmbeddedDatabaseBuilder builder = EmbeddedDatabaseBuilder.relativeTo(getClass()); - EmbeddedDatabase db = builder.type(H2).script("db-schema.sql").script("db-test-data.sql").build(); + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(new ClassRelativeResourceLoader(getClass())); + EmbeddedDatabase db = builder.setType(H2).addScript("db-schema.sql").addScript("db-test-data.sql").build(); assertDatabaseCreatedAndShutdown(db); } public void testBuildDerby() { - EmbeddedDatabaseBuilder builder = EmbeddedDatabaseBuilder.relativeTo(getClass()); - EmbeddedDatabase db = builder.type(DERBY).script("db-schema-derby.sql").script("db-test-data.sql").build(); + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(new ClassRelativeResourceLoader(getClass())); + EmbeddedDatabase db = builder.setType(DERBY).addScript("db-schema-derby.sql").addScript("db-test-data.sql").build(); assertDatabaseCreatedAndShutdown(db); } @Test public void testBuildNoSuchScript() { try { - new EmbeddedDatabaseBuilder().script("bogus.sql").build(); + new EmbeddedDatabaseBuilder().addScript("bogus.sql").build(); fail("Should have failed"); } catch (CannotReadScriptException e) { } diff --git a/org.springframework.jdbc/src/test/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabasesTests.java b/org.springframework.jdbc/src/test/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabasesTests.java new file mode 100644 index 0000000000..6ab2653cc0 --- /dev/null +++ b/org.springframework.jdbc/src/test/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabasesTests.java @@ -0,0 +1,22 @@ +package org.springframework.jdbc.datasource.embedded; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.springframework.jdbc.core.JdbcTemplate; + +public class EmbeddedDatabasesTests { + + @Test + public void testCreateDefault() { + EmbeddedDatabase db = EmbeddedDatabases.createDefault(); + assertDatabaseCreatedAndShutdown(db); + } + + private void assertDatabaseCreatedAndShutdown(EmbeddedDatabase db) { + JdbcTemplate template = new JdbcTemplate(db); + assertEquals("Keith", template.queryForObject("select NAME from T_TEST", String.class)); + db.shutdown(); + } + +} \ No newline at end of file