From 96629c7dc51b24d2e0fcbbfa4946e52425cd4a6c Mon Sep 17 00:00:00 2001 From: Keith Donald Date: Sat, 9 May 2009 22:27:05 +0000 Subject: [PATCH] h2 embedded db support; updated formatting conventions not to auto-format javadoc; added hsqldb and h2 to jdbc maven pom as optional deps --- ...matter.prefs => eclipse-code-formatter.xml | 114 +++++++++--------- .../.settings/org.eclipse.jdt.core.prefs | 12 +- org.springframework.jdbc/.classpath | 1 + .../.settings/org.eclipse.jdt.core.prefs | 8 +- org.springframework.jdbc/ivy.xml | 3 +- org.springframework.jdbc/pom.xml | 14 +++ .../AbstractEmbeddedDatabaseConfigurer.java | 49 ++++++++ .../embedded/EmbeddedDatabaseConfigurer.java | 3 +- .../EmbeddedDatabaseConfigurerFactory.java | 17 +-- .../embedded/EmbeddedDatabaseFactory.java | 29 ++--- .../embedded/EmbeddedDatabaseType.java | 3 +- .../H2EmbeddedDatabaseConfigurer.java | 51 ++++++++ .../HsqlEmbeddedDatabaseConfigurer.java | 40 ++---- .../jdbc/datasource/embedded/JdbcUtils.java | 5 +- .../jdbc/config/spring-jdbc-3.0.xsd | 17 ++- .../config/JdbcNamespaceIntegrationTest.java | 13 +- .../EmbeddedDatabaseBuilderTests.java | 30 +++-- .../jdbc/config/jdbc-config.xml | 5 + 18 files changed, 270 insertions(+), 144 deletions(-) rename eclipse-code-formatter.prefs => eclipse-code-formatter.xml (99%) create mode 100644 org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.java create mode 100644 org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/H2EmbeddedDatabaseConfigurer.java rename org.springframework.jdbc/src/test/{java => resources}/org/springframework/jdbc/config/jdbc-config.xml (72%) diff --git a/eclipse-code-formatter.prefs b/eclipse-code-formatter.xml similarity index 99% rename from eclipse-code-formatter.prefs rename to eclipse-code-formatter.xml index 4a5d03e156..15f94e1843 100644 --- a/eclipse-code-formatter.prefs +++ b/eclipse-code-formatter.xml @@ -4,13 +4,13 @@ - + - + - + @@ -21,71 +21,71 @@ - + - - + + - + - - + + - - - + + + - - + + - + - + - + - + - + - + - + @@ -98,93 +98,93 @@ - + - + - + + - - + - - + + - + - + - + - - + - + + - + - + - + - + - + - - + + @@ -197,69 +197,69 @@ - + - - + + - + - + - + - + - + - - - + + + - + - - - + - + + + diff --git a/org.springframework.core/.settings/org.eclipse.jdt.core.prefs b/org.springframework.core/.settings/org.eclipse.jdt.core.prefs index 36408f531a..b3ad295594 100644 --- a/org.springframework.core/.settings/org.eclipse.jdt.core.prefs +++ b/org.springframework.core/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,4 @@ -#Mon Mar 30 13:51:02 EDT 2009 +#Sat May 09 18:07:13 EDT 2009 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 @@ -55,13 +55,13 @@ org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=false org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_html=false +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false +org.eclipse.jdt.core.formatter.comment.format_line_comments=false org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false org.eclipse.jdt.core.formatter.comment.indent_root_tags=false org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert diff --git a/org.springframework.jdbc/.classpath b/org.springframework.jdbc/.classpath index 0336a77928..d5a8c94a2a 100644 --- a/org.springframework.jdbc/.classpath +++ b/org.springframework.jdbc/.classpath @@ -16,5 +16,6 @@ + diff --git a/org.springframework.jdbc/.settings/org.eclipse.jdt.core.prefs b/org.springframework.jdbc/.settings/org.eclipse.jdt.core.prefs index f1017bd5c6..b3ad295594 100644 --- a/org.springframework.jdbc/.settings/org.eclipse.jdt.core.prefs +++ b/org.springframework.jdbc/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,4 @@ -#Wed May 06 02:42:56 EDT 2009 +#Sat May 09 18:07:13 EDT 2009 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 @@ -55,11 +55,11 @@ org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_block_comments=false org.eclipse.jdt.core.formatter.comment.format_header=false org.eclipse.jdt.core.formatter.comment.format_html=false -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false +org.eclipse.jdt.core.formatter.comment.format_line_comments=false org.eclipse.jdt.core.formatter.comment.format_source_code=true org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false org.eclipse.jdt.core.formatter.comment.indent_root_tags=false diff --git a/org.springframework.jdbc/ivy.xml b/org.springframework.jdbc/ivy.xml index 16facba880..60e5ac1f49 100644 --- a/org.springframework.jdbc/ivy.xml +++ b/org.springframework.jdbc/ivy.xml @@ -30,7 +30,8 @@ - + + diff --git a/org.springframework.jdbc/pom.xml b/org.springframework.jdbc/pom.xml index f7a6fadfa0..0f038ca7e2 100644 --- a/org.springframework.jdbc/pom.xml +++ b/org.springframework.jdbc/pom.xml @@ -55,6 +55,20 @@ ${project.version} compile + + hsqldb + hsqldb + 1.8.0.7 + compile + true + + + com.h2database + h2 + 1.0.71 + compile + true + junit junit diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.java new file mode 100644 index 0000000000..5f71a793dd --- /dev/null +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/AbstractEmbeddedDatabaseConfigurer.java @@ -0,0 +1,49 @@ +/* + * 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 java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; + +import javax.sql.DataSource; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Base class for {@link EmbeddedDatabaseConfigurer} implementations providing common shutdown behaviour. + * @author Oliver Gierke + */ +abstract class AbstractEmbeddedDatabaseConfigurer implements EmbeddedDatabaseConfigurer { + + private static final Log logger = LogFactory.getLog(AbstractEmbeddedDatabaseConfigurer.class); + + public void shutdown(DataSource dataSource, String databaseName) { + Connection connection = JdbcUtils.getConnection(dataSource); + Statement stmt = null; + try { + stmt = connection.createStatement(); + stmt.execute("SHUTDOWN"); + } catch (SQLException e) { + if (logger.isWarnEnabled()) { + logger.warn("Could not shutdown embedded database", e); + } + } finally { + JdbcUtils.closeStatement(stmt); + } + } +} 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 3594187f52..e99ded5ce9 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 @@ -34,7 +34,8 @@ public interface EmbeddedDatabaseConfigurer { /** * Shutdown the embedded database instance that backs dataSource. * @param dataSource the data source + * @param databaseName the name of the database being shutdown */ - void shutdown(DataSource dataSource); + void shutdown(DataSource dataSource, String databaseName); } 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 d071ce6305..65906f7357 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,21 +18,25 @@ package org.springframework.jdbc.datasource.embedded; import org.springframework.util.Assert; /** - * Maps well-known {@link EmbeddedDatabaseType embedded database types} to - * {@link EmbeddedDatabaseConfigurer} strategies. + * Maps well-known {@link EmbeddedDatabaseType embedded database types} to {@link EmbeddedDatabaseConfigurer} + * strategies. * @author Keith Donald + * @author Oliver Gierke */ final class EmbeddedDatabaseConfigurerFactory { - private EmbeddedDatabaseConfigurerFactory() { + private EmbeddedDatabaseConfigurerFactory() { } - + public static EmbeddedDatabaseConfigurer getConfigurer(EmbeddedDatabaseType type) throws IllegalStateException { Assert.notNull(type, "The EmbeddedDatabaseType is required"); try { - if (type == EmbeddedDatabaseType.HSQL) { + switch (type) { + case HSQL: return HsqlEmbeddedDatabaseConfigurer.getInstance(); - } else { + case H2: + return H2EmbeddedDatabaseConfigurer.getInstance(); + default: throw new UnsupportedOperationException("Other embedded database types not yet supported"); } } catch (ClassNotFoundException e) { @@ -40,5 +44,4 @@ final class EmbeddedDatabaseConfigurerFactory { + "] 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 56be3cd8cf..9834bab087 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 @@ -26,8 +26,8 @@ import org.apache.commons.logging.LogFactory; import org.springframework.util.Assert; /** - * Creates a {@link EmbeddedDatabase} instance. - * Callers are guaranteed that the returned database has been fully initialized and populated. + * Creates a {@link EmbeddedDatabase} instance. Callers are guaranteed that the returned database has been fully + * initialized and populated. *

