You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ma...@apache.org on 2013/12/10 21:08:47 UTC

svn commit: r1549953 - /commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java

Author: markt
Date: Tue Dec 10 20:08:47 2013
New Revision: 1549953

URL: http://svn.apache.org/r1549953
Log:
If this DataSource is registered with JMX then register the connection pool with a related name so the two appear together in JMX interfaces such as JConsole.

Modified:
    commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java

Modified: commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java
URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java?rev=1549953&r1=1549952&r2=1549953&view=diff
==============================================================================
--- commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java (original)
+++ commons/proper/dbcp/trunk/src/java/org/apache/commons/dbcp2/BasicDataSource.java Tue Dec 10 20:08:47 2013
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.commons.dbcp2;
 
 import java.io.PrintWriter;
@@ -31,6 +30,9 @@ import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
 
+import javax.management.MBeanRegistration;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
 import javax.sql.DataSource;
 
 import org.apache.commons.logging.Log;
@@ -57,7 +59,7 @@ import org.apache.commons.pool2.impl.Gen
  * @author Dirk Verbeeck
  * @version $Revision$ $Date$
  */
-public class BasicDataSource implements DataSource {
+public class BasicDataSource implements DataSource, MBeanRegistration {
 
     private static final Log log =
             LogFactory.getLog(BasicDataSource.class);
@@ -1882,15 +1884,16 @@ public class BasicDataSource implements 
      */
     protected void createConnectionPool(PoolableConnectionFactory factory) {
         // Create an object pool to contain our active connections
+        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
+        updateJmxName(config);
         GenericObjectPool<PoolableConnection> gop;
         if (abandonedConfig != null &&
                 (abandonedConfig.getRemoveAbandonedOnBorrow() ||
                  abandonedConfig.getRemoveAbandonedOnMaintenance())) {
-            gop = new GenericObjectPool<>(factory, new GenericObjectPoolConfig(),
-                    abandonedConfig);
+            gop = new GenericObjectPool<>(factory, config, abandonedConfig);
         }
         else {
-            gop = new GenericObjectPool<>(factory);
+            gop = new GenericObjectPool<>(factory, config);
         }
         gop.setMaxTotal(maxTotal);
         gop.setMaxIdle(maxIdle);
@@ -2004,4 +2007,38 @@ public class BasicDataSource implements 
             logWriter.println(message);
         }
     }
+
+    private ObjectName oname = null;
+    
+    @Override
+    public ObjectName preRegister(MBeanServer server, ObjectName name)
+            throws Exception {
+        oname = name;
+        return name;
+    }
+
+    @Override
+    public void postRegister(Boolean registrationDone) {
+        // NO-OP
+    }
+
+    @Override
+    public void preDeregister() throws Exception {
+        // NO-OP
+    }
+
+    @Override
+    public void postDeregister() {
+        // NO-OP
+    }
+    
+    private void updateJmxName(GenericObjectPoolConfig config) {
+        if (oname == null) {
+            return;
+        }
+        StringBuilder base = new StringBuilder(oname.toString());
+        base.append(",pool=");
+        config.setJmxNameBase(base.toString());
+        config.setJmxNamePrefix("connections");
+    }
 }