From b12cbca32c0e61128b7dfe137b7d71484e905d79 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Thu, 4 Jan 2018 12:21:03 +0100 Subject: [PATCH] [#6982] Make jooq-meta's org.jooq.util.Database AutoCloseable --- .../src/main/java/org/jooq/util/GenerationTool.java | 11 ++++++++++- .../src/main/java/org/jooq/util/ddl/DDLDatabase.java | 7 +++++++ .../src/main/java/org/jooq/util/jpa/JPADatabase.java | 7 +++++++ .../src/main/java/org/jooq/util/AbstractDatabase.java | 3 +++ jOOQ-meta/src/main/java/org/jooq/util/Database.java | 10 +++++++++- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java index 71f099b5fb..d9b17c30a6 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -245,6 +245,8 @@ public class GenerationTool { if (g.getTarget() == null) g.setTarget(new Target()); + Database database = null; + try { // Initialise connection @@ -306,7 +308,7 @@ public class GenerationTool { : connection != null ? databaseClass(connection) : databaseClass(j); - Database database = databaseClass.newInstance(); + database = databaseClass.newInstance(); database.setProperties(properties(d.getProperties())); List catalogs = d.getCatalogs(); @@ -649,6 +651,13 @@ public class GenerationTool { generator.generate(database); } finally { + if (database != null) + try { + database.close(); + } + catch (Exception e) { + log.error("Error while closing database", e); + } // Close connection only if it was created by the GenerationTool if (close && connection != null) diff --git a/jOOQ-meta-extensions/src/main/java/org/jooq/util/ddl/DDLDatabase.java b/jOOQ-meta-extensions/src/main/java/org/jooq/util/ddl/DDLDatabase.java index 5d25169056..526f7a8fd2 100644 --- a/jOOQ-meta-extensions/src/main/java/org/jooq/util/ddl/DDLDatabase.java +++ b/jOOQ-meta-extensions/src/main/java/org/jooq/util/ddl/DDLDatabase.java @@ -57,6 +57,7 @@ import org.jooq.exception.DataAccessException; import org.jooq.impl.DSL; import org.jooq.impl.ParserException; import org.jooq.tools.JooqLogger; +import org.jooq.tools.jdbc.JDBCUtils; import org.jooq.util.SchemaDefinition; import org.jooq.util.h2.H2Database; @@ -151,6 +152,12 @@ public class DDLDatabase extends H2Database { return DSL.using(connection); } + @Override + public void close() { + JDBCUtils.safeClose(connection); + super.close(); + } + @Override protected List getSchemata0() throws SQLException { List result = new ArrayList(super.getSchemata0()); diff --git a/jOOQ-meta-extensions/src/main/java/org/jooq/util/jpa/JPADatabase.java b/jOOQ-meta-extensions/src/main/java/org/jooq/util/jpa/JPADatabase.java index 23353aa003..d99f7c71a2 100644 --- a/jOOQ-meta-extensions/src/main/java/org/jooq/util/jpa/JPADatabase.java +++ b/jOOQ-meta-extensions/src/main/java/org/jooq/util/jpa/JPADatabase.java @@ -61,6 +61,7 @@ import org.jooq.exception.DataAccessException; import org.jooq.impl.DSL; import org.jooq.impl.JPAConverter; import org.jooq.tools.JooqLogger; +import org.jooq.tools.jdbc.JDBCUtils; import org.jooq.util.SchemaDefinition; import org.jooq.util.h2.H2Database; import org.jooq.util.jaxb.ForcedType; @@ -100,6 +101,12 @@ public class JPADatabase extends H2Database { private Connection connection; + @Override + public void close() { + JDBCUtils.safeClose(connection); + super.close(); + } + @Override protected DSLContext create0() { if (connection == null) { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java index 09430e2767..83a0c80e27 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractDatabase.java @@ -2099,6 +2099,9 @@ public abstract class AbstractDatabase implements Database { } } + @Override + public void close() {} + /** * Create a new Factory */ diff --git a/jOOQ-meta/src/main/java/org/jooq/util/Database.java b/jOOQ-meta/src/main/java/org/jooq/util/Database.java index 6a58ba0428..b18b19acc9 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Database.java @@ -59,7 +59,7 @@ import org.jooq.util.jaxb.Schema; * * @author Lukas Eder */ -public interface Database { +public interface Database extends AutoCloseable { /** * The catalogs generated from this database. @@ -782,6 +782,14 @@ public interface Database { */ Properties getProperties(); + /** + * Release any resources that this Database may have allocated. + */ + + @Override + + void close(); + /** * A filter type that can be used with {@link Database#addFilter(Filter)} */