Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@apache.org Received: (qmail 89627 invoked from network); 10 Oct 2002 20:07:43 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 10 Oct 2002 20:07:43 -0000 Received: (qmail 264 invoked by uid 97); 10 Oct 2002 20:06:39 -0000 Delivered-To: qmlist-jakarta-archive-commons-dev@jakarta.apache.org Received: (qmail 168 invoked by uid 97); 10 Oct 2002 20:06:31 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 29985 invoked by uid 97); 10 Oct 2002 20:06:26 -0000 X-Antivirus: nagoya (v4218 created Aug 14 2002) Date: 10 Oct 2002 20:05:21 -0000 Message-ID: <20021010200521.12986.qmail@icarus.apache.org> From: jstrachan@apache.org To: jakarta-commons-sandbox-cvs@apache.org Subject: cvs commit: jakarta-commons-sandbox/threadpool project.properties .cvsignore maven.xml LICENSE.txt project.xml X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N jstrachan 2002/10/10 13:05:21 Added: threadpool/src/java/org/apache/commons/threadpool package.html ThreadPool.java DefaultThreadPool.java MTQueue.java threadpool/xdocs index.xml threadpool/src/test/org/apache/commons/threadpool TestThreadPool.java threadpool project.properties .cvsignore maven.xml LICENSE.txt project.xml Log: A simple ThreadPool component that can be useful for some simple lightweight asynchronous processing within a single process. This can be useful in Servlet engines or Swing applications when some small things require asynchonrous processing. The basic idea is you do... ThreadPool threadPool = ...; threadPool.invokeLater( new Runnable() { public void run() { // do something } } ); Revision Changes Path 1.1 jakarta-commons-sandbox/threadpool/src/java/org/apache/commons/threadpool/package.html Index: package.html ===================================================================

The Core API of Commons ThreadPool which revolves around a simple {@link ThreadPool} interface. In addition the {@link MTQueue} can be useful for low level inter-thread communication.

1.1 jakarta-commons-sandbox/threadpool/src/java/org/apache/commons/threadpool/ThreadPool.java Index: ThreadPool.java =================================================================== /* * $Header: /home/cvspublic/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java,v 1.1 2002/07/16 05:43:32 werken Exp $ * $Revision: 1.1 $ * $Date: 2002/07/16 05:43:32 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * $Id: SoapTagLibrary.java,v 1.1 2002/07/16 05:43:32 moatas Exp $ */ package org.apache.commons.threadpool; /** * An interface representing some kind of thread pool which allows * asynchronous dispatching of Runnable tasks. It is the responsibility * of the Runnable task to handle exceptions gracefully. Any non handled * exception will typically just be logged. * Though a ThreadPool implementation could have some custom Exception handler * * @author James Strachan * @version $Revision: 1.5 $ */ public interface ThreadPool { /** * Dispatch a new task onto this pool * to be invoked asynchronously later. */ public void invokeLater(Runnable task); } 1.1 jakarta-commons-sandbox/threadpool/src/java/org/apache/commons/threadpool/DefaultThreadPool.java Index: DefaultThreadPool.java =================================================================== /* * $Header: /home/cvspublic/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java,v 1.1 2002/07/16 05:43:32 werken Exp $ * $Revision: 1.1 $ * $Date: 2002/07/16 05:43:32 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * $Id: SoapTagLibrary.java,v 1.1 2002/07/16 05:43:32 moatas Exp $ */ package org.apache.commons.threadpool; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * A default implementation of a ThreadPool * which is constructed with a given number of threads. * * @author James Strachan * @version $Revision: 1.5 $ */ public class DefaultThreadPool implements Runnable, ThreadPool { /** The Log to which logging calls will be made. */ private Log log = LogFactory.getLog(DefaultThreadPool.class); private MTQueue queue = new MTQueue(); private boolean stopped = false; public DefaultThreadPool() { // typically a thread pool should have at least 1 thread startThread(); } public DefaultThreadPool(int numberOfThreads) { for ( int i = 0; i < numberOfThreads; i++ ) { startThread(); } } public DefaultThreadPool(int numberOfThreads, int threadPriority) { for ( int i = 0; i < numberOfThreads; i++ ) { startThread(threadPriority); } } /** Start a new thread running */ public Thread startThread() { Thread thread = new Thread( this ); thread.start(); return thread; } public Thread startThread(int priority) { Thread thread = new Thread( this ); thread.setPriority(priority); thread.start(); return thread; } public void stop() { stopped = true; } /** * Returns number of runnable object in the queue. */ public int getRunnableCount() { return queue.size(); } // ThreadPool interface //------------------------------------------------------------------------- /** * Dispatch a new task onto this pool * to be invoked asynchronously later */ public void invokeLater(Runnable task) { queue.add( task ); } // Runnable interface //------------------------------------------------------------------------- /** The method ran by the pool of background threads */ public void run() { while ( ! stopped ) { Runnable task = (Runnable) queue.remove(); if ( task != null ) { try { task.run(); } catch (Throwable t) { handleException(t); } } } } // Implementation methods //------------------------------------------------------------------------- protected void handleException(Throwable t) { log.error( "Caught: " + t, t ); } } 1.1 jakarta-commons-sandbox/threadpool/src/java/org/apache/commons/threadpool/MTQueue.java Index: MTQueue.java =================================================================== /* * $Header: /home/cvspublic/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java,v 1.1 2002/07/16 05:43:32 werken Exp $ * $Revision: 1.1 $ * $Date: 2002/07/16 05:43:32 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * $Id: SoapTagLibrary.java,v 1.1 2002/07/16 05:43:32 moatas Exp $ */ package org.apache.commons.threadpool; import java.util.LinkedList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * A multithreaded blocking queue which is very useful for * implementing producer-consumer style threading patterns. *

* Multiple blocking threads can wait for items being added * to the queue while other threads add to the queue. *

* Non blocking and timout based modes of access are possible as well. * * @author James Strachan * @version $Revision: 1.5 $ */ public class MTQueue { /** The Log to which logging calls will be made. */ private Log log = LogFactory.getLog(MTQueue.class); private LinkedList list = new LinkedList(); private long timeout = 10000; public MTQueue() { } /** * Returns the current number of object in the queue */ public synchronized int size() { return list.size(); } /** * adds a new object to the end of the queue. * At least one thread will be notified. */ public synchronized void add(Object object) { list.add( object ); notify(); } /** * Removes the first object from the queue, blocking until one is available. * Note that this method will never return null and could block forever. */ public synchronized Object remove() { while (true) { Object answer = removeNoWait(); if ( answer != null ) { return answer; } try { wait( timeout ); } catch (InterruptedException e) { log.error( "Thread was interrupted: " + e, e ); } } } /** * Removes the first object from the queue, blocking only up to the given * timeout time. */ public synchronized Object remove(long timeout) { Object answer = removeNoWait(); if (answer == null) { try { wait( timeout ); } catch (InterruptedException e) { log.error( "Thread was interrupted: " + e, e ); } answer = removeNoWait(); } return answer; } /** * Removes the first object from the queue without blocking. * This method will return immediately with an item from the queue or null. * * @return the first object removed from the queue or null if the * queue is empty */ public synchronized Object removeNoWait() { if ( ! list.isEmpty() ) { return list.removeFirst(); } return null; } } 1.1 jakarta-commons-sandbox/threadpool/xdocs/index.xml Index: index.xml =================================================================== Commons ThreadPool James Strachan

Commons ThreadPool is a component for working with pools of threads and asynchronously executing tasks.

Often inside application servers and containers the threading model is managed for you. However in some circumstances it can be useful to use your own worker thread pools to dispatch asynchronous work into.

In enterprise class systems typically JMS is used to perform some task asynchronously by another machine. However ThreadPools can be a simple and effective mechanism for asynchronous processing within the same process. This can be particularly useful for performing asynchronous processing in Servlet engines or Swing applications.

Once you have a ThreadPool instance you can invoke functionality asynchronously on a ThreadPool via the invokeLater() method.

    // lets start with 5 threads
    ThreadPool threadPool = new DefaultThreadPool(5);    	
  	
    // lets use a specific Runnable
    Runnable someTask = ...;
    threadPool.invokeLater( someTask );
  	
    // lets just wrap up some code in a Runnable
    threadPool.invokeLater(
      new Runnable() {
        public void run() {
          someObject.doSomeSlowThing();
        }
      }		
    );	
  

Note that inside the run() method of your Runnable object you must handle Exceptions properly. Any unhandled runtime exception will be caught and logged using Commons Logging.

1.1 jakarta-commons-sandbox/threadpool/src/test/org/apache/commons/threadpool/TestThreadPool.java Index: TestThreadPool.java =================================================================== /* * $Header: /home/cvspublic/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/util/UtilTagLibrary.java,v 1.1 2002/07/16 05:43:32 werken Exp $ * $Revision: 1.1 $ * $Date: 2002/07/16 05:43:32 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * $Id: SoapTagLibrary.java,v 1.1 2002/07/16 05:43:32 moatas Exp $ */ package org.apache.commons.threadpool; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import junit.textui.TestRunner; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Test harness for the IO package * * @author Jason van Zyl * @version $Revision: 1.3 $ */ public class TestThreadPool extends TestCase { /** * A unit test suite for JUnit */ public static Test suite() { return new TestSuite(TestThreadPool.class); } /** * Constructor for the TestThreadPool object * * @param testName */ public TestThreadPool(String testName) { super(testName); } /** * The JUnit setup method */ protected void setUp() throws Exception { } /** * A unit test for JUnit */ public void testThreadPool() throws Exception { } } 1.1 jakarta-commons-sandbox/threadpool/project.properties Index: project.properties =================================================================== # ------------------------------------------------------------------- # B U I L D P R O P E R T I E S # ------------------------------------------------------------------- # These properties are used by the maven Torque build, you may override # any of these default values by placing property values in # your build.properties file. # ------------------------------------------------------------------- jarResources.basedir = src/java maven.junit.fork = true compile.debug = on compile.optimize = off compile.deprecation = off 1.1 jakarta-commons-sandbox/threadpool/.cvsignore Index: .cvsignore =================================================================== target *.log 1.1 jakarta-commons-sandbox/threadpool/maven.xml Index: maven.xml =================================================================== 1.1 jakarta-commons-sandbox/threadpool/LICENSE.txt Index: LICENSE.txt =================================================================== /* * $Header: /home/cvs/jakarta-commons/LICENSE,v 1.4 2002/04/11 13:24:02 dion Exp $ * $Revision: 1.4 $ * $Date: 2002/04/11 13:24:02 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ 1.1 jakarta-commons-sandbox/threadpool/project.xml Index: project.xml =================================================================== 3 commons-threadpool commons-threadpool 1.0-dev Apache Software Foundation http://www.apache.org /images/jakarta-logo-blue.gif /images/logo.jpg 2002 org.apache.commons.threadpool Thread Pool Component jakarta A simple thread pool component. http://jakarta.apache.org/commons/threadpool/ http://cvs.apache.org/viewcvs/jakarta-commons-sandbox/threadpool/ http://nagoya.apache.org:8080/scarab/servlet/scarab/ jakarta.apache.org /www/jakarta.apache.org/commons/sandbox/threadpool/ /www/jakarta.apache.org/builds/jakarta-commons-sandbox/threadpool/ Commons User List commons-user-subscribe@jakarta.apache.org commons-user-unsubscribe@jakarta.apache.org http://nagoya.apache.org:8080/eyebrowse/SummarizeList?listName=commons-user@jakarta.apache.org Commons Developer List commons-dev-subscribe@jakarta.apache.org commons-dev-unsubscribe@jakarta.apache.org http://nagoya.apache.org:8080/eyebrowse/SummarizeList?listName=commons-dev@jakarta.apache.org James Strachan jstrachan jstrachan@apache.org SpiritSoft, Inc. commons-logging 1.0.1 xml-apis 2.0.2 xerces 2.0.2 commons-dev@jakarta.apache.org src/java src/test **/Test*.java **/*.properties, **/*.betwixt -- To unsubscribe, e-mail: For additional commands, e-mail: