X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=system%2Fspring%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Fsystem%2Fspring%2Fcomponent%2FDatabaseTesterComponent.java;h=f4972f262f562e324f4d964d39fb68270bc61f51;hb=17775e14ecfb286e59f67117e5cee7e21e95ab1f;hp=b988107bf004f360bac9cee5fbc76007e0fb4816;hpb=478944e26d41297edc568d62207b0abccc217186;p=utils diff --git a/system/spring/src/test/java/org/wamblee/system/spring/component/DatabaseTesterComponent.java b/system/spring/src/test/java/org/wamblee/system/spring/component/DatabaseTesterComponent.java index b988107b..f4972f26 100644 --- a/system/spring/src/test/java/org/wamblee/system/spring/component/DatabaseTesterComponent.java +++ b/system/spring/src/test/java/org/wamblee/system/spring/component/DatabaseTesterComponent.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 the original author or authors. + * Copyright 2005-2010 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. @@ -12,40 +12,37 @@ * 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.wamblee.system.spring.component; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import javax.sql.DataSource; - import junit.framework.TestCase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.dbunit.DatabaseUnitException; + import org.dbunit.database.DatabaseConnection; import org.dbunit.database.DatabaseSequenceFilter; import org.dbunit.database.IDatabaseConnection; + import org.dbunit.dataset.FilteredDataSet; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.filter.ITableFilter; + import org.dbunit.operation.DatabaseOperation; + import org.hibernate.SessionFactory; + import org.springframework.beans.factory.NoSuchBeanDefinitionException; + import org.springframework.context.ApplicationContext; + import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceUtils; + import org.springframework.orm.hibernate3.HibernateTemplate; + import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; @@ -53,17 +50,30 @@ import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate; + import org.wamblee.test.spring.TestTransactionCallback; import org.wamblee.test.spring.TestTransactionCallbackWithoutResult; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import javax.sql.DataSource; + /** * Test support class for database testing. Currently, this still requires the * spring platform transaction manager and hibernate template. */ public class DatabaseTesterComponent { - private static final Log LOG = LogFactory - .getLog(DatabaseTesterComponent.class); + .getLog(DatabaseTesterComponent.class); /** * Schema pattern. @@ -73,33 +83,37 @@ public class DatabaseTesterComponent { /** * Cached spring application context. */ - private ApplicationContext _context; + private ApplicationContext context; - private HibernateTemplate _hibernateTemplate; + private HibernateTemplate hibernateTemplate; - private PlatformTransactionManager _transactionManager; + private PlatformTransactionManager transactionManager; - private DataSource _dataSource; + private DataSource dataSource; + /** + * Creates a new DatabaseTesterComponent object. + * + */ public DatabaseTesterComponent(HibernateTemplate aHibernateTemplate, - PlatformTransactionManager aTransactionManager, - DataSource aDataSource) { - _hibernateTemplate = aHibernateTemplate; - _transactionManager = aTransactionManager; - _dataSource = aDataSource; + PlatformTransactionManager aTransactionManager, DataSource aDataSource) { + hibernateTemplate = aHibernateTemplate; + transactionManager = aTransactionManager; + dataSource = aDataSource; } /** + * * @return Hibernate session factory. */ protected SessionFactory getSessionFactory() { - return _hibernateTemplate.getSessionFactory(); + return hibernateTemplate.getSessionFactory(); } /** * Performs common initialization for test cases: * * * @throws Exception @@ -121,13 +135,15 @@ public class DatabaseTesterComponent { } /** + * * @return Transaction manager */ protected PlatformTransactionManager getTransactionManager() { - return _transactionManager; + return transactionManager; } /** + * * @return Starts a new transaction. */ protected TransactionStatus getTransaction() { @@ -144,13 +160,12 @@ public class DatabaseTesterComponent { * @return Hibernate template. */ public HibernateTemplate getTemplate() { - return _hibernateTemplate; + return hibernateTemplate; } /** * Flushes the session. Should be called after some Hibernate work and * before JDBC is used to check results. - * */ public void flush() { getTemplate().flush(); @@ -160,7 +175,6 @@ public class DatabaseTesterComponent { * Flushes the session first and then removes all objects from the Session * cache. Should be called after some Hibernate work and before JDBC is used * to check results. - * */ public void clear() { flush(); @@ -189,7 +203,6 @@ public class DatabaseTesterComponent { } public void cleanDatabase() throws SQLException { - if (!isDatabaseConfigured()) { return; } @@ -198,10 +211,10 @@ public class DatabaseTesterComponent { try { IDatabaseConnection connection = new DatabaseConnection( - getConnection()); + getConnection()); ITableFilter filter = new DatabaseSequenceFilter(connection, tables); IDataSet dataset = new FilteredDataSet(filter, connection - .createDataSet(tables)); + .createDataSet(tables)); DatabaseOperation.DELETE_ALL.execute(connection, dataset); } catch (DatabaseUnitException e) { @@ -212,42 +225,49 @@ public class DatabaseTesterComponent { } /** + * + * * @throws SQLException */ public String[] getTableNames() throws SQLException { - List result = new ArrayList(); - LOG.debug("Getting database table names to clean (schema: '" - + SCHEMA_PATTERN + "'"); + LOG.debug("Getting database table names to clean (schema: '" + + SCHEMA_PATTERN + "'"); ResultSet tables = getConnection().getMetaData().getTables(null, - SCHEMA_PATTERN, "%", new String[] { "TABLE" }); + SCHEMA_PATTERN, "%", new String[] { "TABLE" }); + while (tables.next()) { String table = tables.getString("TABLE_NAME"); + // Make sure we do not touch hibernate's specific // infrastructure tables. if (!table.toLowerCase().startsWith("hibernate")) { result.add(table); - LOG.debug("Adding " + table - + " to list of tables to be cleaned."); + LOG.debug("Adding " + table + + " to list of tables to be cleaned."); } } + return (String[]) result.toArray(new String[0]); } /** - * @return + * + * * @throws SQLException */ public void emptyTables(List aTableList) throws SQLException { Iterator liTable = aTableList.iterator(); + while (liTable.hasNext()) { emptyTable((String) liTable.next()); } } /** - * @return + * + * * @throws SQLException */ public void emptyTable(String aTable) throws SQLException { @@ -255,7 +275,8 @@ public class DatabaseTesterComponent { } /** - * @return + * + * * @throws SQLException */ public void dropTable(String aTable) throws SQLException { @@ -267,6 +288,7 @@ public class DatabaseTesterComponent { * * @param aSql * SQL statement. + * * @return Return code of the corresponding JDBC call. */ public int executeSql(final String aSql) { @@ -282,6 +304,7 @@ public class DatabaseTesterComponent { * SQL statement. * @param aArg * Argument of the sql statement. + * * @return Return code of the corresponding JDBC call. */ public int executeSql(final String aSql, final Object aArg) { @@ -297,6 +320,7 @@ public class DatabaseTesterComponent { * SQL query to execute. * @param aArgs * Arguments. + * * @return Number of rows updated. */ public int executeSql(final String aSql, final Object[] aArgs) { @@ -320,11 +344,13 @@ public class DatabaseTesterComponent { * * @param aCallback * Callback to do your transactional work. + * * @return Result. */ public Object executeTransaction(TransactionCallback aCallback) { TransactionTemplate lTemplate = new TransactionTemplate( - getTransactionManager()); + getTransactionManager()); + return lTemplate.execute(aCallback); } @@ -336,7 +362,7 @@ public class DatabaseTesterComponent { */ public void executeTransaction(TransactionCallbackWithoutResult aCallback) { TransactionTemplate template = new TransactionTemplate( - getTransactionManager()); + getTransactionManager()); template.execute(aCallback); } @@ -346,7 +372,9 @@ public class DatabaseTesterComponent { * * @param aCallback * Code to be executed within the transaction. + * * @return Result. + * */ public Map executeTransaction(final TestTransactionCallback aCallback) { return (Map) executeTransaction(new TransactionCallback() { @@ -368,9 +396,10 @@ public class DatabaseTesterComponent { * * @param aCallback * Code to be executed within the transaction. + * */ public void executeTransaction( - final TestTransactionCallbackWithoutResult aCallback) { + final TestTransactionCallbackWithoutResult aCallback) { executeTransaction(new TransactionCallbackWithoutResult() { public void doInTransactionWithoutResult(TransactionStatus aArg) { try { @@ -388,6 +417,7 @@ public class DatabaseTesterComponent { * * @param aSql * Query to execute. + * * @return Result set. */ public ResultSet executeQuery(String aSql) { @@ -403,6 +433,7 @@ public class DatabaseTesterComponent { * Query. * @param aArg * Argument. + * * @return Result set. */ public ResultSet executeQuery(String aSql, Object aArg) { @@ -418,7 +449,9 @@ public class DatabaseTesterComponent { * Sql query. * @param aArgs * Arguments to the query. + * * @return Result set. + * */ public ResultSet executeQuery(final String aSql, final Object[] aArgs) { try { @@ -442,10 +475,11 @@ public class DatabaseTesterComponent { * Arguments to the prepared statement. * @param aStatement * Prepared statement + * * @throws SQLException */ private void setPreparedParams(final Object[] aArgs, - PreparedStatement aStatement) throws SQLException { + PreparedStatement aStatement) throws SQLException { for (int i = 1; i <= aArgs.length; i++) { setPreparedParam(i, aStatement, aArgs[i - 1]); } @@ -459,11 +493,12 @@ public class DatabaseTesterComponent { * @param aStatement * Prepared statement. * @param aObject - * Value Must be of type Integer, Long, or String. + * Value Must be of type Integer, Long, or String. + * * @throws SQLException */ private void setPreparedParam(int aIndex, PreparedStatement aStatement, - Object aObject) throws SQLException { + Object aObject) throws SQLException { if (aObject instanceof Integer) { aStatement.setInt(aIndex, ((Integer) aObject).intValue()); } else if (aObject instanceof Long) { @@ -471,9 +506,9 @@ public class DatabaseTesterComponent { } else if (aObject instanceof String) { aStatement.setString(aIndex, (String) aObject); } else { - TestCase.fail("Unsupported object type for prepared statement: " - + aObject.getClass() + " value: " + aObject - + " statement: " + aStatement); + TestCase.fail("Unsupported object type for prepared statement: " + + aObject.getClass() + " value: " + aObject + " statement: " + + aStatement); } } @@ -483,28 +518,33 @@ public class DatabaseTesterComponent { } catch (NoSuchBeanDefinitionException e) { return false; } + return true; } /** + * * @return Returns the dataSource. */ public DataSource getDataSource() { - return _dataSource; + return dataSource; } /** + * + * * @return + * * @throws SQLException */ public int getTableSize(final String aTable) throws SQLException { - ResultSet resultSet = executeQuery("select * from " + aTable); int count = 0; while (resultSet.next()) { count++; } + return count; } @@ -517,5 +557,4 @@ public class DatabaseTesterComponent { return count; } - }