* Can be configured:
* Call {@link #setDatabaseName(String)} to change the name of the database.
@@ -54,8 +54,8 @@ public class EmbeddedDatabaseFactory { private DataSource dataSource; /** - * Creates a default {@link EmbeddedDatabaseFactory}. Calling {@link #getDatabase()} will create a embedded HSQL - * database of name 'testdb'. + * Creates a default {@link EmbeddedDatabaseFactory}. + * Calling {@link #getDatabase()} will create a embedded HSQL database of name 'testdb'. */ public EmbeddedDatabaseFactory() { setDatabaseName("testdb"); @@ -82,8 +82,8 @@ public class EmbeddedDatabaseFactory { } /** - * Sets the strategy that will be used to configure the embedded database instance. Call this when you wish to use - * an embedded database type not already supported. + * Sets the strategy that will be used to configure the embedded database instance. + * Call this when you wish to use an embedded database type not already supported. * @param configurer the embedded database configurer */ public void setDatabaseConfigurer(EmbeddedDatabaseConfigurer configurer) { @@ -100,8 +100,8 @@ public class EmbeddedDatabaseFactory { } /** - * Sets the factory to use to create the DataSource instance that connects to the embedded database. Defaults to - * {@link SimpleDriverDataSourceFactory}. + * Sets the factory to use to create the DataSource instance that connects to the embedded database + * Defaults to {@link SimpleDriverDataSourceFactory}. * @param dataSourceFactory the data source factory */ public void setDataSourceFactory(DataSourceFactory dataSourceFactory) { @@ -124,9 +124,8 @@ public class EmbeddedDatabaseFactory { // subclassing hooks /** - * 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. + * 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 @@ -152,14 +151,12 @@ public class EmbeddedDatabaseFactory { } /** - * 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. + * 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); + databaseConfigurer.shutdown(dataSource, databaseName); dataSource = null; } } diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseType.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseType.java index 30085eb3eb..052e53d722 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseType.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseType.java @@ -18,7 +18,8 @@ package org.springframework.jdbc.datasource.embedded; /** * A supported embedded database type. * @author Keith Donald + * @author Oliver Gierke */ public enum EmbeddedDatabaseType { - HSQL; + HSQL, H2; } 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 new file mode 100644 index 0000000000..4c7ed5ecbb --- /dev/null +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/H2EmbeddedDatabaseConfigurer.java @@ -0,0 +1,51 @@ +/* + * 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.util.ClassUtils; + +/** + * Initializes a HSQL embedded database instance. + * Call {@link #getInstance()} to get the singleton instance of this class. * + * @author Oliver Gierke + */ +final class H2EmbeddedDatabaseConfigurer extends AbstractEmbeddedDatabaseConfigurer { + + private static H2EmbeddedDatabaseConfigurer INSTANCE; + + private H2EmbeddedDatabaseConfigurer() { + } + + /** + * Get the singleton {@link HsqlEmbeddedDatabaseConfigurer} instance. + * @return the configurer + * @throws ClassNotFoundException if HSQL is not on the classpath + */ + public static synchronized H2EmbeddedDatabaseConfigurer getInstance() throws ClassNotFoundException { + if (INSTANCE == null) { + ClassUtils.forName("org.h2.Driver", H2EmbeddedDatabaseConfigurer.class.getClassLoader()); + INSTANCE = new H2EmbeddedDatabaseConfigurer(); + } + return INSTANCE; + } + + public void configureConnectionProperties(ConnectionProperties properties, String databaseName) { + properties.setDriverClass(org.h2.Driver.class); + properties.setUrl(String.format("jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1", databaseName)); + properties.setUsername("sa"); + properties.setPassword(""); + } +} \ 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 874b778731..c650d32093 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 @@ -15,31 +15,21 @@ */ package org.springframework.jdbc.datasource.embedded; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; - -import javax.sql.DataSource; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; 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 + * @authoe Oliver Gierke */ -final class HsqlEmbeddedDatabaseConfigurer implements EmbeddedDatabaseConfigurer { - - private static final Log logger = LogFactory.getLog(HsqlEmbeddedDatabaseConfigurer.class); +final class HsqlEmbeddedDatabaseConfigurer extends AbstractEmbeddedDatabaseConfigurer { private static HsqlEmbeddedDatabaseConfigurer INSTANCE; - - private HsqlEmbeddedDatabaseConfigurer() { + + private HsqlEmbeddedDatabaseConfigurer() { } - + /** * Get the singleton {@link HsqlEmbeddedDatabaseConfigurer} instance. * @return the configurer @@ -52,27 +42,11 @@ final class HsqlEmbeddedDatabaseConfigurer implements EmbeddedDatabaseConfigurer } return INSTANCE; } - + public void configureConnectionProperties(ConnectionProperties properties, String databaseName) { properties.setDriverClass(org.hsqldb.jdbcDriver.class); properties.setUrl("jdbc:hsqldb:mem:" + databaseName); properties.setUsername("sa"); - properties.setPassword(""); + properties.setPassword(""); } - - public void shutdown(DataSource dataSource) { - Connection connection = JdbcUtils.getConnection(dataSource); - Statement stmt = null; - try { - stmt = connection.createStatement(); - stmt.execute("SHUTDOWN"); - } catch (SQLException e) { - if (logger.isWarnEnabled()) { - logger.warn("Could not shutdown in-memory HSQL database", e); - } - } finally { - JdbcUtils.closeStatement(stmt); - } - } - } diff --git a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/JdbcUtils.java b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/JdbcUtils.java index bd80bf18f5..866ba89c58 100644 --- a/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/JdbcUtils.java +++ b/org.springframework.jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/JdbcUtils.java @@ -11,8 +11,9 @@ import org.apache.commons.logging.LogFactory; import org.springframework.jdbc.CannotGetJdbcConnectionException; /** - * Helper JDBC utilities used by other classes in this package. There is some duplication here with JdbcUtils in - * jdbc.support package. We may want to consider simply using that. Package private for now. + * Helper JDBC utilities used by other classes in this package. + * Note there is some duplication here with JdbcUtils in jdbc.support package. + * We may want to consider simply using that at some point. * @author Keith Donald */ final class JdbcUtils { diff --git a/org.springframework.jdbc/src/main/resources/org/springframework/jdbc/config/spring-jdbc-3.0.xsd b/org.springframework.jdbc/src/main/resources/org/springframework/jdbc/config/spring-jdbc-3.0.xsd index d8adc7a453..8b8296f039 100644 --- a/org.springframework.jdbc/src/main/resources/org/springframework/jdbc/config/spring-jdbc-3.0.xsd +++ b/org.springframework.jdbc/src/main/resources/org/springframework/jdbc/config/spring-jdbc-3.0.xsd @@ -30,7 +30,7 @@ - + @@ -57,7 +57,20 @@ - + + + + + + + + + + diff --git a/org.springframework.jdbc/src/test/java/org/springframework/jdbc/config/JdbcNamespaceIntegrationTest.java b/org.springframework.jdbc/src/test/java/org/springframework/jdbc/config/JdbcNamespaceIntegrationTest.java index cddcff52c2..ee25e3df4f 100644 --- a/org.springframework.jdbc/src/test/java/org/springframework/jdbc/config/JdbcNamespaceIntegrationTest.java +++ b/org.springframework.jdbc/src/test/java/org/springframework/jdbc/config/JdbcNamespaceIntegrationTest.java @@ -1,6 +1,6 @@ package org.springframework.jdbc.config; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; import javax.sql.DataSource; @@ -12,9 +12,14 @@ public class JdbcNamespaceIntegrationTest { @Test public void testCreateEmbeddedDatabase() throws Exception { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("org/springframework/jdbc/config/jdbc-config.xml"); - DataSource ds = context.getBean("dataSource", DataSource.class); - JdbcTemplate t = new JdbcTemplate(ds); + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "org/springframework/jdbc/config/jdbc-config.xml"); + assertCorrectSetup(context.getBean("dataSource", DataSource.class)); + assertCorrectSetup(context.getBean("h2dataSource", DataSource.class)); + } + + private void assertCorrectSetup(DataSource dataSource) { + JdbcTemplate t = new JdbcTemplate(dataSource); assertEquals(1, t.queryForInt("select count(*) from T_TEST")); } } 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 4f16d9adb1..5768553948 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 @@ -1,28 +1,31 @@ package org.springframework.jdbc.datasource.embedded; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.Assert.*; +import static org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType.*; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; public class EmbeddedDatabaseBuilderTests { - + @Test public void testBuildDefaults() { EmbeddedDatabase db = EmbeddedDatabaseBuilder.buildDefault(); - JdbcTemplate template = new JdbcTemplate(db); - assertEquals("Keith", template.queryForObject("select NAME from T_TEST", String.class)); - db.shutdown(); + assertDatabaseCreatedAndShutdown(db); } - + @Test public void testBuild() { EmbeddedDatabaseBuilder builder = EmbeddedDatabaseBuilder.relativeTo(getClass()); EmbeddedDatabase db = builder.script("db-schema.sql").script("db-test-data.sql").build(); - JdbcTemplate template = new JdbcTemplate(db); - assertEquals("Keith", template.queryForObject("select NAME from T_TEST", String.class)); - db.shutdown(); + 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(); + assertDatabaseCreatedAndShutdown(db); } @Test @@ -34,4 +37,11 @@ public class EmbeddedDatabaseBuilderTests { } } + 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 diff --git a/org.springframework.jdbc/src/test/java/org/springframework/jdbc/config/jdbc-config.xml b/org.springframework.jdbc/src/test/resources/org/springframework/jdbc/config/jdbc-config.xml similarity index 72% rename from org.springframework.jdbc/src/test/java/org/springframework/jdbc/config/jdbc-config.xml rename to org.springframework.jdbc/src/test/resources/org/springframework/jdbc/config/jdbc-config.xml index 5ac4fa8773..3d27bb6d54 100644 --- a/org.springframework.jdbc/src/test/java/org/springframework/jdbc/config/jdbc-config.xml +++ b/org.springframework.jdbc/src/test/resources/org/springframework/jdbc/config/jdbc-config.xml @@ -10,4 +10,9 @@ + + + + + -- GitLab