Author: fhanik Date: Tue Jun 9 18:58:25 2009 New Revision: 783095 URL: http://svn.apache.org/viewvc?rev=783095&view=rev Log: Take into account that executors can be provided, standard and non standard thread pool executors through config or programmatically. Hence we want to expose the correct values for curThread and curThreadBusy
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=783095&r1=783094&r2=783095&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Tue Jun 9 18:58:25 2009 @@ -17,10 +17,12 @@ package org.apache.tomcat.util.net; +import java.lang.reflect.Method; import java.net.InetAddress; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -36,6 +38,7 @@ import org.apache.tomcat.jni.SSLSocket; import org.apache.tomcat.jni.Socket; import org.apache.tomcat.jni.Status; +import org.apache.tomcat.util.IntrospectionUtils; import org.apache.tomcat.util.res.StringManager; /** @@ -538,27 +541,62 @@ } } - /** * Return the amount of threads that are managed by the pool. * * @return the amount of threads that are managed by the pool */ public int getCurrentThreadCount() { - return curThreads; + if (executor!=null) { + if (executor instanceof ThreadPoolExecutor) { + return ((ThreadPoolExecutor)executor).getPoolSize(); + } else { + try { + Method m = IntrospectionUtils.findMethod(executor.getClass(), "getPoolSize", new Class[] {}); + if (m!=null) { + return ((Integer)m.invoke(executor, null)).intValue(); + } else { + return -1; + } + }catch (Exception ignore) { + if (log.isDebugEnabled()) + log.debug("Unable to invoke getPoolSize",ignore); + return -2; + } + } + } else { + return curThreads; + } } - /** - * Return the amount of threads currently busy. + * Return the amount of threads that are in use * - * @return the amount of threads currently busy + * @return the amount of threads that are in use */ public int getCurrentThreadsBusy() { - return curThreadsBusy; + if (executor!=null) { + if (executor instanceof ThreadPoolExecutor) { + return ((ThreadPoolExecutor)executor).getActiveCount(); + } else { + try { + Method m = IntrospectionUtils.findMethod(executor.getClass(), "getActiveCount", new Class[] {}); + if (m!=null) { + return ((Integer)m.invoke(executor, null)).intValue(); + } else { + return -1; + } + }catch (Exception ignore) { + if (log.isDebugEnabled()) + log.debug("Unable to invoke getActiveCount",ignore); + return -2; + } + } + } else { + return workers!=null?curThreads - workers.size():0; + } } - - + /** * Return the state of the endpoint. * Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=783095&r1=783094&r2=783095&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Tue Jun 9 18:58:25 2009 @@ -18,11 +18,13 @@ package org.apache.tomcat.util.net; import java.io.IOException; +import java.lang.reflect.Method; import java.net.BindException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -297,12 +299,60 @@ return paused; } + /** + * Return the amount of threads that are managed by the pool. + * + * @return the amount of threads that are managed by the pool + */ public int getCurrentThreadCount() { - return curThreads; + if (executor!=null) { + if (executor instanceof ThreadPoolExecutor) { + return ((ThreadPoolExecutor)executor).getPoolSize(); + } else { + try { + Method m = IntrospectionUtils.findMethod(executor.getClass(), "getPoolSize", new Class[] {}); + if (m!=null) { + return ((Integer)m.invoke(executor, null)).intValue(); + } else { + return -1; + } + }catch (Exception ignore) { + if (log.isDebugEnabled()) + log.debug("Unable to invoke getPoolSize",ignore); + return -2; + } + } + } else { + return curThreads; + } } - + + /** + * Return the amount of threads that are in use + * + * @return the amount of threads that are in use + */ public int getCurrentThreadsBusy() { - return workers!=null?curThreads - workers.size():0; + if (executor!=null) { + if (executor instanceof ThreadPoolExecutor) { + return ((ThreadPoolExecutor)executor).getActiveCount(); + } else { + try { + Method m = IntrospectionUtils.findMethod(executor.getClass(), "getActiveCount", new Class[] {}); + if (m!=null) { + return ((Integer)m.invoke(executor, null)).intValue(); + } else { + return -1; + } + }catch (Exception ignore) { + if (log.isDebugEnabled()) + log.debug("Unable to invoke getActiveCount",ignore); + return -2; + } + } + } else { + return workers!=null?curThreads - workers.size():0; + } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=783095&r1=783094&r2=783095&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Tue Jun 9 18:58:25 2009 @@ -20,6 +20,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.lang.reflect.Method; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; @@ -726,32 +727,56 @@ * @return the amount of threads that are managed by the pool */ public int getCurrentThreadCount() { - final Executor executor = this.executor; if (executor!=null) { - if (executor instanceof java.util.concurrent.ThreadPoolExecutor) { - return ((java.util.concurrent.ThreadPoolExecutor)executor).getPoolSize(); + if (executor instanceof ThreadPoolExecutor) { + return ((ThreadPoolExecutor)executor).getPoolSize(); + } else { + try { + Method m = IntrospectionUtils.findMethod(executor.getClass(), "getPoolSize", new Class[] {}); + if (m!=null) { + return ((Integer)m.invoke(executor, null)).intValue(); + } else { + return -1; + } + }catch (Exception ignore) { + if (log.isDebugEnabled()) + log.debug("Unable to invoke getPoolSize",ignore); + return -2; + } } - } - return 0; + } else { + return -1; + } } - /** - * Return the amount of threads currently busy. + * Return the amount of threads that are in use * - * @return the amount of threads currently busy + * @return the amount of threads that are in use */ public int getCurrentThreadsBusy() { - final Executor executor = this.executor; if (executor!=null) { - if (executor instanceof java.util.concurrent.ThreadPoolExecutor) { - return ((java.util.concurrent.ThreadPoolExecutor)executor).getPoolSize(); + if (executor instanceof ThreadPoolExecutor) { + return ((ThreadPoolExecutor)executor).getActiveCount(); + } else { + try { + Method m = IntrospectionUtils.findMethod(executor.getClass(), "getActiveCount", new Class[] {}); + if (m!=null) { + return ((Integer)m.invoke(executor, null)).intValue(); + } else { + return -1; + } + }catch (Exception ignore) { + if (log.isDebugEnabled()) + log.debug("Unable to invoke getActiveCount",ignore); + return -2; + } } - } - return activeSocketProcessors.get(); + } else { + return -1; + } } - - + /** * Return the state of the endpoint. * --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org