mcconnell 2004/03/29 09:22:49 Modified: thread/api/src/java/org/apache/excalibur/thread ThreadControl.java thread/impl/src/java/org/apache/avalon/excalibur/thread/impl BasicThreadPool.java DefaultThreadPool.java ExecutableExecuteable.java ResourceLimitingThreadPool.java SimpleWorkerThread.java thread/impl/src/test/org/apache/avalon/excalibur/thread/impl/test DefaultThreadPoolTestCase.java ResourceLimitingThreadPoolTestCase.java Added: thread/impl/src/test/org/apache/avalon/excalibur/thread/impl/test BufferedLogger.java thread/instrumented/src/java/org/apache/avalon/excalibur/thread/impl InstrumentedResourceLimitingThreadPool.java Removed: thread/impl/src/java/org/apache/avalon/excalibur/thread/impl WrappedThreadControl.java thread/instrumented/src/java/org/apache/avalon/excalibur/thread/impl BasicThreadPool.java DefaultThreadPool.java ExecutableExecuteable.java ResourceLimitingThreadPool.java SimpleWorkerThread.java WrappedThreadControl.java thread/api/src/java/org/apache/avalon/excalibur/thread ThreadControl.java ThreadPool.java thread/api/src/java/org/apache/avalon/excalibur/thread/impl BasicThreadPool.java DefaultThreadPool.java ExecutableExecuteable.java ResourceLimitingThreadPool.java SimpleWorkerThread.java WrappedThreadControl.java thread/api/src/java/org/apache/excalibur/thread/impl AbstractThreadPool.java DefaultThreadControl.java ExecutableRunnable.java WorkerThread.java thread/api/src/test/org/apache/avalon/excalibur/thread/impl/test DefaultThreadPoolTestCase.java ResourceLimitingThreadPoolTestCase.java thread/impl/src/java/org/apache/avalon/excalibur/thread ThreadControl.java ThreadPool.java thread/impl/src/java/org/apache/excalibur/thread Executable.java ThreadControl.java ThreadPool.java thread/instrumented/src/java/org/apache/avalon/excalibur/thread ThreadControl.java ThreadPool.java thread/instrumented/src/java/org/apache/excalibur/thread Executable.java ThreadControl.java ThreadPool.java thread/instrumented/src/java/org/apache/excalibur/thread/impl AbstractThreadPool.java DefaultThreadControl.java ExecutableRunnable.java WorkerThread.java thread/instrumented/src/test/org/apache/avalon/excalibur/thread/impl/test DefaultThreadPoolTestCase.java ResourceLimitingThreadPoolTestCase.java Log: Execute the api impl seperation with full history. Revision Changes Path 1.6 +0 -1 avalon-excalibur/thread/api/src/java/org/apache/excalibur/thread/ThreadControl.java Index: ThreadControl.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/api/src/java/org/apache/excalibur/thread/ThreadControl.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ThreadControl.java 28 Feb 2004 11:47:34 -0000 1.5 +++ ThreadControl.java 29 Mar 2004 17:22:49 -0000 1.6 @@ -22,7 +22,6 @@ * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> */ public interface ThreadControl - extends org.apache.avalon.excalibur.thread.ThreadControl { /** * Wait for specified time for thread to complete it's work. 1.6 +3 -2 avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/BasicThreadPool.java Index: BasicThreadPool.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/BasicThreadPool.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- BasicThreadPool.java 28 Feb 2004 11:47:19 -0000 1.5 +++ BasicThreadPool.java 29 Mar 2004 17:22:49 -0000 1.6 @@ -18,12 +18,14 @@ import org.apache.avalon.excalibur.pool.ObjectFactory; import org.apache.avalon.excalibur.pool.Pool; -import org.apache.avalon.excalibur.thread.ThreadPool; + import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Executable; import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; + +import org.apache.excalibur.thread.ThreadPool; import org.apache.excalibur.thread.ThreadControl; import org.apache.excalibur.thread.impl.AbstractThreadPool; import org.apache.excalibur.thread.impl.WorkerThread; @@ -32,7 +34,6 @@ * The ThreadPool that binds to Legacy Pooling implementation. * * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> - * @deprecated Only used by deprecated components. Will remove in the future */ class BasicThreadPool extends AbstractThreadPool 1.6 +5 -10 avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/DefaultThreadPool.java Index: DefaultThreadPool.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/DefaultThreadPool.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- DefaultThreadPool.java 28 Feb 2004 11:47:19 -0000 1.5 +++ DefaultThreadPool.java 29 Mar 2004 17:22:49 -0000 1.6 @@ -18,16 +18,16 @@ import org.apache.avalon.excalibur.pool.ObjectFactory; import org.apache.avalon.excalibur.pool.SoftResourceLimitingPool; -import org.apache.avalon.excalibur.thread.ThreadPool; -import org.apache.excalibur.thread.ThreadControl; + import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Executable; import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.logger.LogEnabled; -import org.apache.avalon.framework.logger.LogKitLogger; -import org.apache.avalon.framework.logger.Loggable; import org.apache.avalon.framework.logger.Logger; +import org.apache.excalibur.thread.ThreadControl; +import org.apache.excalibur.thread.ThreadPool; + /** * This class is the public frontend for the thread pool code. * @@ -35,7 +35,7 @@ */ public class DefaultThreadPool extends ThreadGroup - implements ObjectFactory, Loggable, LogEnabled, Disposable, ThreadPool + implements ObjectFactory, LogEnabled, Disposable, ThreadPool { private final BasicThreadPool m_pool; private SoftResourceLimitingPool m_underlyingPool; @@ -63,11 +63,6 @@ super( name ); m_underlyingPool = new SoftResourceLimitingPool( this, min, max ); m_pool = new BasicThreadPool( this, name, m_underlyingPool ); - } - - public void setLogger( final org.apache.log.Logger logger ) - { - enableLogging( new LogKitLogger( logger ) ); } public void enableLogging( final Logger logger ) 1.6 +0 -1 avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/ExecutableExecuteable.java Index: ExecutableExecuteable.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/ExecutableExecuteable.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ExecutableExecuteable.java 28 Feb 2004 11:47:19 -0000 1.5 +++ ExecutableExecuteable.java 29 Mar 2004 17:22:49 -0000 1.6 @@ -23,7 +23,6 @@ * an [EMAIL PROTECTED] Executable} object. * * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> - * @deprecated Only Used by deprecated code and will be removed in future */ final class ExecutableExecuteable implements Executable 1.6 +7 -70 avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/ResourceLimitingThreadPool.java Index: ResourceLimitingThreadPool.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/ResourceLimitingThreadPool.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ResourceLimitingThreadPool.java 28 Feb 2004 11:47:19 -0000 1.5 +++ ResourceLimitingThreadPool.java 29 Mar 2004 17:22:49 -0000 1.6 @@ -18,17 +18,18 @@ import org.apache.avalon.excalibur.pool.ObjectFactory; import org.apache.avalon.excalibur.pool.ResourceLimitingPool; -import org.apache.avalon.excalibur.thread.ThreadPool; + import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Executable; import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; -import org.apache.excalibur.instrument.Instrument; -import org.apache.excalibur.instrument.Instrumentable; + import org.apache.excalibur.thread.ThreadControl; +import org.apache.excalibur.thread.ThreadPool; -/** +/* +* * A Thread Pool which can be configured to have a hard limit on the maximum number of threads * which will be allocated. This is very important for servers to avoid running out of system * resources. The pool can be configured to block for a new thread or throw an exception. @@ -40,13 +41,10 @@ */ public class ResourceLimitingThreadPool extends ThreadGroup - implements ObjectFactory, LogEnabled, Disposable, ThreadPool, Instrumentable + implements ObjectFactory, LogEnabled, Disposable, ThreadPool { private ResourceLimitingPool m_underlyingPool; - /** Instrumentable Name assigned to this Instrumentable */ - private String m_instrumentableName; - /** * The associated thread pool. */ @@ -119,67 +117,6 @@ final String message = "Unable to create ThreadPool due to " + e; throw new IllegalStateException( message ); } - } - - /*--------------------------------------------------------------- - * Instrumentable Methods - *-------------------------------------------------------------*/ - /** - * Sets the name for the Instrumentable. The Instrumentable Name is used - * to uniquely identify the Instrumentable during the configuration of - * the InstrumentManager and to gain access to an InstrumentableDescriptor - * through the InstrumentManager. The value should be a string which does - * not contain spaces or periods. - * <p> - * This value may be set by a parent Instrumentable, or by the - * InstrumentManager using the value of the 'instrumentable' attribute in - * the configuration of the component. - * - * @param name The name used to identify a Instrumentable. - */ - public void setInstrumentableName( String name ) - { - m_instrumentableName = name; - } - - /** - * Gets the name of the Instrumentable. - * - * @return The name used to identify a Instrumentable. - */ - public String getInstrumentableName() - { - return m_instrumentableName; - } - - /** - * Obtain a reference to all the Instruments that the Instrumentable object - * wishes to expose. All sampling is done directly through the - * Instruments as opposed to the Instrumentable interface. - * - * @return An array of the Instruments available for profiling. Should - * never be null. If there are no Instruments, then - * EMPTY_INSTRUMENT_ARRAY can be returned. This should never be - * the case though unless there are child Instrumentables with - * Instruments. - */ - public Instrument[] getInstruments() - { - return Instrumentable.EMPTY_INSTRUMENT_ARRAY; - } - - /** - * Any Object which implements Instrumentable can also make use of other - * Instrumentable child objects. This method is used to tell the - * InstrumentManager about them. - * - * @return An array of child Instrumentables. This method should never - * return null. If there are no child Instrumentables, then - * EMPTY_INSTRUMENTABLE_ARRAY can be returned. - */ - public Instrumentable[] getChildInstrumentables() - { - return new Instrumentable[]{m_underlyingPool}; } /** 1.6 +2 -1 avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/SimpleWorkerThread.java Index: SimpleWorkerThread.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/impl/src/java/org/apache/avalon/excalibur/thread/impl/SimpleWorkerThread.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- SimpleWorkerThread.java 28 Feb 2004 11:47:19 -0000 1.5 +++ SimpleWorkerThread.java 29 Mar 2004 17:22:49 -0000 1.6 @@ -17,8 +17,10 @@ package org.apache.avalon.excalibur.thread.impl; import org.apache.avalon.excalibur.pool.Poolable; + import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; + import org.apache.excalibur.thread.impl.AbstractThreadPool; import org.apache.excalibur.thread.impl.WorkerThread; @@ -26,7 +28,6 @@ * This class extends the Thread class to add recyclable functionalities. * * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> - * @deprecated Only Used by deprecated code and will be removed in future */ class SimpleWorkerThread extends WorkerThread 1.5 +3 -3 avalon-excalibur/thread/impl/src/test/org/apache/avalon/excalibur/thread/impl/test/DefaultThreadPoolTestCase.java Index: DefaultThreadPoolTestCase.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/impl/src/test/org/apache/avalon/excalibur/thread/impl/test/DefaultThreadPoolTestCase.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- DefaultThreadPoolTestCase.java 28 Feb 2004 11:47:34 -0000 1.4 +++ DefaultThreadPoolTestCase.java 29 Mar 2004 17:22:49 -0000 1.5 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2004 The Apache Software Foundation + * Copyright 2002-2004 Apache Software Foundation * Licensed 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 @@ -38,7 +38,7 @@ { final DefaultThreadPool pool = new DefaultThreadPool( "default", 10 ); pool.setDaemon( false ); - pool.enableLogging( new ConsoleLogger() ); + pool.enableLogging( new ConsoleLogger( ConsoleLogger.LEVEL_INFO ) ); pool.execute( new DummyRunnable() ); } @@ -47,7 +47,7 @@ { final DefaultThreadPool pool = new DefaultThreadPool( "default", 10 ); pool.setDaemon( false ); - pool.enableLogging( new ConsoleLogger() ); + pool.enableLogging( new ConsoleLogger( ConsoleLogger.LEVEL_INFO ) ); pool.execute( new DummyRunnable() ); } 1.5 +2 -3 avalon-excalibur/thread/impl/src/test/org/apache/avalon/excalibur/thread/impl/test/ResourceLimitingThreadPoolTestCase.java Index: ResourceLimitingThreadPoolTestCase.java =================================================================== RCS file: /home/cvs/avalon-excalibur/thread/impl/src/test/org/apache/avalon/excalibur/thread/impl/test/ResourceLimitingThreadPoolTestCase.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ResourceLimitingThreadPoolTestCase.java 28 Feb 2004 11:47:34 -0000 1.4 +++ ResourceLimitingThreadPoolTestCase.java 29 Mar 2004 17:22:49 -0000 1.5 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2004 The Apache Software Foundation + * Copyright 2002-2004 Apache Software Foundation * Licensed 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 @@ -18,7 +18,6 @@ import junit.framework.TestCase; -import org.apache.avalon.excalibur.testcase.BufferedLogger; import org.apache.avalon.excalibur.thread.impl.ResourceLimitingThreadPool; /** 1.1 avalon-excalibur/thread/impl/src/test/org/apache/avalon/excalibur/thread/impl/test/BufferedLogger.java Index: BufferedLogger.java =================================================================== /* * Copyright 2002-2004 Apache Software Foundation * Licensed 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.avalon.excalibur.thread.impl.test; import org.apache.avalon.framework.ExceptionUtil; import org.apache.avalon.framework.logger.Logger; /** * Simple Logger which logs all information to an internal StringBuffer. * When logging is complete call toString() on the logger to obtain the * logged output. Useful for testing. * * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> * @version CVS $Revision: 1.1 $ $Date: 2004/03/29 17:22:49 $ * @since 4.0 */ public class BufferedLogger implements Logger { private final StringBuffer m_sb = new StringBuffer(); /** * Log a debug message. * * @param message the message */ public void debug( final String message ) { debug( message, null ); } /** * Log a debug message. * * @param message the message * @param throwable the throwable */ public void debug( final String message, final Throwable throwable ) { append( "DEBUG", message, throwable ); } /** * Determine if messages of priority "debug" will be logged. * * @return true if "debug" messages will be logged */ public boolean isDebugEnabled() { return true; } /** * Log a info message. * * @param message the message */ public void info( final String message ) { info( message, null ); } /** * Log a info message. * * @param message the message * @param throwable the throwable */ public void info( final String message, final Throwable throwable ) { append( "INFO", message, throwable ); } /** * Determine if messages of priority "info" will be logged. * * @return true if "info" messages will be logged */ public boolean isInfoEnabled() { return true; } /** * Log a warn message. * * @param message the message */ public void warn( final String message ) { warn( message, null ); } /** * Log a warn message. * * @param message the message * @param throwable the throwable */ public void warn( final String message, final Throwable throwable ) { append( "WARN", message, throwable ); } /** * Determine if messages of priority "warn" will be logged. * * @return true if "warn" messages will be logged */ public boolean isWarnEnabled() { return true; } /** * Log a error message. * * @param message the message */ public void error( final String message ) { error( message, null ); } /** * Log a error message. * * @param message the message * @param throwable the throwable */ public void error( final String message, final Throwable throwable ) { append( "ERROR", message, throwable ); } /** * Determine if messages of priority "error" will be logged. * * @return true if "error" messages will be logged */ public boolean isErrorEnabled() { return true; } /** * Log a fatalError message. * * @param message the message */ public void fatalError( final String message ) { fatalError( message, null ); } /** * Log a fatalError message. * * @param message the message * @param throwable the throwable */ public void fatalError( final String message, final Throwable throwable ) { append( "FATAL ERROR", message, throwable ); } /** * Determine if messages of priority "fatalError" will be logged. * * @return true if "fatalError" messages will be logged */ public boolean isFatalErrorEnabled() { return true; } /** * Create a new child logger. * The name of the child logger is [current-loggers-name].[passed-in-name] * * @param name the subname of this logger * @return the new logger */ public Logger getChildLogger( final String name ) { return this; } /** * Returns the contents of the buffer. * * @return the buffer contents * */ public String toString() { return m_sb.toString(); } private void append( final String level, final String message, final Throwable throwable ) { synchronized( m_sb ) { m_sb.append( level ); m_sb.append( " - " ); m_sb.append( message ); if( null != throwable ) { final String stackTrace = ExceptionUtil.printStackTrace( throwable ); m_sb.append( " : " ); m_sb.append( stackTrace ); } m_sb.append( "\n" ); } } } 1.1 avalon-excalibur/thread/instrumented/src/java/org/apache/avalon/excalibur/thread/impl/InstrumentedResourceLimitingThreadPool.java Index: InstrumentedResourceLimitingThreadPool.java =================================================================== /* * Copyright 2002-2004 The Apache Software Foundation * Licensed 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.avalon.excalibur.thread.impl; import org.apache.avalon.excalibur.pool.ObjectFactory; import org.apache.avalon.excalibur.pool.InstrumentedResourceLimitingPool; import org.apache.avalon.framework.activity.Disposable; import org.apache.avalon.framework.activity.Executable; import org.apache.avalon.framework.container.ContainerUtil; import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; import org.apache.excalibur.instrument.Instrument; import org.apache.excalibur.instrument.Instrumentable; import org.apache.excalibur.thread.ThreadControl; import org.apache.excalibur.thread.ThreadPool; /** * A Thread Pool which can be configured to have a hard limit on the maximum number of threads * which will be allocated. This is very important for servers to avoid running out of system * resources. The pool can be configured to block for a new thread or throw an exception. * The maximum block time can also be set. * * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a> * @version CVS $Revision: 1.1 $ $Date: 2004/03/29 17:22:49 $ * @since 4.1 */ public class InstrumentedResourceLimitingThreadPool extends ThreadGroup implements ObjectFactory, LogEnabled, Disposable, ThreadPool, Instrumentable { private InstrumentedResourceLimitingPool m_underlyingPool; /** Instrumentable Name assigned to this Instrumentable */ private String m_instrumentableName; /** * The associated thread pool. */ private BasicThreadPool m_pool; /*--------------------------------------------------------------- * Constructors *-------------------------------------------------------------*/ /** * Creates a new <code>ResourceLimitingThreadPool</code>. * * @param max Maximum number of Poolables which can be stored in the pool, 0 implies no limit. */ public InstrumentedResourceLimitingThreadPool( final int max ) { this( "Worker Pool", max ); } /** * Creates a new <code>ResourceLimitingThreadPool</code> with maxStrict enabled, * blocking enabled, no block timeout and a trim interval of 10 seconds. * * @param name Name which will used as the thread group name as well as the prefix of the * names of all threads created by the pool. * @param max Maximum number of WorkerThreads which can be stored in the pool, * 0 implies no limit. */ public InstrumentedResourceLimitingThreadPool( final String name, final int max ) { this( name, max, true, true, 0, 10000 ); } /** * Creates a new <code>ResourceLimitingThreadPool</code>. * * @param name Name which will used as the thread group name as well as the prefix of the * names of all threads created by the pool. * @param max Maximum number of WorkerThreads which can be stored in the pool, * 0 implies no limit. * @param maxStrict true if the pool should never allow more than max WorkerThreads to * be created. Will cause an exception to be thrown if more than max WorkerThreads are * requested and blocking is false. * @param blocking true if the pool should cause a thread calling get() to block when * WorkerThreads are not currently available on the pool. * @param blockTimeout The maximum amount of time, in milliseconds, that a call to get() will * block before an exception is thrown. A value of 0 implies an indefinate wait. * @param trimInterval The minimum interval with which old unused WorkerThreads will be * removed from the pool. A value of 0 will cause the pool to never trim WorkerThreads. */ public InstrumentedResourceLimitingThreadPool( final String name, final int max, final boolean maxStrict, final boolean blocking, final long blockTimeout, final long trimInterval ) { super( name ); m_underlyingPool = new InstrumentedResourceLimitingPool( this, max, maxStrict, blocking, blockTimeout, trimInterval ); try { m_pool = new BasicThreadPool( this, name, m_underlyingPool ); } catch( Exception e ) { final String message = "Unable to create ThreadPool due to " + e; throw new IllegalStateException( message ); } } /*--------------------------------------------------------------- * Instrumentable Methods *-------------------------------------------------------------*/ /** * Sets the name for the Instrumentable. The Instrumentable Name is used * to uniquely identify the Instrumentable during the configuration of * the InstrumentManager and to gain access to an InstrumentableDescriptor * through the InstrumentManager. The value should be a string which does * not contain spaces or periods. * <p> * This value may be set by a parent Instrumentable, or by the * InstrumentManager using the value of the 'instrumentable' attribute in * the configuration of the component. * * @param name The name used to identify a Instrumentable. */ public void setInstrumentableName( String name ) { m_instrumentableName = name; } /** * Gets the name of the Instrumentable. * * @return The name used to identify a Instrumentable. */ public String getInstrumentableName() { return m_instrumentableName; } /** * Obtain a reference to all the Instruments that the Instrumentable object * wishes to expose. All sampling is done directly through the * Instruments as opposed to the Instrumentable interface. * * @return An array of the Instruments available for profiling. Should * never be null. If there are no Instruments, then * EMPTY_INSTRUMENT_ARRAY can be returned. This should never be * the case though unless there are child Instrumentables with * Instruments. */ public Instrument[] getInstruments() { return Instrumentable.EMPTY_INSTRUMENT_ARRAY; } /** * Any Object which implements Instrumentable can also make use of other * Instrumentable child objects. This method is used to tell the * InstrumentManager about them. * * @return An array of child Instrumentables. This method should never * return null. If there are no child Instrumentables, then * EMPTY_INSTRUMENTABLE_ARRAY can be returned. */ public Instrumentable[] getChildInstrumentables() { return new Instrumentable[]{m_underlyingPool}; } /** * Return the number of worker threads in the pool. * * @return the numebr of worker threads in the pool. */ public int getSize() { return m_underlyingPool.getSize(); } public void enableLogging( final Logger logger ) { ContainerUtil.enableLogging( m_pool, logger ); } public void dispose() { m_pool.dispose(); } public Object newInstance() { return m_pool.newInstance(); } public void decommission( final Object object ) { m_pool.decommission( object ); } public Class getCreatedClass() { return m_pool.getCreatedClass(); } /** * Run work in separate thread. * Return a valid ThreadControl to control work thread. * * @param work the work to be executed. * @return the ThreadControl */ public ThreadControl execute( final Executable work ) { return m_pool.execute( work ); } /** * Run work in separate thread. * Return a valid ThreadControl to control work thread. * * @param work the work to be executed. * @return the ThreadControl */ public ThreadControl execute( final Runnable work ) { return m_pool.execute( work ); } /** * Run work in separate thread. * Return a valid ThreadControl to control work thread. * * @param work the work to be executed. * @return the ThreadControl */ public ThreadControl execute( final org.apache.excalibur.thread.Executable work ) { return m_pool.execute( work ); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]