Author: markt
Date: Thu Aug  9 16:50:30 2018
New Revision: 1837746

URL: http://svn.apache.org/viewvc?rev=1837746&view=rev
Log:
Update the internal fork of Apache Commons DBCP 2 to abc0484 (2018-08-09) to 
pick up some bug fixes and enhancements.

Modified:
    tomcat/trunk/MERGE.txt
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceFactory.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceMXBean.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingConnection.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingDatabaseMetaData.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingPreparedStatement.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingResultSet.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingStatement.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DriverConnectionFactory.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DriverManagerConnectionFactory.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/PStmtKey.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnection.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/PoolingConnection.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/Utils.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/DriverAdapterCPDS.java
    tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/PStmtKeyCPDS.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/cpdsadapter/PooledConnectionImpl.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/datasources/CPDSConnectionFactory.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/managed/BasicManagedDataSource.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/managed/DataSourceXAConnectionFactory.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/managed/ManagedConnection.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/managed/PoolableManagedConnection.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/managed/TransactionContext.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/managed/TransactionRegistry.java
    
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/managed/XAConnectionFactory.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/MERGE.txt
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/MERGE.txt?rev=1837746&r1=1837745&r2=1837746&view=diff
==============================================================================
--- tomcat/trunk/MERGE.txt (original)
+++ tomcat/trunk/MERGE.txt Thu Aug  9 16:50:30 2018
@@ -69,7 +69,7 @@ Sub-tree
 src/main/java/org/apache/commons/dbcp2
 src/main/resources/org/apache/commons/dbcp2
 The SHA1 ID for the most recent commit to be merged to Tomcat is:
-d7aa662fbbb99e536ae28c47d0c4e1d51e39d5b9
+abc048454398d8c9924a1af9c04501817f44a11d
 
 Pool2
 Sub-tree

Modified: tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java?rev=1837746&r1=1837745&r2=1837746&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java Thu Aug 
 9 16:50:30 2018
@@ -224,6 +224,11 @@ public class BasicDataSource implements
     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
     }
 
     /**
+     * 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
     }
 
     /**
+     * <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.
      */
@@ -2271,11 +2309,11 @@ public class BasicDataSource implements
      * Closes the connection pool, silently swallowing any exception that 
