From dev-return-188627-archive-asf-public=cust-asf.ponee.io@tomcat.apache.org Wed Jan 31 06:43:13 2018 Return-Path: X-Original-To: archive-asf-public@eu.ponee.io Delivered-To: archive-asf-public@eu.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by mx-eu-01.ponee.io (Postfix) with ESMTP id DA973180662 for ; Wed, 31 Jan 2018 06:43:13 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id C18CB160C54; Wed, 31 Jan 2018 05:43:13 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id E3368160C53 for ; Wed, 31 Jan 2018 06:43:12 +0100 (CET) Received: (qmail 35774 invoked by uid 500); 31 Jan 2018 05:43:11 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 35764 invoked by uid 99); 31 Jan 2018 05:43:11 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 Jan 2018 05:43:11 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 75F1B3A0118 for ; Wed, 31 Jan 2018 05:43:10 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1822748 - in /tomcat/trunk: modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ webapps/docs/ Date: Wed, 31 Jan 2018 05:43:08 -0000 To: dev@tomcat.apache.org From: kfujino@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20180131054310.75F1B3A0118@svn01-us-west.apache.org> Author: kfujino Date: Wed Jan 31 05:43:08 2018 New Revision: 1822748 URL: http://svn.apache.org/viewvc?rev=1822748&view=rev Log: Add MBean for PooledConnection. Added: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnectionMBean.java (with props) Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java?rev=1822748&r1=1822747&r2=1822748&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/ConnectionPool.java Wed Jan 31 05:43:08 2018 @@ -295,6 +295,7 @@ public class ConnectionPool { //fetch previously cached interceptor proxy - one per connection JdbcInterceptor handler = con.getHandler(); if (handler==null) { + if (jmxPool != null) con.createMBean(); //build the proxy handler handler = new ProxyConnection(this,con,getPoolProperties().isUseEquals()); //set up the interceptor chain Modified: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java?rev=1822748&r1=1822747&r2=1822748&view=diff ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java (original) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java Wed Jan 31 05:43:08 2018 @@ -23,18 +23,22 @@ import java.sql.Statement; import java.util.HashMap; import java.util.Properties; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantReadWriteLock; +import javax.management.ObjectName; + import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.jdbc.pool.interceptor.ConnectionState; +import org.apache.tomcat.jdbc.pool.jmx.JmxUtil; /** * Represents a pooled connection * and holds a reference to the {@link java.sql.Connection} object * @version 1.0 */ -public class PooledConnection { +public class PooledConnection implements PooledConnectionMBean { /** * Logger */ @@ -106,6 +110,10 @@ public class PooledConnection { private volatile long connectionVersion=0; + private static final AtomicLong connectionIndex = new AtomicLong(0); + + private ObjectName oname = null; + /** * Weak reference to cache the list of interceptors for this connection * so that we don't create a new list of interceptors each time we borrow @@ -130,6 +138,7 @@ public class PooledConnection { connectionVersion = parent.getPoolVersion(); } + @Override public long getConnectionVersion() { return connectionVersion; } @@ -334,6 +343,7 @@ public class PooledConnection { * * @return true if connect() was called successfully and disconnect has not yet been called */ + @Override public boolean isInitialized() { return connection!=null; } @@ -344,6 +354,7 @@ public class PooledConnection { * @return Returns true if the connection has been connected more than * {@link PoolConfiguration#getMaxAge()} milliseconds. false otherwise. */ + @Override public boolean isMaxAgeExpired() { if (getPoolProperties().getMaxAge()>0 ) { return (System.currentTimeMillis() - getLastConnected()) > getPoolProperties().getMaxAge(); @@ -586,6 +597,10 @@ public class PooledConnection { log.debug("Unable to close SQL connection",x); } } + if (oname != null) { + JmxUtil.unregisterJmx(oname); + oname = null; + } return released.compareAndSet(false, true); } @@ -618,7 +633,7 @@ public class PooledConnection { setSuspect(false); } - + @Override public boolean isSuspect() { return suspect; } @@ -661,6 +676,7 @@ public class PooledConnection { * This timestamp can also be reset by the {@link org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer#invoke(Object, java.lang.reflect.Method, Object[])} * @return the timestamp of the last pool action as defined by {@link System#currentTimeMillis()} */ + @Override public long getTimestamp() { return timestamp; } @@ -670,6 +686,7 @@ public class PooledConnection { * @return the discarded flag. If the value is true, * either {@link #disconnect(boolean)} has been called or it will be called when the connection is returned to the pool. */ + @Override public boolean isDiscarded() { return discarded; } @@ -678,6 +695,7 @@ public class PooledConnection { * Returns the timestamp of the last successful validation query execution. * @return the timestamp of the last successful validation query execution as defined by {@link System#currentTimeMillis()} */ + @Override public long getLastValidated() { return lastValidated; } @@ -737,6 +755,7 @@ public class PooledConnection { * ie, a successful call to {@link java.sql.Driver#connect(String, java.util.Properties)}. * @return the timestamp when this connection was created as defined by {@link System#currentTimeMillis()} */ + @Override public long getLastConnected() { return lastConnected; } @@ -769,6 +788,7 @@ public class PooledConnection { * Returns true if this connection has been released and wont be reused. * @return true if the method {@link #release()} has been called */ + @Override public boolean isReleased() { return released.get(); } @@ -777,4 +797,48 @@ public class PooledConnection { return attributes; } + public void createMBean() { + if (oname != null) return; + String keyprop = ",connections=PooledConnection["+connectionIndex.getAndIncrement()+"]"; + oname = JmxUtil.registerJmx(parent.getJmxPool().getObjectName(), keyprop, this); + } + + public ObjectName getObjectName() { + return oname; + } + + @Override + public boolean isClosed() throws SQLException { + return connection.isClosed(); + } + + @Override + public boolean getAutoCommit() throws SQLException { + return connection.getAutoCommit(); + } + + @Override + public String getCatalog() throws SQLException { + return connection.getCatalog(); + } + + @Override + public int getHoldability() throws SQLException { + return connection.getHoldability(); + } + + @Override + public boolean isReadOnly() throws SQLException { + return connection.isReadOnly(); + } + + @Override + public String getSchema() throws SQLException { + return connection.getSchema(); + } + + @Override + public int getTransactionIsolation() throws SQLException { + return connection.getTransactionIsolation(); + } } Added: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnectionMBean.java URL: http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnectionMBean.java?rev=1822748&view=auto ============================================================================== --- tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnectionMBean.java (added) +++ tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnectionMBean.java Wed Jan 31 05:43:08 2018 @@ -0,0 +1,25 @@ +package org.apache.tomcat.jdbc.pool; + +import java.sql.SQLException; + +public interface PooledConnectionMBean { + // PooledConnection + public long getConnectionVersion(); + public boolean isInitialized(); + public boolean isMaxAgeExpired(); + public boolean isSuspect(); + public long getTimestamp(); + public boolean isDiscarded(); + public long getLastValidated(); + public long getLastConnected(); + public boolean isReleased(); + + // java.sql.Connection + public boolean isClosed() throws SQLException; + public boolean getAutoCommit() throws SQLException; + public String getCatalog() throws SQLException; + public int getHoldability() throws SQLException; + public boolean isReadOnly() throws SQLException; + public String getSchema() throws SQLException; + public int getTransactionIsolation() throws SQLException; +} Propchange: tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnectionMBean.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1822748&r1=1822747&r2=1822748&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Wed Jan 31 05:43:08 2018 @@ -161,6 +161,9 @@ PooledConnection and JdbcInterceptors. (kfujino) + + Add MBean for PooledConnection. (kfujino) + --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org