You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2018/06/18 22:16:13 UTC
commons-dbcp git commit: [DBCP-479] Support default schema in
configuration.
Repository: commons-dbcp
Updated Branches:
refs/heads/master 35a456bb6 -> a0c48c1e1
[DBCP-479] Support default schema in configuration.
Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/a0c48c1e
Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/a0c48c1e
Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/a0c48c1e
Branch: refs/heads/master
Commit: a0c48c1e155462c2851b41eb7aa707f310516411
Parents: 35a456b
Author: Gary Gregory <ga...@gmail.com>
Authored: Mon Jun 18 16:16:09 2018 -0600
Committer: Gary Gregory <ga...@gmail.com>
Committed: Mon Jun 18 16:16:09 2018 -0600
----------------------------------------------------------------------
src/changes/changes.xml | 3 ++
.../apache/commons/dbcp2/BasicDataSource.java | 39 ++++++++++++++++++++
.../commons/dbcp2/BasicDataSourceFactory.java | 28 ++++++++------
.../commons/dbcp2/BasicDataSourceMXBean.java | 10 +++++
.../dbcp2/PoolableConnectionFactory.java | 15 ++++++++
.../dbcp2/managed/BasicManagedDataSource.java | 1 +
.../commons/dbcp2/TestBasicDataSource.java | 9 ++++-
.../dbcp2/TestBasicDataSourceFactory.java | 11 +++---
.../apache/commons/dbcp2/TesterConnection.java | 7 +++-
9 files changed, 103 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 62c845b..1224770 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -67,6 +67,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="update" issue="DBCP-506" due-to="Gary Gregory">
Support JDBC 4.2.
</action>
+ <action dev="ggregory" type="update" issue="DBCP-479" due-to="Guillaume Husta, Gary Gregory">
+ Support default schema in configuration.
+ </action>
</release>
<release version="2.4.0" date="2018-06-12" description="This is a minor release, including bug fixes and enhancements.">
<action dev="ggregory" type="fix" issue="DBCP-484" due-to="Emanuel Freitas">
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
index d940e7e..8d08509 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
@@ -224,6 +224,11 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean
private volatile String defaultCatalog;
/**
+ * The default "schema" of connections created by this pool.
+ */
+ private volatile String defaultSchema;
+
+ /**
* Returns the default catalog.
*
* @return the default catalog
@@ -234,6 +239,17 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean
}
/**
+ * Returns the default schema.
+ *
+ * @return the default schema.
+ * @since 2.5.0
+ */
+ @Override
+ public String getDefaultSchema() {
+ return this.defaultSchema;
+ }
+
+ /**
* <p>
* Sets the default catalog.
* </p>
@@ -255,6 +271,28 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean
}
/**
+ * <p>
+ * Sets the default schema.
+ * </p>
+ * <p>
+ * Note: this method currently has no effect once the pool has been initialized. The pool is initialized the first
+ * time one of the following methods is invoked: <code>getConnection, setLogwriter,
+ * setLoginTimeout, getLoginTimeout, getLogWriter.</code>
+ * </p>
+ *
+ * @param defaultSchema
+ * the default catalog
+ * @since 2.5.0
+ */
+ public void setDefaultSchema(final String defaultSchema) {
+ if (defaultSchema != null && defaultSchema.trim().length() > 0) {
+ this.defaultSchema = defaultSchema;
+ } else {
+ this.defaultSchema = null;
+ }
+ }
+
+ /**
* The property that controls if the pooled connections cache some state rather than query the database for current
* state to improve performance.
*/
@@ -2317,6 +2355,7 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean
connectionFactory.setDefaultAutoCommit(defaultAutoCommit);
connectionFactory.setDefaultTransactionIsolation(defaultTransactionIsolation);
connectionFactory.setDefaultCatalog(defaultCatalog);
+ connectionFactory.setDefaultSchema(defaultSchema);
connectionFactory.setCacheState(cacheState);
connectionFactory.setPoolStatements(poolPreparedStatements);
connectionFactory.setMaxOpenPreparedStatements(maxOpenPreparedStatements);
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
index 69c2cb9..959aecf 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
@@ -63,6 +63,7 @@ public class BasicDataSourceFactory implements ObjectFactory {
private static final String PROP_DEFAULTREADONLY = "defaultReadOnly";
private static final String PROP_DEFAULTTRANSACTIONISOLATION = "defaultTransactionIsolation";
private static final String PROP_DEFAULTCATALOG = "defaultCatalog";
+ private static final String PROP_DEFAULTSCHEMA = "defaultSchema";
private static final String PROP_CACHESTATE = "cacheState";
private static final String PROP_DRIVERCLASSNAME = "driverClassName";
private static final String PROP_LIFO = "lifo";
@@ -130,17 +131,17 @@ public class BasicDataSourceFactory implements ObjectFactory {
private static final String SILENTPROP_AUTH = "auth";
private static final String[] ALL_PROPERTIES = {PROP_DEFAULTAUTOCOMMIT, PROP_DEFAULTREADONLY,
- PROP_DEFAULTTRANSACTIONISOLATION, PROP_DEFAULTCATALOG, PROP_CACHESTATE, PROP_DRIVERCLASSNAME, PROP_LIFO,
- PROP_MAXTOTAL, PROP_MAXIDLE, PROP_MINIDLE, PROP_INITIALSIZE, PROP_MAXWAITMILLIS, PROP_TESTONCREATE,
- PROP_TESTONBORROW, PROP_TESTONRETURN, PROP_TIMEBETWEENEVICTIONRUNSMILLIS, PROP_NUMTESTSPEREVICTIONRUN,
- PROP_MINEVICTABLEIDLETIMEMILLIS, PROP_SOFTMINEVICTABLEIDLETIMEMILLIS, PROP_EVICTIONPOLICYCLASSNAME,
- PROP_TESTWHILEIDLE, PROP_PASSWORD, PROP_URL, PROP_USERNAME, PROP_VALIDATIONQUERY,
- PROP_VALIDATIONQUERY_TIMEOUT, PROP_CONNECTIONINITSQLS, PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED,
- PROP_REMOVEABANDONEDONBORROW, PROP_REMOVEABANDONEDONMAINTENANCE, PROP_REMOVEABANDONEDTIMEOUT,
- PROP_LOGABANDONED, PROP_ABANDONEDUSAGETRACKING, PROP_POOLPREPAREDSTATEMENTS, PROP_MAXOPENPREPAREDSTATEMENTS,
- PROP_CONNECTIONPROPERTIES, PROP_MAXCONNLIFETIMEMILLIS, PROP_LOGEXPIREDCONNECTIONS, PROP_ROLLBACK_ON_RETURN,
- PROP_ENABLE_AUTOCOMMIT_ON_RETURN, PROP_DEFAULT_QUERYTIMEOUT, PROP_FASTFAIL_VALIDATION,
- PROP_DISCONNECTION_SQL_CODES, PROP_JMX_NAME };
+ PROP_DEFAULTTRANSACTIONISOLATION, PROP_DEFAULTCATALOG, PROP_DEFAULTSCHEMA, PROP_CACHESTATE,
+ PROP_DRIVERCLASSNAME, PROP_LIFO, PROP_MAXTOTAL, PROP_MAXIDLE, PROP_MINIDLE, PROP_INITIALSIZE,
+ PROP_MAXWAITMILLIS, PROP_TESTONCREATE, PROP_TESTONBORROW, PROP_TESTONRETURN,
+ PROP_TIMEBETWEENEVICTIONRUNSMILLIS, PROP_NUMTESTSPEREVICTIONRUN, PROP_MINEVICTABLEIDLETIMEMILLIS,
+ PROP_SOFTMINEVICTABLEIDLETIMEMILLIS, PROP_EVICTIONPOLICYCLASSNAME, PROP_TESTWHILEIDLE, PROP_PASSWORD,
+ PROP_URL, PROP_USERNAME, PROP_VALIDATIONQUERY, PROP_VALIDATIONQUERY_TIMEOUT, PROP_CONNECTIONINITSQLS,
+ PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED, PROP_REMOVEABANDONEDONBORROW, PROP_REMOVEABANDONEDONMAINTENANCE,
+ PROP_REMOVEABANDONEDTIMEOUT, PROP_LOGABANDONED, PROP_ABANDONEDUSAGETRACKING, PROP_POOLPREPAREDSTATEMENTS,
+ PROP_MAXOPENPREPAREDSTATEMENTS, PROP_CONNECTIONPROPERTIES, PROP_MAXCONNLIFETIMEMILLIS,
+ PROP_LOGEXPIREDCONNECTIONS, PROP_ROLLBACK_ON_RETURN, PROP_ENABLE_AUTOCOMMIT_ON_RETURN,
+ PROP_DEFAULT_QUERYTIMEOUT, PROP_FASTFAIL_VALIDATION, PROP_DISCONNECTION_SQL_CODES, PROP_JMX_NAME };
/**
* Obsolete properties from DBCP 1.x. with warning strings suggesting new properties. LinkedHashMap will guarantee
@@ -337,6 +338,11 @@ public class BasicDataSourceFactory implements ObjectFactory {
dataSource.setDefaultCatalog(value);
}
+ value = properties.getProperty(PROP_DEFAULTSCHEMA);
+ if (value != null) {
+ dataSource.setDefaultSchema(value);
+ }
+
value = properties.getProperty(PROP_CACHESTATE);
if (value != null) {
dataSource.setCacheState(Boolean.valueOf(value).booleanValue());
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/main/java/org/apache/commons/dbcp2/BasicDataSourceMXBean.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceMXBean.java b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceMXBean.java
index 4693c88..4754764 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceMXBean.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceMXBean.java
@@ -59,6 +59,16 @@ public interface BasicDataSourceMXBean {
String getDefaultCatalog();
/**
+ * See {@link BasicDataSource#getDefaultSchema()}
+ *
+ * @return {@link BasicDataSource#getDefaultSchema()}
+ * @since 2.5.0
+ */
+ default String getDefaultSchema() {
+ return null;
+ }
+
+ /**
* See {@link BasicDataSource#getCacheState()}
*
* @return {@link BasicDataSource#getCacheState()}
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java
index 9ff815b..ad932bc 100644
--- a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java
@@ -157,6 +157,17 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo
this.defaultCatalog = defaultCatalog;
}
+ /**
+ * Sets the default "schema" setting for borrowed {@link Connection}s
+ *
+ * @param defaultSchema
+ * the default "schema" setting for borrowed {@link Connection}s
+ * @since 2.5.0
+ */
+ public void setDefaultSchema(final String defaultSchema) {
+ this.defaultSchema = defaultSchema;
+ }
+
public void setCacheState(final boolean cacheState) {
this.cacheState = cacheState;
}
@@ -427,6 +438,9 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo
if (defaultCatalog != null && !defaultCatalog.equals(conn.getCatalog())) {
conn.setCatalog(defaultCatalog);
}
+ if (defaultSchema != null && !defaultSchema.equals(conn.getSchema())) {
+ conn.setSchema(defaultSchema);
+ }
conn.setDefaultQueryTimeout(defaultQueryTimeoutSeconds);
}
@@ -478,6 +492,7 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo
private boolean rollbackOnReturn = true;
private int defaultTransactionIsolation = UNKNOWN_TRANSACTIONISOLATION;
private String defaultCatalog;
+ private String defaultSchema;
private boolean cacheState;
private boolean poolStatements;
private int maxOpenPreparedStatements = GenericKeyedObjectPoolConfig.DEFAULT_MAX_TOTAL_PER_KEY;
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java b/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
index 329c0bd..723c621 100644
--- a/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/managed/BasicManagedDataSource.java
@@ -207,6 +207,7 @@ public class BasicManagedDataSource extends BasicDataSource {
connectionFactory.setDefaultAutoCommit(getDefaultAutoCommit());
connectionFactory.setDefaultTransactionIsolation(getDefaultTransactionIsolation());
connectionFactory.setDefaultCatalog(getDefaultCatalog());
+ connectionFactory.setDefaultSchema(getDefaultSchema());
connectionFactory.setCacheState(getCacheState());
connectionFactory.setPoolStatements(isPoolPreparedStatements());
connectionFactory.setMaxOpenPreparedStatements(getMaxOpenPreparedStatements());
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
index 595d7e9..b1550b4 100644
--- a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
+++ b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
@@ -463,7 +463,9 @@ public class TestBasicDataSource extends TestConnectionPool {
StackMessageLog.clear();
ds.close();
// Exception must have been swallowed by the pool - verify it is logged
- assertTrue(StackMessageLog.popMessage().indexOf("bang") > 0);
+ final String message = StackMessageLog.popMessage();
+ Assert.assertNotNull(message);
+ assertTrue(message.indexOf("bang") > 0);
} catch (final SQLException ex) {
assertTrue(ex.getMessage().indexOf("Cannot close") > 0);
assertTrue(ex.getCause().getMessage().indexOf("bang") > 0);
@@ -484,7 +486,9 @@ public class TestBasicDataSource extends TestConnectionPool {
StackMessageLog.lock();
StackMessageLog.clear();
ds.close();
- assertTrue(StackMessageLog.popMessage().indexOf("boom") > 0);
+ final String message = StackMessageLog.popMessage();
+ Assert.assertNotNull(message);
+ assertTrue(message.indexOf("boom") > 0);
} catch (final IllegalStateException ex) {
assertTrue(ex.getMessage().indexOf("boom") > 0); // RTE is not wrapped by BDS#close
} finally {
@@ -666,6 +670,7 @@ public class TestBasicDataSource extends TestConnectionPool {
conn.close();
assertEquals(0, ds.getNumIdle());
final String message = StackMessageLog.popMessage();
+ Assert.assertNotNull(message);
assertTrue(message.indexOf("exceeds the maximum permitted value") > 0);
} finally {
StackMessageLog.clear();
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java
index f3234b8..f4f0f33 100644
--- a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java
+++ b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSourceFactory.java
@@ -59,15 +59,14 @@ public class TestBasicDataSourceFactory {
try {
StackMessageLog.lock();
StackMessageLog.clear();
- final Reference ref = new Reference("javax.sql.DataSource",
- BasicDataSourceFactory.class.getName(), null);
- ref.add(new StringRefAddr("foo", "bar")); // Unknown
+ final Reference ref = new Reference("javax.sql.DataSource", BasicDataSourceFactory.class.getName(), null);
+ ref.add(new StringRefAddr("foo", "bar")); // Unknown
ref.add(new StringRefAddr("maxWait", "100")); // Changed
- ref.add(new StringRefAddr("driverClassName", "org.apache.commons.dbcp2.TesterDriver")); //OK
+ ref.add(new StringRefAddr("driverClassName", "org.apache.commons.dbcp2.TesterDriver")); // OK
final BasicDataSourceFactory basicDataSourceFactory = new BasicDataSourceFactory();
basicDataSourceFactory.getObjectInstance(ref, null, null, null);
final List<String> messages = StackMessageLog.getAll();
- assertEquals(2,messages.size());
+ assertEquals(messages.toString(), 2, messages.size());
for (final String message : messages) {
if (message.contains("maxWait")) {
assertTrue(message.contains("use maxWaitMillis"));
@@ -118,6 +117,7 @@ public class TestBasicDataSourceFactory {
properties.setProperty("defaultReadOnly", "false");
properties.setProperty("defaultTransactionIsolation", "READ_COMMITTED");
properties.setProperty("defaultCatalog", "test");
+ properties.setProperty("defaultSchema", "testSchema");
properties.setProperty("testOnBorrow", "true");
properties.setProperty("testOnReturn", "false");
properties.setProperty("username", "userName");
@@ -158,6 +158,7 @@ public class TestBasicDataSourceFactory {
assertEquals(Boolean.FALSE, ds.getDefaultReadOnly());
assertEquals(Connection.TRANSACTION_READ_COMMITTED, ds.getDefaultTransactionIsolation());
assertEquals("test", ds.getDefaultCatalog());
+ assertEquals("testSchema", ds.getDefaultSchema());
assertTrue(ds.getTestOnBorrow());
assertFalse(ds.getTestOnReturn());
assertEquals("userName", ds.getUsername());
http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/a0c48c1e/src/test/java/org/apache/commons/dbcp2/TesterConnection.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/dbcp2/TesterConnection.java b/src/test/java/org/apache/commons/dbcp2/TesterConnection.java
index a014a60..4329b1f 100644
--- a/src/test/java/org/apache/commons/dbcp2/TesterConnection.java
+++ b/src/test/java/org/apache/commons/dbcp2/TesterConnection.java
@@ -44,6 +44,7 @@ public class TesterConnection implements Connection {
protected int _transactionIsolation = 1;
protected DatabaseMetaData _metaData = new TesterDatabaseMetaData();
protected String _catalog = null;
+ protected String schema;
protected Map<String,Class<?>> _typeMap = null;
protected boolean _readOnly = false;
protected SQLWarning warnings = null;
@@ -384,12 +385,14 @@ public class TesterConnection implements Connection {
@Override
public void setSchema(final String schema) throws SQLException {
- throw new SQLException("Not implemented.");
+ checkOpen();
+ this.schema= schema;
}
@Override
public String getSchema() throws SQLException {
- throw new SQLException("Not implemented.");
+ checkOpen();
+ return schema;
}
@Override