You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2006/04/10 00:58:41 UTC

svn commit: r392847 - in /geronimo/branches/1.1: configs/client/src/plan/ configs/j2ee-server/src/plan/ modules/connector-builder/ modules/connector-builder/src/test-data/connector_1_5/ modules/connector-builder/src/test-data/data/ modules/connector/ m...

Author: ammulder
Date: Sun Apr  9 15:58:39 2006
New Revision: 392847

URL: http://svn.apache.org/viewcvs?rev=392847&view=rev
Log:
Make thread pools manageable and make our WorkManager use our thread pools
  under the covers.

Added:
    geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/ThreadPool.java
    geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/stats/ThreadPoolStats.java
Modified:
    geronimo/branches/1.1/configs/client/src/plan/plan.xml
    geronimo/branches/1.1/configs/j2ee-server/src/plan/plan.xml
    geronimo/branches/1.1/modules/connector-builder/project.xml
    geronimo/branches/1.1/modules/connector-builder/src/test-data/connector_1_5/geronimo-ra.xml
    geronimo/branches/1.1/modules/connector-builder/src/test-data/data/external-application-plan.xml
    geronimo/branches/1.1/modules/connector-builder/src/test-data/data/old-schema-plan.xml
    geronimo/branches/1.1/modules/connector/project.xml
    geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
    geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java
    geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java
    geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java
    geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java
    geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java
    geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/BootstrapContextTest.java
    geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/work/PooledWorkManagerTest.java
    geronimo/branches/1.1/modules/core/project.xml
    geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/GeronimoExecutor.java
    geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/ThreadPool.java
    geronimo/branches/1.1/modules/j2ee/src/java/org/apache/geronimo/j2ee/management/impl/J2EEServerImpl.java
    geronimo/branches/1.1/modules/management/project.xml
    geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/J2EEServer.java
    geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/stats/StatsImpl.java
    geronimo/branches/1.1/modules/timer/project.xml

Modified: geronimo/branches/1.1/configs/client/src/plan/plan.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/configs/client/src/plan/plan.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/configs/client/src/plan/plan.xml (original)
+++ geronimo/branches/1.1/configs/client/src/plan/plan.xml Sun Apr  9 15:58:39 2006
@@ -48,9 +48,15 @@
     </gbean>
 
     <gbean name="DefaultWorkManager"  class="org.apache.geronimo.connector.work.GeronimoWorkManagerGBean">
-        <attribute name="syncMaximumPoolSize">10</attribute>
-        <attribute name="startMaximumPoolSize">10</attribute>
-        <attribute name="scheduledMaximumPoolSize">10</attribute>
+        <reference name="SyncPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="StartPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="ScheduledPool">
+            <name>DefaultThreadPool</name>
+        </reference>
         <reference name="TransactionContextManager">
             <name>TransactionContextManager</name>
         </reference>

Modified: geronimo/branches/1.1/configs/j2ee-server/src/plan/plan.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/configs/j2ee-server/src/plan/plan.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/configs/j2ee-server/src/plan/plan.xml (original)
+++ geronimo/branches/1.1/configs/j2ee-server/src/plan/plan.xml Sun Apr  9 15:58:39 2006
@@ -41,10 +41,22 @@
            class="org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinatorGBean">
     </gbean>
 
+    <gbean name="ConnectorThreadPool" class="org.apache.geronimo.pool.ThreadPool">
+        <attribute name="keepAliveTime">5000</attribute>
+        <attribute name="poolSize">30</attribute>
+        <attribute name="poolName">ConnectorThreadPool</attribute>
+    </gbean>
+
     <gbean name="DefaultWorkManager" class="org.apache.geronimo.connector.work.GeronimoWorkManagerGBean">
-        <attribute name="syncMaximumPoolSize">10</attribute>
-        <attribute name="startMaximumPoolSize">10</attribute>
-        <attribute name="scheduledMaximumPoolSize">10</attribute>
+        <reference name="SyncPool">
+            <name>ConnectorThreadPool</name>
+        </reference>
+        <reference name="StartPool">
+            <name>ConnectorThreadPool</name>
+        </reference>
+        <reference name="ScheduledPool">
+            <name>ConnectorThreadPool</name>
+        </reference>
         <reference name="TransactionContextManager">
             <name>TransactionContextManager</name>
         </reference>

