diff --git a/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java b/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java
index 500eb11..82bd55c 100644
--- a/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java
+++ b/java/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.java
@@ -412,7 +412,6 @@
      *
      * @param lifo
      *            the new value for the LIFO property
-     *
      */
     public synchronized void setLifo(final boolean lifo) {
         this.lifo = lifo;
@@ -2027,13 +2026,6 @@
             throw new IllegalStateException("Cannot invalidate connection: Unwrapping poolable connection failed.", e);
         }
 
-        // attempt to close the connection for good measure
-        try {
-            connection.close();
-        } catch (Exception e) {
-            // ignore any exceptions here
-        }
-
         try {
             connectionPool.invalidateObject(poolableConnection);
         } catch (final Exception e) {
diff --git a/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java b/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java
index 3b4119b..0466ec6 100644
--- a/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java
+++ b/java/org/apache/tomcat/dbcp/dbcp2/DelegatingCallableStatement.java
@@ -183,7 +183,7 @@
         }
     }
 
-    /** @deprecated */
+    /** @deprecated Use {@link #getBigDecimal(int)} or {@link #getBigDecimal(String)} */
     @Override
     @Deprecated
     public BigDecimal getBigDecimal(final int parameterIndex, final int scale) throws SQLException {
diff --git a/java/org/apache/tomcat/dbcp/dbcp2/DelegatingPreparedStatement.java b/java/org/apache/tomcat/dbcp/dbcp2/DelegatingPreparedStatement.java
index 26de0cf..ca50f67 100644
--- a/java/org/apache/tomcat/dbcp/dbcp2/DelegatingPreparedStatement.java
+++ b/java/org/apache/tomcat/dbcp/dbcp2/DelegatingPreparedStatement.java
@@ -245,7 +245,7 @@
         }
     }
 
-    /** @deprecated */
+    /** @deprecated Use setAsciiStream(), setCharacterStream() or setNCharacterStream() */
     @Deprecated
     @Override
     public void setUnicodeStream(final int parameterIndex, final InputStream x, final int length) throws SQLException {
diff --git a/java/org/apache/tomcat/dbcp/dbcp2/DelegatingResultSet.java b/java/org/apache/tomcat/dbcp/dbcp2/DelegatingResultSet.java
index 3cff4e4..b7e1ba0 100644
--- a/java/org/apache/tomcat/dbcp/dbcp2/DelegatingResultSet.java
+++ b/java/org/apache/tomcat/dbcp/dbcp2/DelegatingResultSet.java
@@ -301,7 +301,7 @@
         }
     }
 
-    /** @deprecated */
+    /** @deprecated Use {@link #getBigDecimal(int)} */
     @Deprecated
     @Override
     public BigDecimal getBigDecimal(final int columnIndex, final int scale) throws SQLException {
@@ -363,7 +363,7 @@
         }
     }
 
-    /** @deprecated */
+    /** @deprecated Use {@link #getCharacterStream(int)} */
     @Deprecated
     @Override
     public InputStream getUnicodeStream(final int columnIndex) throws SQLException {
@@ -465,7 +465,7 @@
         }
     }
 
-    /** @deprecated */
+    /** @deprecated Use {@link #getBigDecimal(String)} */
     @Deprecated
     @Override
     public BigDecimal getBigDecimal(final String columnName, final int scale) throws SQLException {
@@ -527,7 +527,7 @@
         }
     }
 
-    /** @deprecated */
+    /** @deprecated Use {@link #getCharacterStream(String)} */
     @Deprecated
     @Override
     public InputStream getUnicodeStream(final String columnName) throws SQLException {
diff --git a/java/org/apache/tomcat/dbcp/dbcp2/LifetimeExceededException.java b/java/org/apache/tomcat/dbcp/dbcp2/LifetimeExceededException.java
index 31f8030..2d440cb 100644
--- a/java/org/apache/tomcat/dbcp/dbcp2/LifetimeExceededException.java
+++ b/java/org/apache/tomcat/dbcp/dbcp2/LifetimeExceededException.java
@@ -41,5 +41,4 @@
     public LifetimeExceededException(final String message) {
         super(message);
     }
-
 }
diff --git a/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnection.java b/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnection.java
index 2a7f4e4..5a74747 100644
--- a/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnection.java
+++ b/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnection.java
@@ -44,7 +44,7 @@
     static {
         try {
             MBEAN_SERVER = ManagementFactory.getPlatformMBeanServer();
-        } catch (Exception ex) {
+        } catch (NoClassDefFoundError | Exception ex) {
             // ignore - JMX not available
         }
     }
diff --git a/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java b/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java
index c51cdd9..469dc7d 100644
--- a/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java
+++ b/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java
@@ -340,7 +340,7 @@
             throw new SQLException("initializeConnection: connection closed");
         }
         if (null != sqls) {
-            try (Statement stmt = conn.createStatement();) {
+            try (Statement stmt = conn.createStatement()) {
                 for (final String sql : sqls) {
                     Objects.requireNonNull(sql, "null connectionInitSqls element");
                     stmt.execute(sql);
diff --git a/java/org/apache/tomcat/dbcp/pool2/PoolUtils.java b/java/org/apache/tomcat/dbcp/pool2/PoolUtils.java
index e90afe8..4fb0aba 100644
--- a/java/org/apache/tomcat/dbcp/pool2/PoolUtils.java
+++ b/java/org/apache/tomcat/dbcp/pool2/PoolUtils.java
@@ -1599,7 +1599,7 @@
          * @param erodingFactor
          *            erosion factor - determines the frequency of erosion
          *            events
-         * @see #factor
+         * @see #erodingFactor
          */
         protected ErodingKeyedObjectPool(final KeyedObjectPool<K, V> keyedPool,
                 final ErodingFactor erodingFactor) {
diff --git a/java/org/apache/tomcat/dbcp/pool2/impl/AbandonedConfig.java b/java/org/apache/tomcat/dbcp/pool2/impl/AbandonedConfig.java
index 8188978..31eeb32 100644
--- a/java/org/apache/tomcat/dbcp/pool2/impl/AbandonedConfig.java
+++ b/java/org/apache/tomcat/dbcp/pool2/impl/AbandonedConfig.java
@@ -232,9 +232,10 @@
     }
 
     /**
-     * If the pool implements {@link UsageTracking}, should the pool record a
-     * stack trace every time a method is called on a pooled object and retain
-     * the most recent stack trace to aid debugging of abandoned objects?
+     * If the pool implements
+     * {@link org.apache.tomcat.dbcp.pool2.UsageTracking}, should the pool
+     * record a stack trace every time a method is called on a pooled object and
+     * retain the most recent stack trace to aid debugging of abandoned objects?
      */
     private boolean useUsageTracking = false;
 
diff --git a/java/org/apache/tomcat/dbcp/pool2/impl/SoftReferenceObjectPool.java b/java/org/apache/tomcat/dbcp/pool2/impl/SoftReferenceObjectPool.java
index 66154a5..61741be 100644
--- a/java/org/apache/tomcat/dbcp/pool2/impl/SoftReferenceObjectPool.java
+++ b/java/org/apache/tomcat/dbcp/pool2/impl/SoftReferenceObjectPool.java
@@ -111,7 +111,7 @@
      *             if an exception occurs creating a new instance
      * @return a valid, activated object instance
      */
-    @SuppressWarnings("null") // ref can not be null
+    @SuppressWarnings("null") // ref cannot be null
     @Override
     public synchronized T borrowObject() throws Exception {
         assertOpen();