occurs.
      */
     private void closeConnectionPool() {
-        final GenericObjectPool<?> oldpool = connectionPool;
+        final GenericObjectPool<?> oldPool = connectionPool;
         connectionPool = null;
         try {
-            if (oldpool != null) {
-                oldpool.close();
+            if (oldPool != null) {
+                oldPool.close();
             }
         } catch (final Exception e) {
             /* Ignore */
@@ -2330,6 +2368,7 @@ public class BasicDataSource implements
             connectionFactory.setDefaultAutoCommit(defaultAutoCommit);
             
connectionFactory.setDefaultTransactionIsolation(defaultTransactionIsolation);
             connectionFactory.setDefaultCatalog(defaultCatalog);
+            connectionFactory.setDefaultSchema(defaultSchema);
             connectionFactory.setCacheState(cacheState);
             connectionFactory.setPoolStatements(poolPreparedStatements);
             
connectionFactory.setMaxOpenPreparedStatements(maxOpenPreparedStatements);

Modified: 
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceFactory.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceFactory.java?rev=1837746&r1=1837745&r2=1837746&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceFactory.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceFactory.java 
Thu Aug  9 16:50:30 2018
@@ -63,6 +63,7 @@ public class BasicDataSourceFactory impl
     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 impl
     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 impl
             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());

Modified: 
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceMXBean.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceMXBean.java?rev=1837746&r1=1837745&r2=1837746&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceMXBean.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSourceMXBean.java 
Thu Aug  9 16:50:30 2018
@@ -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()}

Modified: 
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java?rev=1837746&r1=1837745&r2=1837746&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java 
Thu Aug  9 16:50:30 2018
@@ -30,6 +30,7 @@ import java.sql.NClob;
 import java.sql.Ref;
 import java.sql.RowId;
 import java.sql.SQLException;
+import java.sql.SQLType;
 import java.sql.SQLXML;
 import java.sql.Time;
 import java.sql.Timestamp;
@@ -55,51 +56,55 @@ public class DelegatingCallableStatement
      * Creates a wrapper for the Statement which traces this Statement to the 
Connection which created it and the code
      * which created it.
      *
-     * @param c
+     * @param connection
      *            the {@link DelegatingConnection} that created this statement
-     * @param s
+     * @param statement
      *            the {@link CallableStatement} to delegate all calls to
      */
-    public DelegatingCallableStatement(final DelegatingConnection<?> c, final 
CallableStatement s) {
-        super(c, s);
+    public DelegatingCallableStatement(final DelegatingConnection<?> 
connection, final CallableStatement statement) {
+        super(connection, statement);
     }
 
     @Override
-    public void registerOutParameter(final int parameterIndex, final int 
sqlType) throws SQLException {
+    public Array getArray(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            
getDelegateCallableStatement().registerOutParameter(parameterIndex, sqlType);
+            return getDelegateCallableStatement().getArray(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void registerOutParameter(final int parameterIndex, final int 
sqlType, final int scale) throws SQLException {
+    public Array getArray(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            
getDelegateCallableStatement().registerOutParameter(parameterIndex, sqlType, 
scale);
+            return getDelegateCallableStatement().getArray(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public boolean wasNull() throws SQLException {
+    public BigDecimal getBigDecimal(final int parameterIndex) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().wasNull();
+            return 
getDelegateCallableStatement().getBigDecimal(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
-            return false;
+            return null;
         }
     }
 
+    /** @deprecated Use {@link #getBigDecimal(int)} or {@link 
#getBigDecimal(String)} */
     @Override
-    public String getString(final int parameterIndex) throws SQLException {
+    @Deprecated
+    public BigDecimal getBigDecimal(final int parameterIndex, final int scale) 
throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getString(parameterIndex);
+            return 
getDelegateCallableStatement().getBigDecimal(parameterIndex, scale);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -107,65 +112,65 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public boolean getBoolean(final int parameterIndex) throws SQLException {
+    public BigDecimal getBigDecimal(final String parameterName) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getBoolean(parameterIndex);
+            return getDelegateCallableStatement().getBigDecimal(parameterName);
         } catch (final SQLException e) {
             handleException(e);
-            return false;
+            return null;
         }
     }
 
     @Override
-    public byte getByte(final int parameterIndex) throws SQLException {
+    public Blob getBlob(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getByte(parameterIndex);
+            return getDelegateCallableStatement().getBlob(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
+            return null;
         }
     }
 
     @Override
-    public short getShort(final int parameterIndex) throws SQLException {
+    public Blob getBlob(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getShort(parameterIndex);
+            return getDelegateCallableStatement().getBlob(parameterName);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
+            return null;
         }
     }
 
     @Override
-    public int getInt(final int parameterIndex) throws SQLException {
+    public boolean getBoolean(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getInt(parameterIndex);
+            return getDelegateCallableStatement().getBoolean(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
+            return false;
         }
     }
 
     @Override
-    public long getLong(final int parameterIndex) throws SQLException {
+    public boolean getBoolean(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getLong(parameterIndex);
+            return getDelegateCallableStatement().getBoolean(parameterName);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
+            return false;
         }
     }
 
     @Override
-    public float getFloat(final int parameterIndex) throws SQLException {
+    public byte getByte(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getFloat(parameterIndex);
+            return getDelegateCallableStatement().getByte(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
             return 0;
@@ -173,23 +178,21 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public double getDouble(final int parameterIndex) throws SQLException {
+    public byte getByte(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getDouble(parameterIndex);
+            return getDelegateCallableStatement().getByte(parameterName);
         } catch (final SQLException e) {
             handleException(e);
             return 0;
         }
     }
 
-    /** @deprecated Use {@link #getBigDecimal(int)} or {@link 
#getBigDecimal(String)} */
     @Override
-    @Deprecated
-    public BigDecimal getBigDecimal(final int parameterIndex, final int scale) 
throws SQLException {
+    public byte[] getBytes(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return 
getDelegateCallableStatement().getBigDecimal(parameterIndex, scale);
+            return getDelegateCallableStatement().getBytes(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -197,10 +200,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public byte[] getBytes(final int parameterIndex) throws SQLException {
+    public byte[] getBytes(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getBytes(parameterIndex);
+            return getDelegateCallableStatement().getBytes(parameterName);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -208,10 +211,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public Date getDate(final int parameterIndex) throws SQLException {
+    public Reader getCharacterStream(final int parameterIndex) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getDate(parameterIndex);
+            return 
getDelegateCallableStatement().getCharacterStream(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -219,10 +222,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public Time getTime(final int parameterIndex) throws SQLException {
+    public Reader getCharacterStream(final String parameterName) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTime(parameterIndex);
+            return 
getDelegateCallableStatement().getCharacterStream(parameterName);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -230,10 +233,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public Timestamp getTimestamp(final int parameterIndex) throws 
SQLException {
+    public Clob getClob(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTimestamp(parameterIndex);
+            return getDelegateCallableStatement().getClob(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -241,10 +244,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public Object getObject(final int parameterIndex) throws SQLException {
+    public Clob getClob(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getObject(parameterIndex);
+            return getDelegateCallableStatement().getClob(parameterName);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -252,10 +255,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public BigDecimal getBigDecimal(final int parameterIndex) throws 
SQLException {
+    public Date getDate(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return 
getDelegateCallableStatement().getBigDecimal(parameterIndex);
+            return getDelegateCallableStatement().getDate(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -263,10 +266,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public Object getObject(final int i, final Map<String, Class<?>> map) 
throws SQLException {
+    public Date getDate(final int parameterIndex, final Calendar cal) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getObject(i, map);
+            return getDelegateCallableStatement().getDate(parameterIndex, cal);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -274,10 +277,10 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public Ref getRef(final int i) throws SQLException {
+    public Date getDate(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getRef(i);
+            return getDelegateCallableStatement().getDate(parameterName);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -285,119 +288,124 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public Blob getBlob(final int i) throws SQLException {
+    public Date getDate(final String parameterName, final Calendar cal) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getBlob(i);
+            return getDelegateCallableStatement().getDate(parameterName, cal);
         } catch (final SQLException e) {
             handleException(e);
             return null;
         }
     }
 
+    private CallableStatement getDelegateCallableStatement() {
+        return (CallableStatement) getDelegate();
+    }
+
     @Override
-    public Clob getClob(final int i) throws SQLException {
+    public double getDouble(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getClob(i);
+            return getDelegateCallableStatement().getDouble(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
+            return 0;
         }
     }
 
     @Override
-    public Array getArray(final int i) throws SQLException {
+    public double getDouble(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getArray(i);
+            return getDelegateCallableStatement().getDouble(parameterName);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
+            return 0;
         }
     }
 
     @Override
-    public Date getDate(final int parameterIndex, final Calendar cal) throws 
SQLException {
+    public float getFloat(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getDate(parameterIndex, cal);
+            return getDelegateCallableStatement().getFloat(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
+            return 0;
         }
     }
 
     @Override
-    public Time getTime(final int parameterIndex, final Calendar cal) throws 
SQLException {
+    public float getFloat(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTime(parameterIndex, cal);
+            return getDelegateCallableStatement().getFloat(parameterName);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
+            return 0;
         }
     }
 
     @Override
-    public Timestamp getTimestamp(final int parameterIndex, final Calendar 
cal) throws SQLException {
+    public int getInt(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTimestamp(parameterIndex, 
cal);
+            return getDelegateCallableStatement().getInt(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
+            return 0;
         }
     }
 
     @Override
-    public void registerOutParameter(final int paramIndex, final int sqlType, 
final String typeName)
-            throws SQLException {
+    public int getInt(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().registerOutParameter(paramIndex, 
sqlType, typeName);
+            return getDelegateCallableStatement().getInt(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return 0;
         }
     }
 
     @Override
-    public void registerOutParameter(final String parameterName, final int 
sqlType) throws SQLException {
+    public long getLong(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType);
+            return getDelegateCallableStatement().getLong(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return 0;
         }
     }
 
     @Override
-    public void registerOutParameter(final String parameterName, final int 
sqlType, final int scale)
-            throws SQLException {
+    public long getLong(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType, scale);
+            return getDelegateCallableStatement().getLong(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return 0;
         }
     }
 
     @Override
-    public void registerOutParameter(final String parameterName, final int 
sqlType, final String typeName)
-            throws SQLException {
+    public Reader getNCharacterStream(final int parameterIndex) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType, typeName);
+            return 
getDelegateCallableStatement().getNCharacterStream(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public URL getURL(final int parameterIndex) throws SQLException {
+    public Reader getNCharacterStream(final String parameterName) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getURL(parameterIndex);
+            return 
getDelegateCallableStatement().getNCharacterStream(parameterName);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -405,258 +413,285 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public void setURL(final String parameterName, final URL val) throws 
SQLException {
+    public NClob getNClob(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setURL(parameterName, val);
+            return getDelegateCallableStatement().getNClob(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setNull(final String parameterName, final int sqlType) throws 
SQLException {
+    public NClob getNClob(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNull(parameterName, sqlType);
+            return getDelegateCallableStatement().getNClob(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setBoolean(final String parameterName, final boolean x) throws 
SQLException {
+    public String getNString(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBoolean(parameterName, x);
+            return getDelegateCallableStatement().getNString(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setByte(final String parameterName, final byte x) throws 
SQLException {
+    public String getNString(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setByte(parameterName, x);
+            return getDelegateCallableStatement().getNString(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setShort(final String parameterName, final short x) throws 
SQLException {
+    public Object getObject(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setShort(parameterName, x);
+            return getDelegateCallableStatement().getObject(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setInt(final String parameterName, final int x) throws 
SQLException {
+    public <T> T getObject(final int parameterIndex, final Class<T> type) 
throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setInt(parameterName, x);
+            return getDelegateCallableStatement().getObject(parameterIndex, 
type);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setLong(final String parameterName, final long x) throws 
SQLException {
+    public Object getObject(final int i, final Map<String, Class<?>> map) 
throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setLong(parameterName, x);
+            return getDelegateCallableStatement().getObject(i, map);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setFloat(final String parameterName, final float x) throws 
SQLException {
+    public Object getObject(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setFloat(parameterName, x);
+            return getDelegateCallableStatement().getObject(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setDouble(final String parameterName, final double x) throws 
SQLException {
+    public <T> T getObject(final String parameterName, final Class<T> type) 
throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setDouble(parameterName, x);
+            return getDelegateCallableStatement().getObject(parameterName, 
type);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setBigDecimal(final String parameterName, final BigDecimal x) 
throws SQLException {
+    public Object getObject(final String parameterName, final Map<String, 
Class<?>> map) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBigDecimal(parameterName, x);
+            return getDelegateCallableStatement().getObject(parameterName, 
map);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setString(final String parameterName, final String x) throws 
SQLException {
+    public Ref getRef(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setString(parameterName, x);
+            return getDelegateCallableStatement().getRef(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setBytes(final String parameterName, final byte[] x) throws 
SQLException {
+    public Ref getRef(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBytes(parameterName, x);
+            return getDelegateCallableStatement().getRef(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setDate(final String parameterName, final Date x) throws 
SQLException {
+    public RowId getRowId(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setDate(parameterName, x);
+            return getDelegateCallableStatement().getRowId(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setTime(final String parameterName, final Time x) throws 
SQLException {
+    public RowId getRowId(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setTime(parameterName, x);
+            return getDelegateCallableStatement().getRowId(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setTimestamp(final String parameterName, final Timestamp x) 
throws SQLException {
+    public short getShort(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setTimestamp(parameterName, x);
+            return getDelegateCallableStatement().getShort(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return 0;
         }
     }
 
     @Override
-    public void setAsciiStream(final String parameterName, final InputStream 
x, final int length) throws SQLException {
+    public short getShort(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setAsciiStream(parameterName, x, 
length);
+            return getDelegateCallableStatement().getShort(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return 0;
         }
     }
 
     @Override
-    public void setBinaryStream(final String parameterName, final InputStream 
x, final int length) throws SQLException {
+    public SQLXML getSQLXML(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBinaryStream(parameterName, x, 
length);
+            return getDelegateCallableStatement().getSQLXML(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setObject(final String parameterName, final Object x, final 
int targetSqlType, final int scale)
-            throws SQLException {
+    public SQLXML getSQLXML(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setObject(parameterName, x, 
targetSqlType, scale);
+            return getDelegateCallableStatement().getSQLXML(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setObject(final String parameterName, final Object x, final 
int targetSqlType) throws SQLException {
+    public String getString(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setObject(parameterName, x, 
targetSqlType);
+            return getDelegateCallableStatement().getString(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setObject(final String parameterName, final Object x) throws 
SQLException {
+    public String getString(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setObject(parameterName, x);
+            return getDelegateCallableStatement().getString(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setCharacterStream(final String parameterName, final Reader 
reader, final int length)
-            throws SQLException {
+    public Time getTime(final int parameterIndex) throws SQLException {
         checkOpen();
-        getDelegateCallableStatement().setCharacterStream(parameterName, 
reader, length);
-    }
-
-    @Override
-    public void setDate(final String parameterName, final Date x, final 
Calendar cal) throws SQLException {
+        try {
+            return getDelegateCallableStatement().getTime(parameterIndex);
+        } catch (final SQLException e) {
+            handleException(e);
+            return null;
+        }
+    }
+
+    @Override
+    public Time getTime(final int parameterIndex, final Calendar cal) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setDate(parameterName, x, cal);
+            return getDelegateCallableStatement().getTime(parameterIndex, cal);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setTime(final String parameterName, final Time x, final 
Calendar cal) throws SQLException {
+    public Time getTime(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setTime(parameterName, x, cal);
+            return getDelegateCallableStatement().getTime(parameterName);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setTimestamp(final String parameterName, final Timestamp x, 
final Calendar cal) throws SQLException {
+    public Time getTime(final String parameterName, final Calendar cal) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setTimestamp(parameterName, x, cal);
+            return getDelegateCallableStatement().getTime(parameterName, cal);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public void setNull(final String parameterName, final int sqlType, final 
String typeName) throws SQLException {
+    public Timestamp getTimestamp(final int parameterIndex) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNull(parameterName, sqlType, 
typeName);
+            return getDelegateCallableStatement().getTimestamp(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
+            return null;
         }
     }
 
     @Override
-    public String getString(final String parameterName) throws SQLException {
+    public Timestamp getTimestamp(final int parameterIndex, final Calendar 
cal) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getString(parameterName);
+            return getDelegateCallableStatement().getTimestamp(parameterIndex, 
cal);
         } catch (final SQLException e) {
             handleException(e);
             return null;
@@ -664,309 +699,370 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public boolean getBoolean(final String parameterName) throws SQLException {
+    public Timestamp getTimestamp(final String parameterName) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getBoolean(parameterName);
+            return getDelegateCallableStatement().getTimestamp(parameterName);
         } catch (final SQLException e) {
             handleException(e);
-            return false;
+            return null;
         }
     }
 
     @Override
-    public byte getByte(final String parameterName) throws SQLException {
+    public Timestamp getTimestamp(final String parameterName, final Calendar 
cal) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getByte(parameterName);
+            return getDelegateCallableStatement().getTimestamp(parameterName, 
cal);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
+            return null;
         }
     }
 
     @Override
-    public short getShort(final String parameterName) throws SQLException {
+    public URL getURL(final int parameterIndex) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getShort(parameterName);
+            return getDelegateCallableStatement().getURL(parameterIndex);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
+            return null;
         }
     }
 
     @Override
-    public int getInt(final String parameterName) throws SQLException {
+    public URL getURL(final String parameterName) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getInt(parameterName);
+            return getDelegateCallableStatement().getURL(parameterName);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
+            return null;
         }
     }
 
     @Override
-    public long getLong(final String parameterName) throws SQLException {
+    public void registerOutParameter(final int parameterIndex, final int 
sqlType) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getLong(parameterName);
+            
getDelegateCallableStatement().registerOutParameter(parameterIndex, sqlType);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
         }
     }
 
     @Override
-    public float getFloat(final String parameterName) throws SQLException {
+    public void registerOutParameter(final int parameterIndex, final int 
sqlType, final int scale) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getFloat(parameterName);
+            
getDelegateCallableStatement().registerOutParameter(parameterIndex, sqlType, 
scale);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
         }
     }
 
     @Override
-    public double getDouble(final String parameterName) throws SQLException {
+    public void registerOutParameter(final int paramIndex, final int sqlType, 
final String typeName)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getDouble(parameterName);
+            getDelegateCallableStatement().registerOutParameter(paramIndex, 
sqlType, typeName);
         } catch (final SQLException e) {
             handleException(e);
-            return 0;
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public byte[] getBytes(final String parameterName) throws SQLException {
+    public void registerOutParameter(final int parameterIndex, final SQLType 
sqlType) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getBytes(parameterName);
+            
getDelegateCallableStatement().registerOutParameter(parameterIndex, sqlType);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public Date getDate(final String parameterName) throws SQLException {
+    public void registerOutParameter(final int parameterIndex, final SQLType 
sqlType, final int scale)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getDate(parameterName);
+            
getDelegateCallableStatement().registerOutParameter(parameterIndex, sqlType, 
scale);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public Time getTime(final String parameterName) throws SQLException {
+    public void registerOutParameter(final int parameterIndex, final SQLType 
sqlType, final String typeName)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTime(parameterName);
+            
getDelegateCallableStatement().registerOutParameter(parameterIndex, sqlType, 
typeName);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Timestamp getTimestamp(final String parameterName) throws 
SQLException {
+    public void registerOutParameter(final String parameterName, final int 
sqlType) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTimestamp(parameterName);
+            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Object getObject(final String parameterName) throws SQLException {
+    public void registerOutParameter(final String parameterName, final int 
sqlType, final int scale)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getObject(parameterName);
+            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType, scale);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public BigDecimal getBigDecimal(final String parameterName) throws 
SQLException {
+    public void registerOutParameter(final String parameterName, final int 
sqlType, final String typeName)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getBigDecimal(parameterName);
+            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType, typeName);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public Object getObject(final String parameterName, final Map<String, 
Class<?>> map) throws SQLException {
+    public void registerOutParameter(final String parameterName, final SQLType 
sqlType) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getObject(parameterName, 
map);
+            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public Ref getRef(final String parameterName) throws SQLException {
+    public void registerOutParameter(final String parameterName, final SQLType 
sqlType, final int scale)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getRef(parameterName);
+            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType, scale);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public Blob getBlob(final String parameterName) throws SQLException {
+    public void registerOutParameter(final String parameterName, final SQLType 
sqlType, final String typeName)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getBlob(parameterName);
+            getDelegateCallableStatement().registerOutParameter(parameterName, 
sqlType, typeName);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Clob getClob(final String parameterName) throws SQLException {
+    public void setAsciiStream(final String parameterName, final InputStream 
inputStream) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getClob(parameterName);
+            getDelegateCallableStatement().setAsciiStream(parameterName, 
inputStream);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Array getArray(final String parameterName) throws SQLException {
+    public void setAsciiStream(final String parameterName, final InputStream 
x, final int length) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getArray(parameterName);
+            getDelegateCallableStatement().setAsciiStream(parameterName, x, 
length);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Date getDate(final String parameterName, final Calendar cal) throws 
SQLException {
+    public void setAsciiStream(final String parameterName, final InputStream 
inputStream, final long length)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getDate(parameterName, cal);
+            getDelegateCallableStatement().setAsciiStream(parameterName, 
inputStream, length);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
-    private CallableStatement getDelegateCallableStatement() {
-        return (CallableStatement) getDelegate();
+    @Override
+    public void setBigDecimal(final String parameterName, final BigDecimal x) 
throws SQLException {
+        checkOpen();
+        try {
+            getDelegateCallableStatement().setBigDecimal(parameterName, x);
+        } catch (final SQLException e) {
+            handleException(e);
+        }
     }
 
     @Override
-    public Time getTime(final String parameterName, final Calendar cal) throws 
SQLException {
+    public void setBinaryStream(final String parameterName, final InputStream 
inputStream) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTime(parameterName, cal);
+            getDelegateCallableStatement().setBinaryStream(parameterName, 
inputStream);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Timestamp getTimestamp(final String parameterName, final Calendar 
cal) throws SQLException {
+    public void setBinaryStream(final String parameterName, final InputStream 
x, final int length) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getTimestamp(parameterName, 
cal);
+            getDelegateCallableStatement().setBinaryStream(parameterName, x, 
length);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public URL getURL(final String parameterName) throws SQLException {
+    public void setBinaryStream(final String parameterName, final InputStream 
inputStream, final long length)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getURL(parameterName);
+            getDelegateCallableStatement().setBinaryStream(parameterName, 
inputStream, length);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public RowId getRowId(final int parameterIndex) throws SQLException {
+    public void setBlob(final String parameterName, final Blob blob) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getRowId(parameterIndex);
+            getDelegateCallableStatement().setBlob(parameterName, blob);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public RowId getRowId(final String parameterName) throws SQLException {
+    public void setBlob(final String parameterName, final InputStream 
inputStream) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getRowId(parameterName);
+            getDelegateCallableStatement().setBlob(parameterName, inputStream);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public void setRowId(final String parameterName, final RowId value) throws 
SQLException {
+    public void setBlob(final String parameterName, final InputStream 
inputStream, final long length)
+            throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setRowId(parameterName, value);
+            getDelegateCallableStatement().setBlob(parameterName, inputStream, 
length);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setNString(final String parameterName, final String value) 
throws SQLException {
+    public void setBoolean(final String parameterName, final boolean x) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNString(parameterName, value);
+            getDelegateCallableStatement().setBoolean(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setNCharacterStream(final String parameterName, final Reader 
reader, final long length)
+    public void setByte(final String parameterName, final byte x) throws 
SQLException {
+        checkOpen();
+        try {
+            getDelegateCallableStatement().setByte(parameterName, x);
+        } catch (final SQLException e) {
+            handleException(e);
+        }
+    }
+
+    @Override
+    public void setBytes(final String parameterName, final byte[] x) throws 
SQLException {
+        checkOpen();
+        try {
+            getDelegateCallableStatement().setBytes(parameterName, x);
+        } catch (final SQLException e) {
+            handleException(e);
+        }
+    }
+
+    @Override
+    public void setCharacterStream(final String parameterName, final Reader 
reader) throws SQLException {
+        checkOpen();
+        try {
+            getDelegateCallableStatement().setCharacterStream(parameterName, 
reader);
+        } catch (final SQLException e) {
+            handleException(e);
+        }
+    }
+
+    @Override
+    public void setCharacterStream(final String parameterName, final Reader 
reader, final int length)
+            throws SQLException {
+        checkOpen();
+        getDelegateCallableStatement().setCharacterStream(parameterName, 
reader, length);
+    }
+
+    @Override
+    public void setCharacterStream(final String parameterName, final Reader 
reader, final long length)
             throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNCharacterStream(parameterName, 
reader, length);
+            getDelegateCallableStatement().setCharacterStream(parameterName, 
reader, length);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setNClob(final String parameterName, final NClob value) throws 
SQLException {
+    public void setClob(final String parameterName, final Clob clob) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNClob(parameterName, value);
+            getDelegateCallableStatement().setClob(parameterName, clob);
+        } catch (final SQLException e) {
+            handleException(e);
+        }
+    }
+
+    @Override
+    public void setClob(final String parameterName, final Reader reader) 
throws SQLException {
+        checkOpen();
+        try {
+            getDelegateCallableStatement().setClob(parameterName, reader);
         } catch (final SQLException e) {
             handleException(e);
         }
@@ -983,288 +1079,302 @@ public class DelegatingCallableStatement
     }
 
     @Override
-    public void setBlob(final String parameterName, final InputStream 
inputStream, final long length)
-            throws SQLException {
+    public void setDate(final String parameterName, final Date x) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBlob(parameterName, inputStream, 
length);
+            getDelegateCallableStatement().setDate(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setNClob(final String parameterName, final Reader reader, 
final long length) throws SQLException {
+    public void setDate(final String parameterName, final Date x, final 
Calendar cal) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNClob(parameterName, reader, 
length);
+            getDelegateCallableStatement().setDate(parameterName, x, cal);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public NClob getNClob(final int parameterIndex) throws SQLException {
+    public void setDouble(final String parameterName, final double x) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getNClob(parameterIndex);
+            getDelegateCallableStatement().setDouble(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public NClob getNClob(final String parameterName) throws SQLException {
+    public void setFloat(final String parameterName, final float x) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getNClob(parameterName);
+            getDelegateCallableStatement().setFloat(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public void setSQLXML(final String parameterName, final SQLXML value) 
throws SQLException {
+    public void setInt(final String parameterName, final int x) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setSQLXML(parameterName, value);
+            getDelegateCallableStatement().setInt(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public SQLXML getSQLXML(final int parameterIndex) throws SQLException {
+    public void setLong(final String parameterName, final long x) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getSQLXML(parameterIndex);
+            getDelegateCallableStatement().setLong(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public SQLXML getSQLXML(final String parameterName) throws SQLException {
+    public void setNCharacterStream(final String parameterName, final Reader 
reader) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getSQLXML(parameterName);
+            getDelegateCallableStatement().setNCharacterStream(parameterName, 
reader);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public String getNString(final int parameterIndex) throws SQLException {
+    public void setNCharacterStream(final String parameterName, final Reader 
reader, final long length)
+            throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getNString(parameterIndex);
+            getDelegateCallableStatement().setNCharacterStream(parameterName, 
reader, length);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public String getNString(final String parameterName) throws SQLException {
+    public void setNClob(final String parameterName, final NClob value) throws 
SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getNString(parameterName);
+            getDelegateCallableStatement().setNClob(parameterName, value);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Reader getNCharacterStream(final int parameterIndex) throws 
SQLException {
+    public void setNClob(final String parameterName, final Reader reader) 
throws SQLException {
         checkOpen();
         try {
-            return 
getDelegateCallableStatement().getNCharacterStream(parameterIndex);
+            getDelegateCallableStatement().setNClob(parameterName, reader);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Reader getNCharacterStream(final String parameterName) throws 
SQLException {
+    public void setNClob(final String parameterName, final Reader reader, 
final long length) throws SQLException {
         checkOpen();
         try {
-            return 
getDelegateCallableStatement().getNCharacterStream(parameterName);
+            getDelegateCallableStatement().setNClob(parameterName, reader, 
length);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Reader getCharacterStream(final int parameterIndex) throws 
SQLException {
+    public void setNString(final String parameterName, final String value) 
throws SQLException {
         checkOpen();
         try {
-            return 
getDelegateCallableStatement().getCharacterStream(parameterIndex);
+            getDelegateCallableStatement().setNString(parameterName, value);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public Reader getCharacterStream(final String parameterName) throws 
SQLException {
+    public void setNull(final String parameterName, final int sqlType) throws 
SQLException {
         checkOpen();
         try {
-            return 
getDelegateCallableStatement().getCharacterStream(parameterName);
+            getDelegateCallableStatement().setNull(parameterName, sqlType);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public void setBlob(final String parameterName, final Blob blob) throws 
SQLException {
+    public void setNull(final String parameterName, final int sqlType, final 
String typeName) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBlob(parameterName, blob);
+            getDelegateCallableStatement().setNull(parameterName, sqlType, 
typeName);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setClob(final String parameterName, final Clob clob) throws 
SQLException {
+    public void setObject(final String parameterName, final Object x) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setClob(parameterName, clob);
+            getDelegateCallableStatement().setObject(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setAsciiStream(final String parameterName, final InputStream 
inputStream, final long length)
-            throws SQLException {
+    public void setObject(final String parameterName, final Object x, final 
int targetSqlType) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setAsciiStream(parameterName, 
inputStream, length);
+            getDelegateCallableStatement().setObject(parameterName, x, 
targetSqlType);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setBinaryStream(final String parameterName, final InputStream 
inputStream, final long length)
+    public void setObject(final String parameterName, final Object x, final 
int targetSqlType, final int scale)
             throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBinaryStream(parameterName, 
inputStream, length);
+            getDelegateCallableStatement().setObject(parameterName, x, 
targetSqlType, scale);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public void setCharacterStream(final String parameterName, final Reader 
reader, final long length)
-            throws SQLException {
+    public void setObject(final String parameterName, final Object x, final 
SQLType targetSqlType) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setCharacterStream(parameterName, 
reader, length);
+            getDelegateCallableStatement().setObject(parameterName, x, 
targetSqlType);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
+    /**
+     * @since 2.5.0
+     */
     @Override
-    public void setAsciiStream(final String parameterName, final InputStream 
inputStream) throws SQLException {
+    public void setObject(final String parameterName, final Object x, final 
SQLType targetSqlType,
+            final int scaleOrLength) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setAsciiStream(parameterName, 
inputStream);
+            getDelegateCallableStatement().setObject(parameterName, x, 
targetSqlType, scaleOrLength);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setBinaryStream(final String parameterName, final InputStream 
inputStream) throws SQLException {
+    public void setRowId(final String parameterName, final RowId value) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBinaryStream(parameterName, 
inputStream);
+            getDelegateCallableStatement().setRowId(parameterName, value);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setCharacterStream(final String parameterName, final Reader 
reader) throws SQLException {
+    public void setShort(final String parameterName, final short x) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setCharacterStream(parameterName, 
reader);
+            getDelegateCallableStatement().setShort(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setNCharacterStream(final String parameterName, final Reader 
reader) throws SQLException {
+    public void setSQLXML(final String parameterName, final SQLXML value) 
throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNCharacterStream(parameterName, 
reader);
+            getDelegateCallableStatement().setSQLXML(parameterName, value);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setClob(final String parameterName, final Reader reader) 
throws SQLException {
+    public void setString(final String parameterName, final String x) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setClob(parameterName, reader);
+            getDelegateCallableStatement().setString(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setBlob(final String parameterName, final InputStream 
inputStream) throws SQLException {
+    public void setTime(final String parameterName, final Time x) throws 
SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setBlob(parameterName, inputStream);
+            getDelegateCallableStatement().setTime(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public void setNClob(final String parameterName, final Reader reader) 
throws SQLException {
+    public void setTime(final String parameterName, final Time x, final 
Calendar cal) throws SQLException {
         checkOpen();
         try {
-            getDelegateCallableStatement().setNClob(parameterName, reader);
+            getDelegateCallableStatement().setTime(parameterName, x, cal);
         } catch (final SQLException e) {
             handleException(e);
         }
     }
 
     @Override
-    public <T> T getObject(final int parameterIndex, final Class<T> type) 
throws SQLException {
+    public void setTimestamp(final String parameterName, final Timestamp x) 
throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getObject(parameterIndex, 
type);
+            getDelegateCallableStatement().setTimestamp(parameterName, x);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
         }
     }
 
     @Override
-    public <T> T getObject(final String parameterName, final Class<T> type) 
throws SQLException {
+    public void setTimestamp(final String parameterName, final Timestamp x, 
final Calendar cal) throws SQLException {
         checkOpen();
         try {
-            return getDelegateCallableStatement().getObject(parameterName, 
type);
+            getDelegateCallableStatement().setTimestamp(parameterName, x, cal);
         } catch (final SQLException e) {
             handleException(e);
-            return null;
+        }
+    }
+
+    @Override
+    public void setURL(final String parameterName, final URL val) throws 
SQLException {
+        checkOpen();
+        try {
+            getDelegateCallableStatement().setURL(parameterName, val);
+        } catch (final SQLException e) {
+            handleException(e);
+        }
+    }
+
+    @Override
+    public boolean wasNull() throws SQLException {
+        checkOpen();
+        try {
+            return getDelegateCallableStatement().wasNull();
+        } catch (final SQLException e) {
+            handleException(e);
+            return false;
         }
     }
 

Modified: 
tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingConnection.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingConnection.java?rev=1837746&r1=1837745&r2=1837746&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingConnection.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/dbcp/dbcp2/DelegatingConnection.java 
Thu Aug  9 16:50:30 2018
@@ -224,8 +224,20 @@ public class DelegatingConnection<C exte
             passivate();
         } finally {
             if (connection != null) {
+                boolean connectionIsClosed;
                 try {
-                    connection.close();
+                    connectionIsClosed = connection.isClosed();
+                } catch (final SQLException e) {
+                    // not sure what the state is, so assume the connection is 
open.
+                    connectionIsClosed = false;
+                }
+                try {
+                    // DBCP-512: Avoid exceptions when closing a connection in 
mutli-threaded use case.
+                    // Avoid closing again, which should be a no-op, but some 
drivers like H2 throw an exception when
+                    // closing from multiple threads.
+                    if (!connectionIsClosed) {
+                        connection.close();
+                    }
                 } finally {
                     closed = true;
                 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to