Modified: geronimo/branches/1.1/modules/connector-builder/project.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector-builder/project.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector-builder/project.xml (original)
+++ geronimo/branches/1.1/modules/connector-builder/project.xml Sun Apr  9 15:58:39 2006
@@ -111,6 +111,12 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
+            <version>${geronimo_spec_j2ee_management_version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>geronimo</groupId>
             <artifactId>geronimo-management</artifactId>
             <version>${pom.currentVersion}</version>

Modified: geronimo/branches/1.1/modules/connector-builder/src/test-data/connector_1_5/geronimo-ra.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector-builder/src/test-data/connector_1_5/geronimo-ra.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector-builder/src/test-data/connector_1_5/geronimo-ra.xml (original)
+++ geronimo/branches/1.1/modules/connector-builder/src/test-data/connector_1_5/geronimo-ra.xml Sun Apr  9 15:58:39 2006
@@ -113,10 +113,22 @@
            class="org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinatorGBean">
     </gbean>
 
+    <gbean name="DefaultThreadPool" class="org.apache.geronimo.pool.ThreadPool">
+        <attribute name="keepAliveTime">5000</attribute>
+        <attribute name="poolSize">300</attribute>
+        <attribute name="poolName">DefaultThreadPool</attribute>
+    </gbean>
+
     <gbean name="DefaultWorkManager" class="org.apache.geronimo.connector.work.GeronimoWorkManagerGBean">
-        <attribute name="syncMaximumPoolSize">10</attribute>
-        <attribute name="startMaximumPoolSize">10</attribute>
-        <attribute name="scheduledMaximumPoolSize">10</attribute>
+        <reference name="SyncPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="StartPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="ScheduledPool">
+            <name>DefaultThreadPool</name>
+        </reference>
         <reference name="TransactionContextManager">
             <name>TransactionContextManager</name>
         </reference>

Modified: geronimo/branches/1.1/modules/connector-builder/src/test-data/data/external-application-plan.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector-builder/src/test-data/data/external-application-plan.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector-builder/src/test-data/data/external-application-plan.xml (original)
+++ geronimo/branches/1.1/modules/connector-builder/src/test-data/data/external-application-plan.xml Sun Apr  9 15:58:39 2006
@@ -191,11 +191,25 @@
     <gbean name="ConnectionTracker" class="org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinatorGBean">
     </gbean>
 
+    <gbean name="DefaultThreadPool" class="org.apache.geronimo.pool.ThreadPool">
+        <attribute name="keepAliveTime">5000</attribute>
+        <attribute name="poolSize">300</attribute>
+        <attribute name="poolName">DefaultThreadPool</attribute>
+    </gbean>
+
     <gbean name="DefaultWorkManager" class="org.apache.geronimo.connector.work.GeronimoWorkManagerGBean">
-        <attribute name="syncMaximumPoolSize">10</attribute>
-        <attribute name="startMaximumPoolSize">10</attribute>
-        <attribute name="scheduledMaximumPoolSize">10</attribute>
-        <reference name="TransactionContextManager"><name>TransactionContextManager</name></reference>
+        <reference name="SyncPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="StartPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="ScheduledPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="TransactionContextManager">
+            <name>TransactionContextManager</name>
+        </reference>
     </gbean>
 
     <gbean name="TransactionManager" class="org.apache.geronimo.transaction.manager.TransactionManagerImplGBean">

Modified: geronimo/branches/1.1/modules/connector-builder/src/test-data/data/old-schema-plan.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector-builder/src/test-data/data/old-schema-plan.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector-builder/src/test-data/data/old-schema-plan.xml (original)
+++ geronimo/branches/1.1/modules/connector-builder/src/test-data/data/old-schema-plan.xml Sun Apr  9 15:58:39 2006
@@ -110,11 +110,25 @@
     <gbean name="ConnectionTracker" class="org.apache.geronimo.connector.outbound.connectiontracking.ConnectionTrackingCoordinatorGBean">
     </gbean>
 
+    <gbean name="DefaultThreadPool" class="org.apache.geronimo.pool.ThreadPool">
+        <attribute name="keepAliveTime">5000</attribute>
+        <attribute name="poolSize">300</attribute>
+        <attribute name="poolName">DefaultThreadPool</attribute>
+    </gbean>
+
     <gbean name="DefaultWorkManager" class="org.apache.geronimo.connector.work.GeronimoWorkManagerGBean">
-        <attribute name="syncMaximumPoolSize">10</attribute>
-        <attribute name="startMaximumPoolSize">10</attribute>
-        <attribute name="scheduledMaximumPoolSize">10</attribute>
-        <reference name="TransactionContextManager"><name>TransactionContextManager</name></reference>
+        <reference name="SyncPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="StartPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="ScheduledPool">
+            <name>DefaultThreadPool</name>
+        </reference>
+        <reference name="TransactionContextManager">
+            <name>TransactionContextManager</name>
+        </reference>
     </gbean>
 
     <gbean name="TransactionManager" class="org.apache.geronimo.transaction.manager.TransactionManagerImplGBean">

Modified: geronimo/branches/1.1/modules/connector/project.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/project.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/project.xml (original)
+++ geronimo/branches/1.1/modules/connector/project.xml Sun Apr  9 15:58:39 2006
@@ -56,8 +56,20 @@
 
         <dependency>
             <groupId>geronimo</groupId>
+            <artifactId>geronimo-core</artifactId>
+            <version>${pom.currentVersion}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
             <artifactId>geronimo-j2ee</artifactId>
             <version>${pom.currentVersion}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
+            <version>${geronimo_spec_j2ee_management_version}</version>
         </dependency>
 
         <dependency>

Modified: geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java (original)
+++ geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManager.java Sun Apr  9 15:58:39 2006
@@ -17,15 +17,6 @@
 
 package org.apache.geronimo.connector.work;
 
-import EDU.oswego.cs.dl.util.concurrent.Executor;
-import org.apache.geronimo.connector.work.pool.NullWorkExecutorPool;
-import org.apache.geronimo.connector.work.pool.ScheduleWorkExecutor;
-import org.apache.geronimo.connector.work.pool.StartWorkExecutor;
-import org.apache.geronimo.connector.work.pool.SyncWorkExecutor;
-import org.apache.geronimo.connector.work.pool.WorkExecutor;
-import org.apache.geronimo.connector.work.pool.WorkExecutorPool;
-import org.apache.geronimo.transaction.context.TransactionContextManager;
-
 import javax.resource.spi.XATerminator;
 import javax.resource.spi.work.ExecutionContext;
 import javax.resource.spi.work.Work;
@@ -33,6 +24,12 @@
 import javax.resource.spi.work.WorkException;
 import javax.resource.spi.work.WorkListener;
 import javax.resource.spi.work.WorkManager;
+import org.apache.geronimo.connector.work.pool.ScheduleWorkExecutor;
+import org.apache.geronimo.connector.work.pool.StartWorkExecutor;
+import org.apache.geronimo.connector.work.pool.SyncWorkExecutor;
+import org.apache.geronimo.connector.work.pool.WorkExecutor;
+import org.apache.geronimo.pool.GeronimoExecutor;
+import org.apache.geronimo.transaction.context.TransactionContextManager;
 
 /**
  * WorkManager implementation which uses under the cover three WorkExecutorPool
@@ -46,25 +43,25 @@
  */
 public class GeronimoWorkManager implements WorkManager {
 
-    private final static int DEFAULT_POOL_SIZE = 10;
+//    private final static int DEFAULT_POOL_SIZE = 10;
 
     /**
      * Pool of threads used by this WorkManager in order to process
      * the Work instances submitted via the doWork methods.
      */
-    private WorkExecutorPool syncWorkExecutorPool;
+    private GeronimoExecutor syncWorkExecutorPool;
 
     /**
      * Pool of threads used by this WorkManager in order to process
      * the Work instances submitted via the startWork methods.
      */
-    private WorkExecutorPool startWorkExecutorPool;
+    private GeronimoExecutor startWorkExecutorPool;
 
     /**
      * Pool of threads used by this WorkManager in order to process
      * the Work instances submitted via the scheduleWork methods.
      */
-    private WorkExecutorPool scheduledWorkExecutorPool;
+    private GeronimoExecutor scheduledWorkExecutorPool;
 
     private final TransactionContextManager transactionContextManager;
 
@@ -76,30 +73,20 @@
      * Create a WorkManager.
      */
     public GeronimoWorkManager() {
-        this(DEFAULT_POOL_SIZE, null);
-    }
-
-    public GeronimoWorkManager(int size, TransactionContextManager transactionContextManager) {
-        this(size, size, size, transactionContextManager);
+        this(null, null, null, null);
     }
 
-    public GeronimoWorkManager(int syncSize, int startSize, int schedSize, TransactionContextManager transactionContextManager) {
-        syncWorkExecutorPool = new NullWorkExecutorPool(syncSize);
-        startWorkExecutorPool = new NullWorkExecutorPool(startSize);
-        scheduledWorkExecutorPool = new NullWorkExecutorPool(schedSize);
+    public GeronimoWorkManager(GeronimoExecutor sync, GeronimoExecutor start, GeronimoExecutor sched, TransactionContextManager transactionContextManager) {
+        syncWorkExecutorPool = sync;
+        startWorkExecutorPool = start;
+        scheduledWorkExecutorPool = sched;
         this.transactionContextManager = transactionContextManager;
     }
 
     public void doStart() throws Exception {
-        syncWorkExecutorPool = syncWorkExecutorPool.start();
-        startWorkExecutorPool = startWorkExecutorPool.start();
-        scheduledWorkExecutorPool = scheduledWorkExecutorPool.start();
     }
 
     public void doStop() throws Exception {
-        syncWorkExecutorPool = syncWorkExecutorPool.stop();
-        startWorkExecutorPool = startWorkExecutorPool.stop();
-        scheduledWorkExecutorPool = scheduledWorkExecutorPool.stop();
     }
 
     public void doFail() {
@@ -114,40 +101,16 @@
         return transactionContextManager;
     }
 
-    public int getSyncThreadCount() {
-        return syncWorkExecutorPool.getPoolSize();
-    }
-
-    public int getSyncMaximumPoolSize() {
-        return syncWorkExecutorPool.getMaximumPoolSize();
-    }
-
-    public void setSyncMaximumPoolSize(int maxSize) {
-        syncWorkExecutorPool.setMaximumPoolSize(maxSize);
-    }
-
-    public int getStartThreadCount() {
-        return startWorkExecutorPool.getPoolSize();
-    }
-
-    public int getStartMaximumPoolSize() {
-        return startWorkExecutorPool.getMaximumPoolSize();
-    }
-
-    public void setStartMaximumPoolSize(int maxSize) {
-        startWorkExecutorPool.setMaximumPoolSize(maxSize);
-    }
-
-    public int getScheduledThreadCount() {
-        return scheduledWorkExecutorPool.getPoolSize();
+    public GeronimoExecutor getSyncWorkExecutorPool() {
+        return syncWorkExecutorPool;
     }
 
-    public int getScheduledMaximumPoolSize() {
-        return scheduledWorkExecutorPool.getMaximumPoolSize();
+    public GeronimoExecutor getStartWorkExecutorPool() {
+        return startWorkExecutorPool;
     }
 
-    public void setScheduledMaximumPoolSize(int maxSize) {
-        scheduledWorkExecutorPool.setMaximumPoolSize(maxSize);
+    public GeronimoExecutor getScheduledWorkExecutorPool() {
+        return scheduledWorkExecutorPool;
     }
 
     /* (non-Javadoc)
@@ -230,7 +193,7 @@
      * @exception WorkException Indicates that the Work execution has been
      * unsuccessful.
      */
-    private void executeWork(WorkerContext work, WorkExecutor workExecutor, Executor pooledExecutor) throws WorkException {
+    private void executeWork(WorkerContext work, WorkExecutor workExecutor, GeronimoExecutor pooledExecutor) throws WorkException {
         work.workAccepted(this);
         try {
             workExecutor.doExecute(work, pooledExecutor);

Modified: geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java (original)
+++ geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/GeronimoWorkManagerGBean.java Sun Apr  9 15:58:39 2006
@@ -17,12 +17,11 @@
 
 package org.apache.geronimo.connector.work;
 
-import javax.resource.spi.work.WorkManager;
-
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.pool.GeronimoExecutor;
 import org.apache.geronimo.transaction.context.TransactionContextManager;
 
 /**
@@ -34,12 +33,8 @@
     public GeronimoWorkManagerGBean() {
     }
 
-    public GeronimoWorkManagerGBean(int size, TransactionContextManager transactionContextManager) {
-        super(size, transactionContextManager);
-    }
-
-    public GeronimoWorkManagerGBean(int syncSize, int startSize, int schedSize, TransactionContextManager transactionContextManager) {
-        super(syncSize, startSize, schedSize, transactionContextManager);
+    public GeronimoWorkManagerGBean(GeronimoExecutor sync, GeronimoExecutor start, GeronimoExecutor sched, TransactionContextManager transactionContextManager) {
+        super(sync, start, sched, transactionContextManager);
     }
 
     public static final GBeanInfo GBEAN_INFO;
@@ -48,18 +43,18 @@
         GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(GeronimoWorkManagerGBean.class, NameFactory.JCA_WORK_MANAGER);
         infoFactory.addInterface(GeronimoWorkManager.class);
 
-        infoFactory.addAttribute("syncMaximumPoolSize", Integer.TYPE, true);
-        infoFactory.addAttribute("startMaximumPoolSize", Integer.TYPE, true);
-        infoFactory.addAttribute("scheduledMaximumPoolSize", Integer.TYPE, true);
+        infoFactory.addReference("SyncPool", GeronimoExecutor.class, NameFactory.GERONIMO_SERVICE);
+        infoFactory.addReference("StartPool", GeronimoExecutor.class, NameFactory.GERONIMO_SERVICE);
+        infoFactory.addReference("ScheduledPool", GeronimoExecutor.class, NameFactory.GERONIMO_SERVICE);
 
         infoFactory.addOperation("getXATerminator");
 
         infoFactory.addReference("TransactionContextManager", TransactionContextManager.class, NameFactory.TRANSACTION_CONTEXT_MANAGER);
 
         infoFactory.setConstructor(new String[]{
-            "syncMaximumPoolSize",
-            "startMaximumPoolSize",
-            "scheduledMaximumPoolSize",
+            "SyncPool",
+            "StartPool",
+            "ScheduledPool",
             "TransactionContextManager"});
 
         GBEAN_INFO = infoFactory.getBeanInfo();

Modified: geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java (original)
+++ geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/ScheduleWorkExecutor.java Sun Apr  9 15:58:39 2006
@@ -18,9 +18,8 @@
 package org.apache.geronimo.connector.work.pool;
 
 import javax.resource.spi.work.WorkException;
-
 import org.apache.geronimo.connector.work.WorkerContext;
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import org.apache.geronimo.pool.GeronimoExecutor;
 
 /**
  *
@@ -30,8 +29,8 @@
  * */
 public class ScheduleWorkExecutor implements WorkExecutor {
 
-    public void doExecute(WorkerContext work, Executor executor)
+    public void doExecute(WorkerContext work, GeronimoExecutor executor)
             throws WorkException, InterruptedException {
-        executor.execute(work);
+        executor.execute("A J2EE Connector", work);
     }
 }

Modified: geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java (original)
+++ geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/StartWorkExecutor.java Sun Apr  9 15:58:39 2006
@@ -18,10 +18,9 @@
 package org.apache.geronimo.connector.work.pool;
 
 import javax.resource.spi.work.WorkException;
-
-import org.apache.geronimo.connector.work.WorkerContext;
-import EDU.oswego.cs.dl.util.concurrent.Executor;
 import EDU.oswego.cs.dl.util.concurrent.Latch;
+import org.apache.geronimo.connector.work.WorkerContext;
+import org.apache.geronimo.pool.GeronimoExecutor;
 
 /**
  *
@@ -31,10 +30,10 @@
  * */
 public class StartWorkExecutor implements WorkExecutor {
 
-    public void doExecute(WorkerContext work, Executor executor)
+    public void doExecute(WorkerContext work, GeronimoExecutor executor)
             throws WorkException, InterruptedException {
         Latch latch = work.provideStartLatch();
-        executor.execute(work);
+        executor.execute("A J2EE Connector", work);
         latch.acquire();
     }
 }

Modified: geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java (original)
+++ geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/SyncWorkExecutor.java Sun Apr  9 15:58:39 2006
@@ -18,10 +18,9 @@
 package org.apache.geronimo.connector.work.pool;
 
 import javax.resource.spi.work.WorkException;
-
-import org.apache.geronimo.connector.work.WorkerContext;
-import EDU.oswego.cs.dl.util.concurrent.Executor;
 import EDU.oswego.cs.dl.util.concurrent.Latch;
+import org.apache.geronimo.connector.work.WorkerContext;
+import org.apache.geronimo.pool.GeronimoExecutor;
 
 /**
  *
@@ -31,10 +30,10 @@
  * */
 public class SyncWorkExecutor implements WorkExecutor {
 
-    public void doExecute(WorkerContext work, Executor executor)
+    public void doExecute(WorkerContext work, GeronimoExecutor executor)
             throws WorkException, InterruptedException {
         Latch latch = work.provideEndLatch();
-        executor.execute(work);
+        executor.execute("A J2EE Connector", work);
         latch.acquire();
     }
 }

Modified: geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java (original)
+++ geronimo/branches/1.1/modules/connector/src/java/org/apache/geronimo/connector/work/pool/WorkExecutor.java Sun Apr  9 15:58:39 2006
@@ -1,9 +1,8 @@
 package org.apache.geronimo.connector.work.pool;
 
 import javax.resource.spi.work.WorkException;
-
 import org.apache.geronimo.connector.work.WorkerContext;
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import org.apache.geronimo.pool.GeronimoExecutor;
 
 /**
  *
@@ -24,7 +23,7 @@
      * @throws InterruptedException Indicates that the thread in charge of the
      * execution of the specified work has been interrupted.
      */
-     void doExecute(WorkerContext work, Executor executor)
+     void doExecute(WorkerContext work, GeronimoExecutor executor)
             throws WorkException, InterruptedException;
 
 

Modified: geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/BootstrapContextTest.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/BootstrapContextTest.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/BootstrapContextTest.java (original)
+++ geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/BootstrapContextTest.java Sun Apr  9 15:58:39 2006
@@ -24,19 +24,25 @@
 import junit.framework.TestCase;
 import org.apache.geronimo.connector.work.GeronimoWorkManager;
 import org.apache.geronimo.transaction.context.TransactionContextManager;
+import org.apache.geronimo.pool.ThreadPool;
 
 /**
  * Unit tests for {@link BootstrapContextImpl}
  * @version $Rev$ $Date$
  */
 public class BootstrapContextTest extends TestCase {
+    ThreadPool pool;
+    protected void setUp() throws Exception {
+        super.setUp();
+        pool = new ThreadPool(1, "Connector Test", 30000, ThreadPool.class.getClassLoader(), "foo:test=bar");
+    }
 
     /**
      * Tests get and set work manager
      */
     public void testGetSetWorkManager() {
         TransactionContextManager transactionContextManager = new TransactionContextManager();
-        GeronimoWorkManager manager = new GeronimoWorkManager(1, transactionContextManager);
+        GeronimoWorkManager manager = new GeronimoWorkManager(pool, pool, pool, transactionContextManager);
         BootstrapContextImpl context = new BootstrapContextImpl(manager);
         WorkManager wm = context.getWorkManager();
 
@@ -48,7 +54,7 @@
      */
     public void testGetSetXATerminator() {
         TransactionContextManager transactionContextManager = new TransactionContextManager();
-        GeronimoWorkManager manager = new GeronimoWorkManager(1, transactionContextManager);
+        GeronimoWorkManager manager = new GeronimoWorkManager(pool, pool, pool, transactionContextManager);
         BootstrapContextImpl context = new BootstrapContextImpl(manager);
         XATerminator xat = context.getXATerminator();
 

Modified: geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/work/PooledWorkManagerTest.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/work/PooledWorkManagerTest.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/work/PooledWorkManagerTest.java (original)
+++ geronimo/branches/1.1/modules/connector/src/test/org/apache/geronimo/connector/work/PooledWorkManagerTest.java Sun Apr  9 15:58:39 2006
@@ -26,6 +26,7 @@
 
 import junit.framework.TestCase;
 import org.apache.geronimo.transaction.context.TransactionContextManager;
+import org.apache.geronimo.pool.ThreadPool;
 
 /**
  * Timing is crucial for this test case, which focuses on the synchronization
@@ -39,7 +40,9 @@
 
     protected void setUp() throws Exception {
         TransactionContextManager transactionContextManager = new TransactionContextManager();
-        workManager = new GeronimoWorkManager(1, transactionContextManager);
+        ThreadPool pool = new ThreadPool(1, "Connector Test", 30000, ThreadPool.class.getClassLoader(), "foo:test=bar");
+        pool.setWaitWhenBlocked(true);
+        workManager = new GeronimoWorkManager(pool, pool, pool, transactionContextManager);
         workManager.doStart();
     }
 
@@ -113,7 +116,7 @@
     }
 
     private AbstractDummyWork[] helperTest(Class aWork, int nbThreads,
-        int aTimeOut, int aTempo)
+                                           int aTimeOut, int aTempo)
         throws Exception {
         Constructor constructor = aWork.getConstructor(
             new Class[]{PooledWorkManagerTest.class, String.class,
@@ -154,9 +157,9 @@
         }
 
         protected abstract void perform(Work work,
-                long startTimeout,
-                ExecutionContext execContext,
-                WorkListener workListener) throws Exception;
+                                        long startTimeout,
+                                        ExecutionContext execContext,
+                                        WorkListener workListener) throws Exception;
     }
 
     public class DummyDoWork extends AbstractDummyWork {
@@ -165,9 +168,9 @@
         }
 
         protected void perform(Work work,
-                long startTimeout,
-                ExecutionContext execContext,
-                WorkListener workListener) throws Exception {
+                               long startTimeout,
+                               ExecutionContext execContext,
+                               WorkListener workListener) throws Exception {
             workManager.doWork(work, startTimeout, execContext, workListener);
         }
     }
@@ -178,9 +181,9 @@
         }
 
         protected void perform(Work work,
-                long startTimeout,
-                ExecutionContext execContext,
-                WorkListener workListener) throws Exception {
+                               long startTimeout,
+                               ExecutionContext execContext,
+                               WorkListener workListener) throws Exception {
             workManager.startWork(work, startTimeout, execContext, workListener);
         }
     }
@@ -191,9 +194,9 @@
         }
 
         protected void perform(Work work,
-                long startTimeout,
-                ExecutionContext execContext,
-                WorkListener workListener) throws Exception {
+                               long startTimeout,
+                               ExecutionContext execContext,
+                               WorkListener workListener) throws Exception {
             workManager.scheduleWork(work, startTimeout, execContext, workListener);
         }
     }

Modified: geronimo/branches/1.1/modules/core/project.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/core/project.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/core/project.xml (original)
+++ geronimo/branches/1.1/modules/core/project.xml Sun Apr  9 15:58:39 2006
@@ -62,6 +62,18 @@
             <artifactId>geronimo-kernel</artifactId>
             <version>${pom.currentVersion}</version>
         </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-management</artifactId>
+            <version>${pom.currentVersion}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
+            <version>${geronimo_spec_j2ee_management_version}</version>
+        </dependency>
     </dependencies>
 
 

Modified: geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/GeronimoExecutor.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/GeronimoExecutor.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/GeronimoExecutor.java (original)
+++ geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/GeronimoExecutor.java Sun Apr  9 15:58:39 2006
@@ -24,7 +24,7 @@
  *
  * @version $Rev$ $Date$
  */
-public interface GeronimoExecutor extends Executor {
+public interface GeronimoExecutor extends Executor, org.apache.geronimo.management.geronimo.ThreadPool {
     /**
      * Gets a human-readable name identifying this object.
      */

Modified: geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/ThreadPool.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/ThreadPool.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/ThreadPool.java (original)
+++ geronimo/branches/1.1/modules/core/src/java/org/apache/geronimo/pool/ThreadPool.java Sun Apr  9 15:58:39 2006
@@ -17,22 +17,41 @@
 
 package org.apache.geronimo.pool;
 
-import javax.management.ObjectName;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 import javax.management.MalformedObjectNameException;
-import EDU.oswego.cs.dl.util.concurrent.Executor;
+import javax.management.ObjectName;
+import javax.management.j2ee.statistics.BoundedRangeStatistic;
+import javax.management.j2ee.statistics.CountStatistic;
+import javax.management.j2ee.statistics.Stats;
 import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
 import EDU.oswego.cs.dl.util.concurrent.ThreadFactory;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.management.J2EEManagedObject;
+import org.apache.geronimo.management.StatisticsProvider;
+import org.apache.geronimo.management.geronimo.stats.ThreadPoolStats;
+import org.apache.geronimo.management.stats.BoundedRangeImpl;
+import org.apache.geronimo.management.stats.CountStatisticImpl;
+import org.apache.geronimo.management.stats.StatsImpl;
 
 /**
  * @version $Rev$ $Date$
  */
-public class ThreadPool implements GeronimoExecutor, GBeanLifecycle {
+public class ThreadPool implements GeronimoExecutor, GBeanLifecycle, J2EEManagedObject, StatisticsProvider {
     private PooledExecutor executor;
     private ClassLoader classLoader;
     private ObjectName objectName;
+    private boolean waitWhenBlocked;
+
+    // Statistics-related fields follow
+    private boolean statsActive = true;
+    private PoolStatsImpl stats = new PoolStatsImpl();
+    private Map clients = new HashMap();
+
 
     public ThreadPool(int poolSize, String poolName, long keepAliveTime, ClassLoader classLoader, String objectName) {
         PooledExecutor p = new PooledExecutor(poolSize);
@@ -43,7 +62,7 @@
         try {
             this.objectName = ObjectName.getInstance(objectName);
         } catch (MalformedObjectNameException e) {
-            throw new IllegalStateException("Bad object name injected: "+e.getMessage());
+            throw new IllegalStateException("Bad object name injected: " + e.getMessage());
         }
 
         executor = p;
@@ -58,9 +77,110 @@
         return objectName.getCanonicalName();
     }
 
+    public boolean isEventProvider() {
+        return true;
+    }
+
+    public boolean isStateManageable() {
+        return true;
+    }
+
+    public boolean isStatisticsProvider() {
+        return true;
+    }
+
+    public Stats getStats() {
+        stats.threadsInUse.setLowerBound(0);
+        stats.threadsInUse.setUpperBound(executor.getMaximumPoolSize());
+        int inUse = executor.getPoolSize();
+        stats.threadsInUse.setCurrent(inUse);
+        if (inUse < stats.threadsInUse.getLowWaterMark()) {
+            stats.threadsInUse.setLowWaterMark(inUse);
+        }
+        if (inUse > stats.threadsInUse.getHighWaterMark()) {
+            stats.threadsInUse.setHighWaterMark(inUse);
+        }
+        if (statsActive) {
+            synchronized (this) {
+                stats.prepareConsumers(clients);
+            }
+        } else {
+            stats.prepareConsumers(Collections.EMPTY_MAP);
+        }
+        return stats;
+    }
+
+    public static class PoolStatsImpl extends StatsImpl implements ThreadPoolStats {
+        private BoundedRangeImpl threadsInUse = new BoundedRangeImpl("Threads In Use", "", "The number of threads in use by this thread pool");
+        private Map consumers = new HashMap();
+
+        public PoolStatsImpl() {
+            addStat(threadsInUse.getName(), threadsInUse);
+        }
+
+        public BoundedRangeStatistic getThreadsInUse() {
+            return threadsInUse;
+        }
+
+        public CountStatistic getCountForConsumer(String consumer) {
+            return (CountStatistic) consumers.get(consumer);
+        }
+
+        public String[] getThreadConsumers() {
+            return (String[]) consumers.keySet().toArray(new String[consumers.size()]);
+        }
+
+        public void prepareConsumers(Map clients) {
+            Map result = new HashMap();
+            for (Iterator it = clients.keySet().iterator(); it.hasNext();) {
+                String client = (String) it.next();
+                Integer count = (Integer) clients.get(client);
+                CountStatisticImpl stat = (CountStatisticImpl) consumers.get(client);
+                if (stat == null) {
+                    stat = new CountStatisticImpl("Threads for " + client, "", "The number of threads used by the client known as '" + client + "'", count.intValue());
+                    addStat(stat.getName(), stat);
+                } else {
+                    it.remove();
+                    stat.setCount(count.intValue());
+                }
+                result.put(client, stat);
+            }
+            for (Iterator it = consumers.keySet().iterator(); it.hasNext();) {
+                String client = (String) it.next();
+                removeStat(((CountStatisticImpl) consumers.get(client)).getName());
+            }
+            consumers = result;
+        }
+    }
+
+
+    public int getPoolSize() {
+        return executor.getMaximumPoolSize();
+    }
+
     public void execute(Runnable command) throws InterruptedException {
+        execute("Unknown", command);
+    }
+
+    public void execute(final String consumerName, final Runnable runnable) throws InterruptedException {
+        Runnable command;
+        if (statsActive) {
+            command = new Runnable() {
+                public void run() {
+                    startWork(consumerName);
+                    try {
+                        runnable.run();
+                    } finally {
+                        finishWork(consumerName);
+                    }
+                }
+            };
+        } else {
+            command = runnable;
+        }
+
         PooledExecutor p;
-        synchronized(this) {
+        synchronized (this) {
             p = executor;
         }
         if (p == null) {
@@ -70,12 +190,43 @@
         p.execute(task);
     }
 
+    private synchronized void startWork(String consumerName) {
+        Integer test = (Integer) clients.get(consumerName);
+        if (test == null) {
+            clients.put(consumerName, new Integer(1));
+        } else {
+            clients.put(consumerName, new Integer(test.intValue() + 1));
+        }
+    }
+
+    private synchronized void finishWork(String consumerName) {
+        Integer test = (Integer) clients.get(consumerName);
+        if (test.intValue() == 1) {
+            clients.remove(consumerName);
+        } else {
+            clients.put(consumerName, new Integer(test.intValue() - 1));
+        }
+    }
+
+    public void setWaitWhenBlocked(boolean wait) {
+        waitWhenBlocked = wait;
+        if(wait) {
+            executor.waitWhenBlocked();
+        } else {
+            executor.abortWhenBlocked();
+        }
+    }
+
+    public boolean isWaitWhenBlocked() {
+        return waitWhenBlocked;
+    }
+
     public void doStart() throws Exception {
     }
 
     public void doStop() throws Exception {
         PooledExecutor p;
-        synchronized(this) {
+        synchronized (this) {
             p = executor;
             executor = null;
             classLoader = null;
@@ -151,13 +302,14 @@
         infoFactory.addAttribute("poolSize", int.class, true);
         infoFactory.addAttribute("poolName", String.class, true);
         infoFactory.addAttribute("keepAliveTime", long.class, true);
+        infoFactory.addAttribute("waitWhenBlocked", boolean.class, true);
 
         infoFactory.addAttribute("objectName", String.class, false);
         infoFactory.addAttribute("classLoader", ClassLoader.class, false);
 
         infoFactory.addInterface(GeronimoExecutor.class);
 
-        infoFactory.setConstructor(new String[] {"poolSize", "poolName", "keepAliveTime", "classLoader", "objectName"});
+        infoFactory.setConstructor(new String[]{"poolSize", "poolName", "keepAliveTime", "classLoader", "objectName"});
 
         GBEAN_INFO = infoFactory.getBeanInfo();
     }

Modified: geronimo/branches/1.1/modules/j2ee/src/java/org/apache/geronimo/j2ee/management/impl/J2EEServerImpl.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/j2ee/src/java/org/apache/geronimo/j2ee/management/impl/J2EEServerImpl.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/j2ee/src/java/org/apache/geronimo/j2ee/management/impl/J2EEServerImpl.java (original)
+++ geronimo/branches/1.1/modules/j2ee/src/java/org/apache/geronimo/j2ee/management/impl/J2EEServerImpl.java Sun Apr  9 15:58:39 2006
@@ -17,32 +17,31 @@
 
 package org.apache.geronimo.j2ee.management.impl;
 
+import java.lang.reflect.Array;
 import java.util.Hashtable;
-import java.util.Set;
 import java.util.Iterator;
-import java.lang.reflect.Array;
+import java.util.Set;
 import javax.management.ObjectName;
-
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.gbean.AbstractNameQuery;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
-import org.apache.geronimo.gbean.AbstractNameQuery;
-import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
 import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.jmx.JMXUtil;
 import org.apache.geronimo.kernel.proxy.ProxyManager;
 import org.apache.geronimo.kernel.repository.Repository;
-import org.apache.geronimo.kernel.jmx.JMXUtil;
-import org.apache.geronimo.system.serverinfo.ServerInfo;
-import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
-import org.apache.geronimo.management.geronimo.J2EEServer;
+import org.apache.geronimo.management.J2EEDeployedObject;
+import org.apache.geronimo.management.J2EEResource;
 import org.apache.geronimo.management.geronimo.EJBManager;
+import org.apache.geronimo.management.geronimo.J2EEServer;
 import org.apache.geronimo.management.geronimo.JMSManager;
-import org.apache.geronimo.management.geronimo.WebManager;
-import org.apache.geronimo.management.geronimo.SecurityRealm;
-import org.apache.geronimo.management.geronimo.LoginService;
 import org.apache.geronimo.management.geronimo.JVM;
-import org.apache.geronimo.management.J2EEDeployedObject;
-import org.apache.geronimo.management.J2EEResource;
-import org.apache.geronimo.pool.GeronimoExecutor;
+import org.apache.geronimo.management.geronimo.LoginService;
+import org.apache.geronimo.management.geronimo.SecurityRealm;
+import org.apache.geronimo.management.geronimo.ThreadPool;
+import org.apache.geronimo.management.geronimo.WebManager;
+import org.apache.geronimo.system.serverinfo.ServerInfo;
 
 /**
  * @version $Rev$ $Date$
@@ -148,8 +147,8 @@
         return (JMSManager[]) getObjects(JMSManager.class, false);
     }
 
-    public GeronimoExecutor[] getThreadPools() {
-        return (GeronimoExecutor[]) getObjects(GeronimoExecutor.class, true);
+    public ThreadPool[] getThreadPools() {
+        return (ThreadPool[]) getObjects(ThreadPool.class, true);
     }
 
     public Repository[] getRepositories() {

Modified: geronimo/branches/1.1/modules/management/project.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/management/project.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/management/project.xml (original)
+++ geronimo/branches/1.1/modules/management/project.xml Sun Apr  9 15:58:39 2006
@@ -51,11 +51,6 @@
         </dependency>
         <dependency>
             <groupId>geronimo</groupId>
-            <artifactId>geronimo-core</artifactId>
-            <version>${geronimo_version}</version>
-        </dependency>
-        <dependency>
-            <groupId>geronimo</groupId>
             <artifactId>geronimo-system</artifactId>
             <version>${geronimo_version}</version>
         </dependency>

Modified: geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/J2EEServer.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/J2EEServer.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/J2EEServer.java (original)
+++ geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/J2EEServer.java Sun Apr  9 15:58:39 2006
@@ -18,7 +18,6 @@
 
 import org.apache.geronimo.management.J2EEDeployedObject;
 import org.apache.geronimo.management.J2EEResource;
-import org.apache.geronimo.pool.GeronimoExecutor;
 import org.apache.geronimo.kernel.repository.Repository;
 import org.apache.geronimo.system.serverinfo.ServerInfo;
 
@@ -74,7 +73,7 @@
      *
      * @return The ObjectNames of the thread pools, in String form.
      */
-    public GeronimoExecutor[] getThreadPools();
+    public ThreadPool[] getThreadPools();
 
     /**
      * Gets the Repositories associated with this J2EEServer.

Added: geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/ThreadPool.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/ThreadPool.java?rev=392847&view=auto
==============================================================================
--- geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/ThreadPool.java (added)
+++ geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/ThreadPool.java Sun Apr  9 15:58:39 2006
@@ -0,0 +1,37 @@
+/**
+ * Copyright 2006 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.geronimo.management.geronimo;
+
+/**
+ * Management interface for thread pools
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 21:48:27 -0500 (Sat, 10 Dec 2005) $
+ */
+public interface ThreadPool {
+    /**
+     * Gets the maximum number of threads allowed for this thread pool
+     */
+    int getPoolSize();
+
+    /**
+     * Executes work on behalf of a named client.  This helps the thread pool
+     * track who's using its threads.
+     * @param consumerName  A name identifying the caller, to be used in
+     *                      the management statistics for this pool, etc.
+     * @param runnable      The work to be done by a thread in the pool
+     */
+    void execute(String consumerName, Runnable runnable) throws InterruptedException;
+}

Added: geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/stats/ThreadPoolStats.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/stats/ThreadPoolStats.java?rev=392847&view=auto
==============================================================================
--- geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/stats/ThreadPoolStats.java (added)
+++ geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/geronimo/stats/ThreadPoolStats.java Sun Apr  9 15:58:39 2006
@@ -0,0 +1,49 @@
+/**
+ * Copyright 2006 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.geronimo.management.geronimo.stats;
+
+import javax.management.j2ee.statistics.BoundedRangeStatistic;
+import javax.management.j2ee.statistics.CountStatistic;
+import javax.management.j2ee.statistics.Stats;
+
+/**
+ * Statistics expected for a Thread Pool implementation
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 21:48:27 -0500 (Sat, 10 Dec 2005) $
+ */
+public interface ThreadPoolStats extends Stats {
+    /**
+     * Gets the min and max pool size, as well as the most, least, and current
+     * number of threads in use.
+     */
+    public BoundedRangeStatistic getThreadsInUse();
+
+    /**
+     * Gets a list of the known consumers of threads from this pool.  This may
+     * not be all consumers, because they won't necessarily identify themselves,
+     * but it's a start when tracking down what's using threads in a pool.
+     */
+    public String[] getThreadConsumers();
+
+    /**
+     * For each consumer listed by getThreadConsumers(), this can be used to
+     * find out how many threads that consumer is consuming at the time these
+     * statistics were generated.
+     *
+     * @param consumer The consumer you're inquiring about
+     */
+    public CountStatistic getCountForConsumer(String consumer);
+}

Modified: geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/stats/StatsImpl.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/stats/StatsImpl.java?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/stats/StatsImpl.java (original)
+++ geronimo/branches/1.1/modules/management/src/java/org/apache/geronimo/management/stats/StatsImpl.java Sun Apr  9 15:58:39 2006
@@ -17,10 +17,10 @@
 package org.apache.geronimo.management.stats;
 
 import java.io.Serializable;
-import java.util.Map;
 import java.util.HashMap;
-import javax.management.j2ee.statistics.Stats;
+import java.util.Map;
 import javax.management.j2ee.statistics.Statistic;
+import javax.management.j2ee.statistics.Stats;
 
 /**
  * Geronimo implementation of the JSR-77 Stats interface.  Dynamically tracks
@@ -38,6 +38,16 @@
 
     protected void addStat(String name, Statistic value) {
         stats.put(name, value);
+    }
+
+    /**
+     * Used when the available statistics are dynamic (e.g. depend on the
+     * current clients of the service, etc.).
+     * 
+     * @param name The statistic to remove
+     */
+    protected void removeStat(String name) {
+        stats.remove(name);
     }
 
     public Statistic getStatistic(String statisticName) {

Modified: geronimo/branches/1.1/modules/timer/project.xml
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/timer/project.xml?rev=392847&r1=392846&r2=392847&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/timer/project.xml (original)
+++ geronimo/branches/1.1/modules/timer/project.xml Sun Apr  9 15:58:39 2006
@@ -41,6 +41,17 @@
     <!-- ============ -->
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-j2ee-management_1.0_spec</artifactId>
+            <version>${geronimo_spec_j2ee_management_version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>geronimo</groupId>
+            <artifactId>geronimo-management</artifactId>
+            <version>${pom.currentVersion}</version>
+        </dependency>
 
         <dependency>
             <groupId>geronimo</groupId>