From d625f5e6221efb27e4ab2518943dfa24d20a905f Mon Sep 17 00:00:00 2001 From: Nikolaus Krismer <niko@krismer.de> Date: Tue, 17 Jun 2014 14:47:11 +0200 Subject: [PATCH] remoced apache dbutils dependency (added own class for closing database objects quietly) --- build.gradle | 1 - .../inf/isochrone/config/ConfigDataset.java | 13 +- .../inf/isochrone/config/ConfigIsochrone.java | 33 ---- .../it/unibz/inf/isochrone/db/Database.java | 2 - .../it/unibz/inf/isochrone/db/DbUtils.java | 145 ++++++++++++++++++ 5 files changed, 156 insertions(+), 38 deletions(-) create mode 100644 src/main/java/it/unibz/inf/isochrone/db/DbUtils.java diff --git a/build.gradle b/build.gradle index 9a9c205f..a4e4b0ec 100644 --- a/build.gradle +++ b/build.gradle @@ -128,7 +128,6 @@ buildscript { } dependencies { - compile group: 'commons-dbutils', name: 'commons-dbutils', version: '+' compile group: 'commons-io', name: 'commons-io', version: '+' compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '+' compile group: 'com.jolbox', name: 'bonecp', version: '+' diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java index 97b7c298..6dc27633 100644 --- a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java +++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java @@ -10,6 +10,7 @@ import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformer; import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformers; import com.tngtech.configbuilder.annotation.valueextractor.PropertyValue; +import it.unibz.inf.isochrone.db.DbUtils; import it.unibz.inf.isochrone.db.TableEntry; import it.unibz.inf.isochrone.util.EnumContainer.TableType; import it.unibz.inf.isochrone.util.ResourceHelper; @@ -17,6 +18,7 @@ import it.unibz.inf.isochrone.util.ResourceHelper; import java.io.File; import java.io.IOException; import java.net.URL; +import java.sql.SQLException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -426,10 +428,17 @@ public class ConfigDataset { private static Collection<String> filterInvalidDatasets(final Collection<String> datasets) { LOGGER.info("Filtering invalid datasets (e.g. which have no database tables)"); - final ConfigIsochrone config = ConfigIsochrone.getInstance(); + + final Collection<String> allTables; + try { + allTables = DbUtils.getAllTables(config.getConnection()); + } catch (SQLException e) { + LOGGER.warn("Could not get tables from database... datasets will not be filtered at all"); + return datasets; + } + final Collection<String> filteredList = new ArrayList<>(datasets.size()); - final Collection<String> allTables = config.getAllTables(); for (final String ds : datasets) { final ConfigDataset c = ConfigDataset.createInstance(ds); if (c.hasValidDatabase(allTables)) { diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java index ae992b1c..69816331 100644 --- a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java +++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java @@ -10,16 +10,11 @@ import com.tngtech.configbuilder.annotation.valueextractor.PropertyValue; import it.unibz.inf.isochrone.db.ConnectionFactory; -import java.sql.CallableStatement; import java.sql.Connection; -import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collection; import javax.validation.constraints.NotNull; -import org.apache.commons.dbutils.DbUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -163,32 +158,4 @@ public final class ConfigIsochrone { } } - public Collection<String> getAllTables() { - final Connection connection = getConnection(); - if (connection == null) { - throw new NullPointerException("Connection to database could not be initialized"); - } - - final Collection<String> result = new ArrayList<>(); - final String query = "SELECT tablename FROM pg_tables WHERE schemaname='public'"; - - ResultSet rs = null; - CallableStatement stmt = null; - try { - stmt = connection.prepareCall(query); - rs = stmt.executeQuery(); - while (rs.next()) { - result.add(rs.getString("tablename")); - } - } catch (SQLException e) { - LOGGER.warn("Could not get tables from database"); - } finally { - DbUtils.closeQuietly(rs); - DbUtils.closeQuietly(stmt); - DbUtils.closeQuietly(connection); - } - - return result; - } - } diff --git a/src/main/java/it/unibz/inf/isochrone/db/Database.java b/src/main/java/it/unibz/inf/isochrone/db/Database.java index eb976e8f..4a33c065 100644 --- a/src/main/java/it/unibz/inf/isochrone/db/Database.java +++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java @@ -21,8 +21,6 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import org.apache.commons.dbutils.DbUtils; - /** * <p> * Database layer. Contains all database queries for the different diff --git a/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java b/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java new file mode 100644 index 00000000..ba476d59 --- /dev/null +++ b/src/main/java/it/unibz/inf/isochrone/db/DbUtils.java @@ -0,0 +1,145 @@ +package it.unibz.inf.isochrone.db; + +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Collection; + +/** + * A collection of JDBC helper methods. This class is thread safe. + */ + +public final class DbUtils { + // CHECKSTYLE:OFF EmptyBlock + + private DbUtils() { } + + /** + * Close a <code>Connection</code>, avoid closing if null. + * + * @param conn Connection to close. + * @throws SQLException if a database access error occurs + */ + public static void close(final Connection conn) throws SQLException { + if (conn != null) { + conn.close(); + } + } + + /** + * Close a <code>ResultSet</code>, avoid closing if null. + * + * @param rs ResultSet to close. + * @throws SQLException if a database access error occurs + */ + public static void close(final ResultSet rs) throws SQLException { + if (rs != null) { + rs.close(); + } + } + + /** + * Close a <code>Statement</code>, avoid closing if null. + * + * @param stmt Statement to close. + * @throws SQLException if a database access error occurs + */ + public static void close(final Statement stmt) throws SQLException { + if (stmt != null) { + stmt.close(); + } + } + + /** + * Close a <code>Connection</code>, avoid closing if null and hide + * any SQLExceptions that occur. + * + * @param conn Connection to close. + */ + public static void closeQuietly(final Connection conn) { + try { + close(conn); + } catch (SQLException e) { + // quiet + } + } + + /** + * Close a <code>Connection</code>, <code>Statement</code> and <code>ResultSet</code>. Avoid closing if null and hide any + * SQLExceptions that occur. + * + * @param conn Connection to close. + * @param stmt Statement to close. + * @param rs ResultSet to close. + */ + public static void closeQuietly(final Connection conn, final Statement stmt, final ResultSet rs) { + try { + closeQuietly(rs); + } finally { + try { + closeQuietly(stmt); + } finally { + closeQuietly(conn); + } + } + } + + /** + * Close a <code>ResultSet</code>, avoid closing if null and hide any + * SQLExceptions that occur. + * + * @param rs ResultSet to close. + */ + public static void closeQuietly(final ResultSet rs) { + try { + close(rs); + } catch (SQLException e) { + // quiet + } + } + + /** + * Close a <code>Statement</code>, avoid closing if null and hide + * any SQLExceptions that occur. + * + * @param stmt Statement to close. + */ + public static void closeQuietly(final Statement stmt) { + try { + close(stmt); + } catch (SQLException e) { + // quiet + } + } + + // CHECKSTYLE:ON EmptyBlock + + public static Collection<String> getAllTables(final Connection connection) throws SQLException { + if (connection == null) { + throw new NullPointerException("Connection to database could not be initialized"); + } + + final Collection<String> result = new ArrayList<>(); + final String query = "SELECT tablename FROM pg_tables WHERE schemaname='public'"; + + ResultSet rs = null; + CallableStatement stmt = null; + try { + stmt = connection.prepareCall(query); + rs = stmt.executeQuery(); + while (rs.next()) { + result.add(rs.getString("tablename")); + } + } finally { + DbUtils.closeQuietly(rs); + DbUtils.closeQuietly(stmt); + DbUtils.closeQuietly(connection); + } + + return result; + } + +} -- GitLab