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 2022/07/09 22:44:25 UTC
[commons-dbcp] branch master updated: Make package-private classes final
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git
The following commit(s) were added to refs/heads/master by this push:
new 6758c426 Make package-private classes final
6758c426 is described below
commit 6758c426aa908ea061bbcb41f9fe77a0b9e2a500
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jul 9 18:44:20 2022 -0400
Make package-private classes final
---
.../commons/dbcp2/ConnectionFactoryFactory.java | 152 ++---
.../org/apache/commons/dbcp2/DriverFactory.java | 160 +++---
.../commons/dbcp2/LifetimeExceededException.java | 2 +-
.../apache/commons/dbcp2/ObjectNameWrapper.java | 208 +++----
.../commons/dbcp2/cpdsadapter/ConnectionImpl.java | 614 ++++++++++-----------
.../dbcp2/cpdsadapter/PooledConnectionImpl.java | 2 +-
.../dbcp2/datasources/CPDSConnectionFactory.java | 2 +-
.../datasources/KeyedCPDSConnectionFactory.java | 2 +-
.../apache/commons/dbcp2/datasources/PoolKey.java | 134 ++---
.../commons/dbcp2/datasources/UserPassKey.java | 238 ++++----
10 files changed, 757 insertions(+), 757 deletions(-)
diff --git a/src/main/java/org/apache/commons/dbcp2/ConnectionFactoryFactory.java b/src/main/java/org/apache/commons/dbcp2/ConnectionFactoryFactory.java
index b008413c..451edf1a 100644
--- a/src/main/java/org/apache/commons/dbcp2/ConnectionFactoryFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/ConnectionFactoryFactory.java
@@ -1,76 +1,76 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.dbcp2;
-
-import java.sql.Driver;
-import java.sql.SQLException;
-import java.util.Properties;
-
-/*
- * Creates {@link ConnectionFactory} instances.
- *
- * @since 2.7.0
- */
-class ConnectionFactoryFactory {
-
- /**
- * Creates a new {@link DriverConnectionFactory} allowing for an override through
- * {@link BasicDataSource#getDriverClassName()}.
- *
- * @param basicDataSource Configures creation.
- * @param driver The JDBC driver.
- * @return a new {@link DriverConnectionFactory} allowing for a {@link BasicDataSource#getDriverClassName()}
- * override.
- * @throws SQLException Thrown when instantiation fails.
- */
- static ConnectionFactory createConnectionFactory(final BasicDataSource basicDataSource, final Driver driver)
- throws SQLException {
- final Properties connectionProperties = basicDataSource.getConnectionProperties();
- final String url = basicDataSource.getUrl();
- // Set up the driver connection factory we will use
- final String user = basicDataSource.getUsername();
- if (user != null) {
- connectionProperties.put(Constants.KEY_USER, user);
- } else {
- basicDataSource.log("DBCP DataSource configured without a 'username'");
- }
-
- final String pwd = basicDataSource.getPassword();
- if (pwd != null) {
- connectionProperties.put("password", pwd);
- } else {
- basicDataSource.log("DBCP DataSource configured without a 'password'");
- }
- final String connectionFactoryClassName = basicDataSource.getConnectionFactoryClassName();
- if (connectionFactoryClassName != null) {
- try {
- final Class<?> connectionFactoryFromCCL = Class.forName(connectionFactoryClassName);
- return (ConnectionFactory) connectionFactoryFromCCL
- .getConstructor(Driver.class, String.class, Properties.class)
- .newInstance(driver, url, connectionProperties);
- } catch (final Exception t) {
- final String message = "Cannot load ConnectionFactory implementation '" + connectionFactoryClassName
- + "'";
- basicDataSource.log(message, t);
- throw new SQLException(message, t);
- }
- }
- // Defaults to DriverConnectionFactory
- return new DriverConnectionFactory(driver, url, connectionProperties);
- }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbcp2;
+
+import java.sql.Driver;
+import java.sql.SQLException;
+import java.util.Properties;
+
+/*
+ * Creates {@link ConnectionFactory} instances.
+ *
+ * @since 2.7.0
+ */
+final class ConnectionFactoryFactory {
+
+ /**
+ * Creates a new {@link DriverConnectionFactory} allowing for an override through
+ * {@link BasicDataSource#getDriverClassName()}.
+ *
+ * @param basicDataSource Configures creation.
+ * @param driver The JDBC driver.
+ * @return a new {@link DriverConnectionFactory} allowing for a {@link BasicDataSource#getDriverClassName()}
+ * override.
+ * @throws SQLException Thrown when instantiation fails.
+ */
+ static ConnectionFactory createConnectionFactory(final BasicDataSource basicDataSource, final Driver driver)
+ throws SQLException {
+ final Properties connectionProperties = basicDataSource.getConnectionProperties();
+ final String url = basicDataSource.getUrl();
+ // Set up the driver connection factory we will use
+ final String user = basicDataSource.getUsername();
+ if (user != null) {
+ connectionProperties.put(Constants.KEY_USER, user);
+ } else {
+ basicDataSource.log("DBCP DataSource configured without a 'username'");
+ }
+
+ final String pwd = basicDataSource.getPassword();
+ if (pwd != null) {
+ connectionProperties.put("password", pwd);
+ } else {
+ basicDataSource.log("DBCP DataSource configured without a 'password'");
+ }
+ final String connectionFactoryClassName = basicDataSource.getConnectionFactoryClassName();
+ if (connectionFactoryClassName != null) {
+ try {
+ final Class<?> connectionFactoryFromCCL = Class.forName(connectionFactoryClassName);
+ return (ConnectionFactory) connectionFactoryFromCCL
+ .getConstructor(Driver.class, String.class, Properties.class)
+ .newInstance(driver, url, connectionProperties);
+ } catch (final Exception t) {
+ final String message = "Cannot load ConnectionFactory implementation '" + connectionFactoryClassName
+ + "'";
+ basicDataSource.log(message, t);
+ throw new SQLException(message, t);
+ }
+ }
+ // Defaults to DriverConnectionFactory
+ return new DriverConnectionFactory(driver, url, connectionProperties);
+ }
+
+}
diff --git a/src/main/java/org/apache/commons/dbcp2/DriverFactory.java b/src/main/java/org/apache/commons/dbcp2/DriverFactory.java
index 28d57051..77704e48 100644
--- a/src/main/java/org/apache/commons/dbcp2/DriverFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/DriverFactory.java
@@ -1,80 +1,80 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.dbcp2;
-
-import java.sql.Driver;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-/*
- * Creates {@link Driver} instances.
- *
- * @since 2.7.0
- */
-class DriverFactory {
-
- static Driver createDriver(final BasicDataSource basicDataSource) throws SQLException {
- // Load the JDBC driver class
- Driver driverToUse = basicDataSource.getDriver();
- final String driverClassName = basicDataSource.getDriverClassName();
- final ClassLoader driverClassLoader = basicDataSource.getDriverClassLoader();
- final String url = basicDataSource.getUrl();
-
- if (driverToUse == null) {
- Class<?> driverFromCCL = null;
- if (driverClassName != null) {
- try {
- try {
- if (driverClassLoader == null) {
- driverFromCCL = Class.forName(driverClassName);
- } else {
- driverFromCCL = Class.forName(driverClassName, true, driverClassLoader);
- }
- } catch (final ClassNotFoundException cnfe) {
- driverFromCCL = Thread.currentThread().getContextClassLoader().loadClass(driverClassName);
- }
- } catch (final Exception t) {
- final String message = "Cannot load JDBC driver class '" + driverClassName + "'";
- basicDataSource.log(message, t);
- throw new SQLException(message, t);
- }
- }
-
- try {
- if (driverFromCCL == null) {
- driverToUse = DriverManager.getDriver(url);
- } else {
- // Usage of DriverManager is not possible, as it does not
- // respect the ContextClassLoader
- // N.B. This cast may cause ClassCastException which is
- // handled below
- driverToUse = (Driver) driverFromCCL.getConstructor().newInstance();
- if (!driverToUse.acceptsURL(url)) {
- throw new SQLException("No suitable driver", "08001");
- }
- }
- } catch (final Exception t) {
- final String message = "Cannot create JDBC driver of class '"
- + (driverClassName != null ? driverClassName : "") + "' for connect URL '" + url + "'";
- basicDataSource.log(message, t);
- throw new SQLException(message, t);
- }
- }
- return driverToUse;
- }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbcp2;
+
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+/*
+ * Creates {@link Driver} instances.
+ *
+ * @since 2.7.0
+ */
+final class DriverFactory {
+
+ static Driver createDriver(final BasicDataSource basicDataSource) throws SQLException {
+ // Load the JDBC driver class
+ Driver driverToUse = basicDataSource.getDriver();
+ final String driverClassName = basicDataSource.getDriverClassName();
+ final ClassLoader driverClassLoader = basicDataSource.getDriverClassLoader();
+ final String url = basicDataSource.getUrl();
+
+ if (driverToUse == null) {
+ Class<?> driverFromCCL = null;
+ if (driverClassName != null) {
+ try {
+ try {
+ if (driverClassLoader == null) {
+ driverFromCCL = Class.forName(driverClassName);
+ } else {
+ driverFromCCL = Class.forName(driverClassName, true, driverClassLoader);
+ }
+ } catch (final ClassNotFoundException cnfe) {
+ driverFromCCL = Thread.currentThread().getContextClassLoader().loadClass(driverClassName);
+ }
+ } catch (final Exception t) {
+ final String message = "Cannot load JDBC driver class '" + driverClassName + "'";
+ basicDataSource.log(message, t);
+ throw new SQLException(message, t);
+ }
+ }
+
+ try {
+ if (driverFromCCL == null) {
+ driverToUse = DriverManager.getDriver(url);
+ } else {
+ // Usage of DriverManager is not possible, as it does not
+ // respect the ContextClassLoader
+ // N.B. This cast may cause ClassCastException which is
+ // handled below
+ driverToUse = (Driver) driverFromCCL.getConstructor().newInstance();
+ if (!driverToUse.acceptsURL(url)) {
+ throw new SQLException("No suitable driver", "08001");
+ }
+ }
+ } catch (final Exception t) {
+ final String message = "Cannot create JDBC driver of class '"
+ + (driverClassName != null ? driverClassName : "") + "' for connect URL '" + url + "'";
+ basicDataSource.log(message, t);
+ throw new SQLException(message, t);
+ }
+ }
+ return driverToUse;
+ }
+
+}
diff --git a/src/main/java/org/apache/commons/dbcp2/LifetimeExceededException.java b/src/main/java/org/apache/commons/dbcp2/LifetimeExceededException.java
index ff48941f..cfc2bec9 100644
--- a/src/main/java/org/apache/commons/dbcp2/LifetimeExceededException.java
+++ b/src/main/java/org/apache/commons/dbcp2/LifetimeExceededException.java
@@ -23,7 +23,7 @@ import java.sql.SQLException;
*
* @since 2.1
*/
-class LifetimeExceededException extends SQLException {
+final class LifetimeExceededException extends SQLException {
private static final long serialVersionUID = -3783783104516492659L;
diff --git a/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java b/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java
index e0ffd1f0..189b79e5 100644
--- a/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java
+++ b/src/main/java/org/apache/commons/dbcp2/ObjectNameWrapper.java
@@ -1,104 +1,104 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.dbcp2;
-
-import java.lang.management.ManagementFactory;
-import java.util.Objects;
-
-import javax.management.MBeanServer;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Internal wrapper class that allows JMX to be a noop if absent or disabled.
- *
- * @since 2.2.1
- */
-class ObjectNameWrapper {
-
- private static final Log log = LogFactory.getLog(ObjectNameWrapper.class);
-
- private static final MBeanServer MBEAN_SERVER = getPlatformMBeanServer();
-
- private static MBeanServer getPlatformMBeanServer() {
- try {
- return ManagementFactory.getPlatformMBeanServer();
- } catch (final LinkageError | Exception e) {
- // ignore - JMX not available
- log.debug("Failed to get platform MBeanServer", e);
- return null;
- }
- }
-
- public static ObjectName unwrap(final ObjectNameWrapper wrapper) {
- return wrapper == null ? null : wrapper.unwrap();
- }
-
- public static ObjectNameWrapper wrap(final ObjectName objectName) {
- return new ObjectNameWrapper(objectName);
- }
-
- public static ObjectNameWrapper wrap(final String name) throws MalformedObjectNameException {
- return wrap(new ObjectName(name));
- }
-
- private final ObjectName objectName;
-
- public ObjectNameWrapper(final ObjectName objectName) {
- this.objectName = objectName;
- }
-
- public void registerMBean(final Object object) {
- if (MBEAN_SERVER == null || objectName == null) {
- return;
- }
- try {
- MBEAN_SERVER.registerMBean(object, objectName);
- } catch (final LinkageError | Exception e) {
- log.warn("Failed to complete JMX registration for " + objectName, e);
- }
- }
-
- /**
- * @since 2.7.0
- */
- @Override
- public String toString() {
- return Objects.toString(objectName);
- }
-
- public void unregisterMBean() {
- if (MBEAN_SERVER == null || objectName == null) {
- return;
- }
- if (MBEAN_SERVER.isRegistered(objectName)) {
- try {
- MBEAN_SERVER.unregisterMBean(objectName);
- } catch (final LinkageError | Exception e) {
- log.warn("Failed to complete JMX unregistration for " + objectName, e);
- }
- }
- }
-
- public ObjectName unwrap() {
- return objectName;
- }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbcp2;
+
+import java.lang.management.ManagementFactory;
+import java.util.Objects;
+
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Internal wrapper class that allows JMX to be a noop if absent or disabled.
+ *
+ * @since 2.2.1
+ */
+final class ObjectNameWrapper {
+
+ private static final Log log = LogFactory.getLog(ObjectNameWrapper.class);
+
+ private static final MBeanServer MBEAN_SERVER = getPlatformMBeanServer();
+
+ private static MBeanServer getPlatformMBeanServer() {
+ try {
+ return ManagementFactory.getPlatformMBeanServer();
+ } catch (final LinkageError | Exception e) {
+ // ignore - JMX not available
+ log.debug("Failed to get platform MBeanServer", e);
+ return null;
+ }
+ }
+
+ public static ObjectName unwrap(final ObjectNameWrapper wrapper) {
+ return wrapper == null ? null : wrapper.unwrap();
+ }
+
+ public static ObjectNameWrapper wrap(final ObjectName objectName) {
+ return new ObjectNameWrapper(objectName);
+ }
+
+ public static ObjectNameWrapper wrap(final String name) throws MalformedObjectNameException {
+ return wrap(new ObjectName(name));
+ }
+
+ private final ObjectName objectName;
+
+ public ObjectNameWrapper(final ObjectName objectName) {
+ this.objectName = objectName;
+ }
+
+ public void registerMBean(final Object object) {
+ if (MBEAN_SERVER == null || objectName == null) {
+ return;
+ }
+ try {
+ MBEAN_SERVER.registerMBean(object, objectName);
+ } catch (final LinkageError | Exception e) {
+ log.warn("Failed to complete JMX registration for " + objectName, e);
+ }
+ }
+
+ /**
+ * @since 2.7.0
+ */
+ @Override
+ public String toString() {
+ return Objects.toString(objectName);
+ }
+
+ public void unregisterMBean() {
+ if (MBEAN_SERVER == null || objectName == null) {
+ return;
+ }
+ if (MBEAN_SERVER.isRegistered(objectName)) {
+ try {
+ MBEAN_SERVER.unregisterMBean(objectName);
+ } catch (final LinkageError | Exception e) {
+ log.warn("Failed to complete JMX unregistration for " + objectName, e);
+ }
+ }
+ }
+
+ public ObjectName unwrap() {
+ return objectName;
+ }
+
+}
diff --git a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/ConnectionImpl.java b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/ConnectionImpl.java
index ee5be1b1..22f1b523 100644
--- a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/ConnectionImpl.java
+++ b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/ConnectionImpl.java
@@ -1,307 +1,307 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.dbcp2.cpdsadapter;
-
-import java.sql.CallableStatement;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-
-import org.apache.commons.dbcp2.DelegatingCallableStatement;
-import org.apache.commons.dbcp2.DelegatingConnection;
-import org.apache.commons.dbcp2.DelegatingPreparedStatement;
-
-/**
- * This class is the {@code Connection} that will be returned from
- * {@code PooledConnectionImpl.getConnection()}. Most methods are wrappers around the JDBC 1.x
- * {@code Connection}. A few exceptions include preparedStatement and close. In accordance with the JDBC
- * specification this Connection cannot be used after closed() is called. Any further usage will result in an
- * SQLException.
- * <p>
- * ConnectionImpl extends DelegatingConnection to enable access to the underlying connection.
- * </p>
- *
- * @since 2.0
- */
-class ConnectionImpl extends DelegatingConnection<Connection> {
-
- private final boolean accessToUnderlyingConnectionAllowed;
-
- /** The object that instantiated this object */
- private final PooledConnectionImpl pooledConnection;
-
- /**
- * Creates a {@code ConnectionImpl}.
- *
- * @param pooledConnection
- * The PooledConnection that is calling the ctor.
- * @param connection
- * The JDBC 1.x Connection to wrap.
- * @param accessToUnderlyingConnectionAllowed
- * if true, then access is allowed to the underlying connection
- */
- ConnectionImpl(final PooledConnectionImpl pooledConnection, final Connection connection,
- final boolean accessToUnderlyingConnectionAllowed) {
- super(connection);
- this.pooledConnection = pooledConnection;
- this.accessToUnderlyingConnectionAllowed = accessToUnderlyingConnectionAllowed;
- }
-
- /**
- * Marks the Connection as closed, and notifies the pool that the pooled connection is available.
- * <p>
- * In accordance with the JDBC specification this Connection cannot be used after closed() is called. Any further
- * usage will result in an SQLException.
- * </p>
- *
- * @throws SQLException
- * The database connection couldn't be closed.
- */
- @Override
- public void close() throws SQLException {
- if (!isClosedInternal()) {
- try {
- passivate();
- } finally {
- setClosedInternal(true);
- pooledConnection.notifyListeners();
- }
- }
- }
-
- /**
- * Get the delegated connection, if allowed.
- *
- * @return the internal connection, or null if access is not allowed.
- * @see #isAccessToUnderlyingConnectionAllowed()
- */
- @Override
- public Connection getDelegate() {
- if (isAccessToUnderlyingConnectionAllowed()) {
- return getDelegateInternal();
- }
- return null;
- }
-
- /**
- * Get the innermost connection, if allowed.
- *
- * @return the innermost internal connection, or null if access is not allowed.
- * @see #isAccessToUnderlyingConnectionAllowed()
- */
- @Override
- public Connection getInnermostDelegate() {
- if (isAccessToUnderlyingConnectionAllowed()) {
- return super.getInnermostDelegateInternal();
- }
- return null;
- }
-
- /**
- * If false, getDelegate() and getInnermostDelegate() will return null.
- *
- * @return true if access is allowed to the underlying connection
- * @see ConnectionImpl
- */
- public boolean isAccessToUnderlyingConnectionAllowed() {
- return accessToUnderlyingConnectionAllowed;
- }
-
- /**
- * If pooling of {@code CallableStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
- * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
- *
- * @param sql
- * an SQL statement that may contain one or more '?' parameter placeholders. Typically this statement is
- * specified using JDBC call escape syntax.
- * @return a default {@code CallableStatement} object containing the pre-compiled SQL statement.
- * @throws SQLException
- * Thrown if a database access error occurs or this method is called on a closed connection.
- * @since 2.4.0
- */
- @Override
- public CallableStatement prepareCall(final String sql) throws SQLException {
- checkOpen();
- try {
- return new DelegatingCallableStatement(this, pooledConnection.prepareCall(sql));
- } catch (final SQLException e) {
- handleException(e); // Does not return
- return null;
- }
- }
-
- /**
- * If pooling of {@code CallableStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
- * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
- *
- * @param sql
- * a {@code String} object that is the SQL statement to be sent to the database; may contain on or
- * more '?' parameters.
- * @param resultSetType
- * a result set type; one of {@code ResultSet.TYPE_FORWARD_ONLY},
- * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code ResultSet.TYPE_SCROLL_SENSITIVE}.
- * @param resultSetConcurrency
- * a concurrency type; one of {@code ResultSet.CONCUR_READ_ONLY} or
- * {@code ResultSet.CONCUR_UPDATABLE}.
- * @return a {@code CallableStatement} object containing the pre-compiled SQL statement that will produce
- * {@code ResultSet} objects with the given type and concurrency.
- * @throws SQLException
- * Thrown if a database access error occurs, this method is called on a closed connection or the given
- * parameters are not {@code ResultSet} constants indicating type and concurrency.
- * @since 2.4.0
- */
- @Override
- public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency)
- throws SQLException {
- checkOpen();
- try {
- return new DelegatingCallableStatement(this,
- pooledConnection.prepareCall(sql, resultSetType, resultSetConcurrency));
- } catch (final SQLException e) {
- handleException(e); // Does not return
- return null;
- }
- }
-
- /**
- * If pooling of {@code CallableStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
- * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
- *
- * @param sql
- * a {@code String} object that is the SQL statement to be sent to the database; may contain on or
- * more '?' parameters.
- * @param resultSetType
- * one of the following {@code ResultSet} constants: {@code ResultSet.TYPE_FORWARD_ONLY},
- * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code ResultSet.TYPE_SCROLL_SENSITIVE}.
- * @param resultSetConcurrency
- * one of the following {@code ResultSet} constants: {@code ResultSet.CONCUR_READ_ONLY} or
- * {@code ResultSet.CONCUR_UPDATABLE}.
- * @param resultSetHoldability
- * one of the following {@code ResultSet} constants: {@code ResultSet.HOLD_CURSORS_OVER_COMMIT}
- * or {@code ResultSet.CLOSE_CURSORS_AT_COMMIT}.
- * @return a new {@code CallableStatement} object, containing the pre-compiled SQL statement, that will
- * generate {@code ResultSet} objects with the given type, concurrency, and holdability.
- * @throws SQLException
- * Thrown if a database access error occurs, this method is called on a closed connection or the given
- * parameters are not {@code ResultSet} constants indicating type, concurrency, and holdability.
- * @since 2.4.0
- */
- @Override
- public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency,
- final int resultSetHoldability) throws SQLException {
- checkOpen();
- try {
- return new DelegatingCallableStatement(this,
- pooledConnection.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability));
- } catch (final SQLException e) {
- handleException(e); // Does not return
- return null;
- }
- }
-
- /**
- * If pooling of {@code PreparedStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
- * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
- *
- * @param sql
- * SQL statement to be prepared
- * @return the prepared statement
- * @throws SQLException
- * if this connection is closed or an error occurs in the wrapped connection.
- */
- @Override
- public PreparedStatement prepareStatement(final String sql) throws SQLException {
- checkOpen();
- try {
- return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql));
- } catch (final SQLException e) {
- handleException(e); // Does not return
- return null;
- }
- }
-
- @Override
- public PreparedStatement prepareStatement(final String sql, final int autoGeneratedKeys) throws SQLException {
- checkOpen();
- try {
- return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql, autoGeneratedKeys));
- } catch (final SQLException e) {
- handleException(e);
- return null;
- }
- }
-
- /**
- * If pooling of {@code PreparedStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
- * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
- *
- * @throws SQLException
- * if this connection is closed or an error occurs in the wrapped connection.
- */
- @Override
- public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency)
- throws SQLException {
- checkOpen();
- try {
- return new DelegatingPreparedStatement(this,
- pooledConnection.prepareStatement(sql, resultSetType, resultSetConcurrency));
- } catch (final SQLException e) {
- handleException(e);
- return null;
- }
- }
-
- //
- // Methods for accessing the delegate connection
- //
-
- @Override
- public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency,
- final int resultSetHoldability) throws SQLException {
- checkOpen();
- try {
- return new DelegatingPreparedStatement(this,
- pooledConnection.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability));
- } catch (final SQLException e) {
- handleException(e);
- return null;
- }
- }
-
- @Override
- public PreparedStatement prepareStatement(final String sql, final int[] columnIndexes) throws SQLException {
- checkOpen();
- try {
- return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql, columnIndexes));
- } catch (final SQLException e) {
- handleException(e);
- return null;
- }
- }
-
- @Override
- public PreparedStatement prepareStatement(final String sql, final String[] columnNames) throws SQLException {
- checkOpen();
- try {
- return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql, columnNames));
- } catch (final SQLException e) {
- handleException(e);
- return null;
- }
- }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbcp2.cpdsadapter;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+import org.apache.commons.dbcp2.DelegatingCallableStatement;
+import org.apache.commons.dbcp2.DelegatingConnection;
+import org.apache.commons.dbcp2.DelegatingPreparedStatement;
+
+/**
+ * This class is the {@code Connection} that will be returned from
+ * {@code PooledConnectionImpl.getConnection()}. Most methods are wrappers around the JDBC 1.x
+ * {@code Connection}. A few exceptions include preparedStatement and close. In accordance with the JDBC
+ * specification this Connection cannot be used after closed() is called. Any further usage will result in an
+ * SQLException.
+ * <p>
+ * ConnectionImpl extends DelegatingConnection to enable access to the underlying connection.
+ * </p>
+ *
+ * @since 2.0
+ */
+final class ConnectionImpl extends DelegatingConnection<Connection> {
+
+ private final boolean accessToUnderlyingConnectionAllowed;
+
+ /** The object that instantiated this object */
+ private final PooledConnectionImpl pooledConnection;
+
+ /**
+ * Creates a {@code ConnectionImpl}.
+ *
+ * @param pooledConnection
+ * The PooledConnection that is calling the ctor.
+ * @param connection
+ * The JDBC 1.x Connection to wrap.
+ * @param accessToUnderlyingConnectionAllowed
+ * if true, then access is allowed to the underlying connection
+ */
+ ConnectionImpl(final PooledConnectionImpl pooledConnection, final Connection connection,
+ final boolean accessToUnderlyingConnectionAllowed) {
+ super(connection);
+ this.pooledConnection = pooledConnection;
+ this.accessToUnderlyingConnectionAllowed = accessToUnderlyingConnectionAllowed;
+ }
+
+ /**
+ * Marks the Connection as closed, and notifies the pool that the pooled connection is available.
+ * <p>
+ * In accordance with the JDBC specification this Connection cannot be used after closed() is called. Any further
+ * usage will result in an SQLException.
+ * </p>
+ *
+ * @throws SQLException
+ * The database connection couldn't be closed.
+ */
+ @Override
+ public void close() throws SQLException {
+ if (!isClosedInternal()) {
+ try {
+ passivate();
+ } finally {
+ setClosedInternal(true);
+ pooledConnection.notifyListeners();
+ }
+ }
+ }
+
+ /**
+ * Get the delegated connection, if allowed.
+ *
+ * @return the internal connection, or null if access is not allowed.
+ * @see #isAccessToUnderlyingConnectionAllowed()
+ */
+ @Override
+ public Connection getDelegate() {
+ if (isAccessToUnderlyingConnectionAllowed()) {
+ return getDelegateInternal();
+ }
+ return null;
+ }
+
+ /**
+ * Get the innermost connection, if allowed.
+ *
+ * @return the innermost internal connection, or null if access is not allowed.
+ * @see #isAccessToUnderlyingConnectionAllowed()
+ */
+ @Override
+ public Connection getInnermostDelegate() {
+ if (isAccessToUnderlyingConnectionAllowed()) {
+ return super.getInnermostDelegateInternal();
+ }
+ return null;
+ }
+
+ /**
+ * If false, getDelegate() and getInnermostDelegate() will return null.
+ *
+ * @return true if access is allowed to the underlying connection
+ * @see ConnectionImpl
+ */
+ public boolean isAccessToUnderlyingConnectionAllowed() {
+ return accessToUnderlyingConnectionAllowed;
+ }
+
+ /**
+ * If pooling of {@code CallableStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
+ * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
+ *
+ * @param sql
+ * an SQL statement that may contain one or more '?' parameter placeholders. Typically this statement is
+ * specified using JDBC call escape syntax.
+ * @return a default {@code CallableStatement} object containing the pre-compiled SQL statement.
+ * @throws SQLException
+ * Thrown if a database access error occurs or this method is called on a closed connection.
+ * @since 2.4.0
+ */
+ @Override
+ public CallableStatement prepareCall(final String sql) throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingCallableStatement(this, pooledConnection.prepareCall(sql));
+ } catch (final SQLException e) {
+ handleException(e); // Does not return
+ return null;
+ }
+ }
+
+ /**
+ * If pooling of {@code CallableStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
+ * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
+ *
+ * @param sql
+ * a {@code String} object that is the SQL statement to be sent to the database; may contain on or
+ * more '?' parameters.
+ * @param resultSetType
+ * a result set type; one of {@code ResultSet.TYPE_FORWARD_ONLY},
+ * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code ResultSet.TYPE_SCROLL_SENSITIVE}.
+ * @param resultSetConcurrency
+ * a concurrency type; one of {@code ResultSet.CONCUR_READ_ONLY} or
+ * {@code ResultSet.CONCUR_UPDATABLE}.
+ * @return a {@code CallableStatement} object containing the pre-compiled SQL statement that will produce
+ * {@code ResultSet} objects with the given type and concurrency.
+ * @throws SQLException
+ * Thrown if a database access error occurs, this method is called on a closed connection or the given
+ * parameters are not {@code ResultSet} constants indicating type and concurrency.
+ * @since 2.4.0
+ */
+ @Override
+ public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency)
+ throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingCallableStatement(this,
+ pooledConnection.prepareCall(sql, resultSetType, resultSetConcurrency));
+ } catch (final SQLException e) {
+ handleException(e); // Does not return
+ return null;
+ }
+ }
+
+ /**
+ * If pooling of {@code CallableStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
+ * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
+ *
+ * @param sql
+ * a {@code String} object that is the SQL statement to be sent to the database; may contain on or
+ * more '?' parameters.
+ * @param resultSetType
+ * one of the following {@code ResultSet} constants: {@code ResultSet.TYPE_FORWARD_ONLY},
+ * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or {@code ResultSet.TYPE_SCROLL_SENSITIVE}.
+ * @param resultSetConcurrency
+ * one of the following {@code ResultSet} constants: {@code ResultSet.CONCUR_READ_ONLY} or
+ * {@code ResultSet.CONCUR_UPDATABLE}.
+ * @param resultSetHoldability
+ * one of the following {@code ResultSet} constants: {@code ResultSet.HOLD_CURSORS_OVER_COMMIT}
+ * or {@code ResultSet.CLOSE_CURSORS_AT_COMMIT}.
+ * @return a new {@code CallableStatement} object, containing the pre-compiled SQL statement, that will
+ * generate {@code ResultSet} objects with the given type, concurrency, and holdability.
+ * @throws SQLException
+ * Thrown if a database access error occurs, this method is called on a closed connection or the given
+ * parameters are not {@code ResultSet} constants indicating type, concurrency, and holdability.
+ * @since 2.4.0
+ */
+ @Override
+ public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency,
+ final int resultSetHoldability) throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingCallableStatement(this,
+ pooledConnection.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability));
+ } catch (final SQLException e) {
+ handleException(e); // Does not return
+ return null;
+ }
+ }
+
+ /**
+ * If pooling of {@code PreparedStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
+ * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
+ *
+ * @param sql
+ * SQL statement to be prepared
+ * @return the prepared statement
+ * @throws SQLException
+ * if this connection is closed or an error occurs in the wrapped connection.
+ */
+ @Override
+ public PreparedStatement prepareStatement(final String sql) throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql));
+ } catch (final SQLException e) {
+ handleException(e); // Does not return
+ return null;
+ }
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(final String sql, final int autoGeneratedKeys) throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql, autoGeneratedKeys));
+ } catch (final SQLException e) {
+ handleException(e);
+ return null;
+ }
+ }
+
+ /**
+ * If pooling of {@code PreparedStatement}s is turned on in the {@link DriverAdapterCPDS}, a pooled object may
+ * be returned, otherwise delegate to the wrapped JDBC 1.x {@link java.sql.Connection}.
+ *
+ * @throws SQLException
+ * if this connection is closed or an error occurs in the wrapped connection.
+ */
+ @Override
+ public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency)
+ throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingPreparedStatement(this,
+ pooledConnection.prepareStatement(sql, resultSetType, resultSetConcurrency));
+ } catch (final SQLException e) {
+ handleException(e);
+ return null;
+ }
+ }
+
+ //
+ // Methods for accessing the delegate connection
+ //
+
+ @Override
+ public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency,
+ final int resultSetHoldability) throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingPreparedStatement(this,
+ pooledConnection.prepareStatement(sql, resultSetType, resultSetConcurrency, resultSetHoldability));
+ } catch (final SQLException e) {
+ handleException(e);
+ return null;
+ }
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(final String sql, final int[] columnIndexes) throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql, columnIndexes));
+ } catch (final SQLException e) {
+ handleException(e);
+ return null;
+ }
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(final String sql, final String[] columnNames) throws SQLException {
+ checkOpen();
+ try {
+ return new DelegatingPreparedStatement(this, pooledConnection.prepareStatement(sql, columnNames));
+ } catch (final SQLException e) {
+ handleException(e);
+ return null;
+ }
+ }
+
+}
diff --git a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java
index 331de90b..57bcecd4 100644
--- a/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java
+++ b/src/main/java/org/apache/commons/dbcp2/cpdsadapter/PooledConnectionImpl.java
@@ -46,7 +46,7 @@ import org.apache.commons.pool2.impl.DefaultPooledObject;
*
* @since 2.0
*/
-class PooledConnectionImpl
+final class PooledConnectionImpl
implements PooledConnection, KeyedPooledObjectFactory<PStmtKey, DelegatingPreparedStatement> {
private static final String CLOSED = "Attempted to use PooledConnection after closed() was called.";
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
index 21e14000..76ea6db6 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java
@@ -42,7 +42,7 @@ import org.apache.commons.pool2.impl.DefaultPooledObject;
*
* @since 2.0
*/
-class CPDSConnectionFactory
+final class CPDSConnectionFactory
implements PooledObjectFactory<PooledConnectionAndInfo>, ConnectionEventListener, PooledConnectionManager {
private static final String NO_KEY_MESSAGE = "close() was called on a Connection, but I have no record of the underlying PooledConnection.";
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
index eadaa14b..f49b8ce9 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java
@@ -43,7 +43,7 @@ import org.apache.commons.pool2.impl.DefaultPooledObject;
*
* @since 2.0
*/
-class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey, PooledConnectionAndInfo>,
+final class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey, PooledConnectionAndInfo>,
ConnectionEventListener, PooledConnectionManager {
private static final String NO_KEY_MESSAGE = "close() was called on a Connection, but "
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/PoolKey.java b/src/main/java/org/apache/commons/dbcp2/datasources/PoolKey.java
index deab7c0f..01d8675a 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/PoolKey.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/PoolKey.java
@@ -1,67 +1,67 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.dbcp2.datasources;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-/**
- * @since 2.0
- */
-class PoolKey implements Serializable {
- private static final long serialVersionUID = 2252771047542484533L;
-
- private final String dataSourceName;
- private final String userName;
-
- PoolKey(final String dataSourceName, final String userName) {
- this.dataSourceName = dataSourceName;
- this.userName = userName;
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PoolKey other = (PoolKey) obj;
- if (!Objects.equals(dataSourceName, other.dataSourceName)) {
- return false;
- }
- return Objects.equals(userName, other.userName);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(dataSourceName, userName);
- }
-
- @Override
- public String toString() {
- final StringBuilder sb = new StringBuilder(50);
- sb.append("PoolKey(");
- sb.append(dataSourceName);
- sb.append(')');
- return sb.toString();
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbcp2.datasources;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+/**
+ * @since 2.0
+ */
+final class PoolKey implements Serializable {
+ private static final long serialVersionUID = 2252771047542484533L;
+
+ private final String dataSourceName;
+ private final String userName;
+
+ PoolKey(final String dataSourceName, final String userName) {
+ this.dataSourceName = dataSourceName;
+ this.userName = userName;
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final PoolKey other = (PoolKey) obj;
+ if (!Objects.equals(dataSourceName, other.dataSourceName)) {
+ return false;
+ }
+ return Objects.equals(userName, other.userName);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(dataSourceName, userName);
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder(50);
+ sb.append("PoolKey(");
+ sb.append(dataSourceName);
+ sb.append(')');
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java b/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java
index a8d75408..94643c80 100644
--- a/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java
+++ b/src/main/java/org/apache/commons/dbcp2/datasources/UserPassKey.java
@@ -1,119 +1,119 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.dbcp2.datasources;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-import org.apache.commons.pool2.KeyedObjectPool;
-
-/**
- * <p>
- * Holds a user name and password pair. Serves as a poolable object key for the {@link KeyedObjectPool} backing a
- * {@link SharedPoolDataSource}. Two instances with the same user name are considered equal. This ensures that there
- * will be only one keyed pool for each user in the pool. The password is used (along with the user name) by the
- * {@code KeyedCPDSConnectionFactory} when creating new connections.
- * </p>
- *
- * <p>
- * {@link InstanceKeyDataSource#getConnection(String, String)} validates that the password used to create a connection
- * matches the password provided by the client.
- * </p>
- *
- * @since 2.0
- */
-class UserPassKey implements Serializable {
- private static final long serialVersionUID = 5142970911626584817L;
-
- private final CharArray name;
- private final CharArray password;
-
- UserPassKey(final char[] userName, final char[] password) {
- this(new CharArray(userName), new CharArray(password));
- }
-
- UserPassKey(final CharArray userName, final CharArray userPassword) {
- this.name = userName;
- this.password = userPassword;
- }
-
- UserPassKey(final String userName) {
- this(new CharArray(userName), CharArray.NULL);
- }
-
- UserPassKey(final String userName, final char[] password) {
- this(new CharArray(userName), new CharArray(password));
- }
-
- UserPassKey(final String userName, final String userPassword) {
- this(new CharArray(userName), new CharArray(userPassword));
- }
-
- /**
- * Only takes the user name into account.
- */
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final UserPassKey other = (UserPassKey) obj;
- return Objects.equals(name, other.name);
- }
-
- /**
- * Gets the value of password.
- *
- * @return value of password.
- */
- String getPassword() {
- return password.asString();
- }
-
- /**
- * Gets the value of password.
- *
- * @return value of password.
- */
- char[] getPasswordCharArray() {
- return password.get();
- }
-
- /**
- * Gets the value of user name.
- *
- * @return value of user name.
- */
- String getUserName() {
- return name.asString();
- }
-
- /**
- * Only takes the user name into account.
- */
- @Override
- public int hashCode() {
- return Objects.hash(name);
- }
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.dbcp2.datasources;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+import org.apache.commons.pool2.KeyedObjectPool;
+
+/**
+ * <p>
+ * Holds a user name and password pair. Serves as a poolable object key for the {@link KeyedObjectPool} backing a
+ * {@link SharedPoolDataSource}. Two instances with the same user name are considered equal. This ensures that there
+ * will be only one keyed pool for each user in the pool. The password is used (along with the user name) by the
+ * {@code KeyedCPDSConnectionFactory} when creating new connections.
+ * </p>
+ *
+ * <p>
+ * {@link InstanceKeyDataSource#getConnection(String, String)} validates that the password used to create a connection
+ * matches the password provided by the client.
+ * </p>
+ *
+ * @since 2.0
+ */
+final class UserPassKey implements Serializable {
+ private static final long serialVersionUID = 5142970911626584817L;
+
+ private final CharArray name;
+ private final CharArray password;
+
+ UserPassKey(final char[] userName, final char[] password) {
+ this(new CharArray(userName), new CharArray(password));
+ }
+
+ UserPassKey(final CharArray userName, final CharArray userPassword) {
+ this.name = userName;
+ this.password = userPassword;
+ }
+
+ UserPassKey(final String userName) {
+ this(new CharArray(userName), CharArray.NULL);
+ }
+
+ UserPassKey(final String userName, final char[] password) {
+ this(new CharArray(userName), new CharArray(password));
+ }
+
+ UserPassKey(final String userName, final String userPassword) {
+ this(new CharArray(userName), new CharArray(userPassword));
+ }
+
+ /**
+ * Only takes the user name into account.
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final UserPassKey other = (UserPassKey) obj;
+ return Objects.equals(name, other.name);
+ }
+
+ /**
+ * Gets the value of password.
+ *
+ * @return value of password.
+ */
+ String getPassword() {
+ return password.asString();
+ }
+
+ /**
+ * Gets the value of password.
+ *
+ * @return value of password.
+ */
+ char[] getPasswordCharArray() {
+ return password.get();
+ }
+
+ /**
+ * Gets the value of user name.
+ *
+ * @return value of user name.
+ */
+ String getUserName() {
+ return name.asString();
+ }
+
+ /**
+ * Only takes the user name into account.
+ */
+ @Override
+ public int hashCode() {
+ return Objects.hash(name);
+ }
+
+}