You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2012/04/02 01:42:31 UTC

svn commit: r1308219 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/java/org/apache/openejb/monitoring/ container/openejb-core/src/main/java/org/apache/openejb/util/ server/o...

Author: dblevins
Date: Sun Apr  1 23:42:30 2012
New Revision: 1308219

URL: http://svn.apache.org/viewvc?rev=1308219&view=rev
Log:
OPENEJB-1817: JMX Monitoring of all ServerServices (i.e. remotely accessible network services)

Added:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/Stats.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/EjbdJmxTest.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/NamedService.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceStats.java
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/ManagedMBean.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Classes.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/AppClientTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FullPoolFailoverTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/KeepAilveTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/MultithreadTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/Server2ServerEjbRefTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/StaticFailoverTest.java
    openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/UberInterfaceTest.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerService.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerServiceFilter.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceAccessController.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceLogger.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
    openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/auth/IPAddressPermission.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Sun Apr  1 23:42:30 2012
@@ -112,6 +112,7 @@ import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.jee.WebserviceDescription;
 import org.apache.openejb.jee.oejb3.OpenejbJar;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.Classes;
 import org.apache.openejb.util.Join;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -1941,7 +1942,7 @@ public class AnnotationDeployer implemen
                 if (ejbModule.getFinder() instanceof AnnotationFinder) {
                     final AnnotationFinder af = (AnnotationFinder) ejbModule.getFinder();
 
-                    final List<Class<?>> ancestors = ancestors(clazz);
+                    final List<Class<?>> ancestors = Classes.ancestors(clazz);
                     final String[] names = new String[ancestors.size()];
                     int i = 0;
                     for (Class<?> ancestor : ancestors) {
@@ -2546,7 +2547,7 @@ public class AnnotationDeployer implemen
             all.local.addAll(xml.local);
             all.remote.addAll(xml.remote);
 
-            final List<Class<?>> classes = strict ? new ArrayList(asList(beanClass)) : ancestors(beanClass);
+            final List<Class<?>> classes = strict ? new ArrayList(asList(beanClass)) : Classes.ancestors(beanClass);
 
             for (Class<?> clazz : classes) {
 
@@ -2881,7 +2882,7 @@ public class AnnotationDeployer implemen
 
             List<String> classPermissions = getDeclaredClassPermissions(assemblyDescriptor, ejbName);
 
-            for (Class<?> clazzz : ancestors(beanClass)) {
+            for (Class<?> clazzz : Classes.ancestors(beanClass)) {
                 final MetaAnnotatedClass<?> clazz = new MetaAnnotatedClass(clazzz);
                 /*
                  * Process annotations at the class level
@@ -4614,23 +4615,6 @@ public class AnnotationDeployer implemen
         }
 
         /**
-         * Creates a list of the specified class and all its parent classes
-         *
-         * @param clazz
-         * @return
-         */
-        private List<Class<?>> ancestors(Class clazz) {
-            ArrayList<Class<?>> ancestors = new ArrayList<Class<?>>();
-
-            while (clazz != null && !clazz.equals(Object.class)) {
-                ancestors.add(clazz);
-                clazz = clazz.getSuperclass();
-            }
-
-            return ancestors;
-        }
-
-        /**
          * Creates a list of the specified class and all its parent
          * classes then creates a AnnotationFinder from that list which
          * can be used for easy annotation scanning.
@@ -4641,7 +4625,7 @@ public class AnnotationDeployer implemen
         private AnnotationFinder createFinder(Class<?>... classes) {
             Set<Class<?>> parents = new HashSet<Class<?>>();
             for (Class<?> clazz : classes) {
-                parents.addAll(ancestors(clazz));
+                parents.addAll(Classes.ancestors(clazz));
             }
 
             return new AnnotationFinder(new ClassesArchive(parents)).link();

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/ManagedMBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/ManagedMBean.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/ManagedMBean.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/ManagedMBean.java Sun Apr  1 23:42:30 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.monitoring;
 
+import org.apache.openejb.util.Classes;
 import org.apache.xbean.finder.ClassFinder;
 import org.apache.xbean.propertyeditor.PropertyEditors;
 
@@ -127,7 +128,7 @@ public class ManagedMBean implements Dyn
     }
 
     private void scan(Object target, String prefix) {
-        ClassFinder finder = new ClassFinder(target.getClass());
+        ClassFinder finder = new ClassFinder(Classes.ancestors(target.getClass()));
 
         List<Field> fields = finder.findAnnotatedFields(Managed.class);
         for (Field field : fields) {

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/Stats.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/Stats.java?rev=1308219&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/Stats.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/monitoring/Stats.java Sun Apr  1 23:42:30 2012
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.openejb.monitoring;
+
+import org.apache.openejb.math.stat.descriptive.SynchronizedDescriptiveStatistics;
+
+/**
+ * @version $Rev$ $Date$
+ */
+@Managed(append = true)
+public class Stats {
+
+    private final Event event = new Event();
+    private final SynchronizedDescriptiveStatistics samples;
+
+    public Stats() {
+        this(1000);
+    }
+
+    public Stats(final int window) {
+        this.samples = new SynchronizedDescriptiveStatistics(window);
+    }
+
+    @Managed
+    public void setSampleSize(int i) {
+        samples.setWindowSize(i);
+    }
+
+    @Managed
+    public int getSampleSize() {
+        return samples.getWindowSize();
+    }
+
+    @Managed
+    public double getPercentile99() {
+        return samples.getPercentile(99.0);
+    }
+
+    @Managed
+    public double getPercentile90() {
+        return samples.getPercentile(90.0);
+    }
+
+    @Managed
+    public double getPercentile75() {
+        return samples.getPercentile(75.0);
+    }
+
+    @Managed
+    public double getPercentile50() {
+        return samples.getPercentile(50.0);
+    }
+
+    @Managed
+    public double getPercentile25() {
+        return samples.getPercentile(25.0);
+    }
+
+    @Managed
+    public double getPercentile10() {
+        return samples.getPercentile(10.0);
+    }
+
+    @Managed
+    public double getPercentile01() {
+        return samples.getPercentile(1.0);
+    }
+
+    @Managed
+    public double getStandardDeviation() {
+        return samples.getStandardDeviation();
+    }
+
+    @Managed
+    public double getMean() {
+        return samples.getMean();
+    }
+
+    @Managed
+    public double getVariance() {
+        return samples.getVariance();
+    }
+
+    @Managed
+    public double getGeometricMean() {
+        return samples.getGeometricMean();
+    }
+
+    @Managed
+    public double getSkewness() {
+        return samples.getSkewness();
+    }
+
+    @Managed
+    public double getKurtosis() {
+        return samples.getKurtosis();
+    }
+
+    @Managed
+    public double getMax() {
+        return samples.getMax();
+    }
+
+    @Managed
+    public double getMin() {
+        return samples.getMin();
+    }
+
+    @Managed
+    public double getSum() {
+        return samples.getSum();
+    }
+
+    @Managed
+    public double getSumsq() {
+        return samples.getSumsq();
+    }
+
+    @Managed
+    public double[] sortedValues() {
+        return samples.getSortedValues();
+    }
+
+    @Managed
+    public double[] values() {
+        return samples.getValues();
+    }
+
+    public void record(long time) {
+        event.record();
+        samples.addValue(time);
+    }
+
+    @Managed
+    public long getCount() {
+        return event.get();
+    }
+
+    @Managed
+    public String getLatest() {
+        return event.getLatest();
+    }
+
+    @Managed
+    public long getLatestTime() {
+        return event.getLatestTime();
+    }
+}

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Classes.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Classes.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Classes.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Classes.java Sun Apr  1 23:42:30 2012
@@ -92,4 +92,21 @@ public class Classes {
     public static Class<?> deprimitivize(Class<?> fieldType) {
         return fieldType = fieldType.isPrimitive() ? primitiveWrappers.get(fieldType): fieldType;
     }
+
+    /**
+     * Creates a list of the specified class and all its parent classes
+     *
+     * @param clazz
+     * @return
+     */
+    public static List<Class<?>> ancestors(Class clazz) {
+        ArrayList<Class<?>> ancestors = new ArrayList<Class<?>>();
+
+        while (clazz != null && !clazz.equals(Object.class)) {
+            ancestors.add(clazz);
+            clazz = clazz.getSuperclass();
+        }
+
+        return ancestors;
+    }
 }

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/AppClientTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/AppClientTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/AppClientTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/AppClientTest.java Sun Apr  1 23:42:30 2012
@@ -61,7 +61,7 @@ public class AppClientTest extends TestC
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 
-        final ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+        final ServicePool pool = new ServicePool(ejbServer, 10);
         final ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java Sun Apr  1 23:42:30 2012
@@ -59,7 +59,7 @@ public class DynamicConnectionStrategyTe
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 
-        ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+        ServicePool pool = new ServicePool(ejbServer, 10);
         ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Added: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/EjbdJmxTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/EjbdJmxTest.java?rev=1308219&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/EjbdJmxTest.java (added)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/EjbdJmxTest.java Sun Apr  1 23:42:30 2012
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.openejb.server.ejbd;
+
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.monitoring.LocalMBeanServer;
+import org.apache.openejb.server.ServerService;
+import org.apache.openejb.server.ServiceManager;
+import org.junit.Test;
+
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import java.util.Properties;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class EjbdJmxTest {
+
+    @Test
+    public void test() throws Exception {
+        final MBeanServer server = LocalMBeanServer.get();
+
+        OpenEJB.init(new Properties());
+
+        final Properties p = new Properties();
+        p.put("server", "org.apache.openejb.server.ejbd.EjbServer");
+        p.put("bind", "127.0.0.1");
+        p.put("port", "0");
+        p.put("disabled", "false");
+        p.put("threads", "10");
+        p.put("backlog", "200");
+        p.put("discovery", "ejb:ejbd://{bind}:{port}");
+        final ServerService service = ServiceManager.manage("ejbd", p, new EjbServer());
+        service.init(p);
+        service.start();
+
+        ServiceManager.register("ejbd", service, server);
+
+        ObjectName invocationsName = new ObjectName("openejb:type=ServerService,name=ejbd");
+
+        MBeanInfo beanInfo = server.getMBeanInfo(invocationsName);
+
+        for (MBeanAttributeInfo info : beanInfo.getAttributes()) {
+            System.out.println(info);
+        }
+    }
+}

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FailoverConnectionFactoryTest.java Sun Apr  1 23:42:30 2012
@@ -59,7 +59,7 @@ public class FailoverConnectionFactoryTe
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 
-        ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+        ServicePool pool = new ServicePool(ejbServer, 10);
         ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FullPoolFailoverTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FullPoolFailoverTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FullPoolFailoverTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/FullPoolFailoverTest.java Sun Apr  1 23:42:30 2012
@@ -18,7 +18,6 @@ package org.apache.openejb.server.ejbd;
 
 import junit.framework.TestCase;
 import org.apache.openejb.OpenEJB;
-import org.apache.openejb.client.ConnectionPoolTimeoutException;
 import org.apache.openejb.client.Client;
 import org.apache.openejb.util.CountingLatch;
 import org.apache.openejb.assembler.classic.Assembler;
@@ -271,7 +270,7 @@ public class FullPoolFailoverTest extend
     private ServiceDaemon createServiceDaemon(int poolSize, EjbServer ejbServer, URI uri) throws ServiceException {
         ServiceIdentifier serviceIdentifier = new ServiceIdentifier(ejbServer, uri);
         KeepAliveServer keepAliveServer = new KeepAliveServer(serviceIdentifier);
-        ServicePool pool = new ServicePool(keepAliveServer, "ejbd", poolSize);
+        ServicePool pool = new ServicePool(keepAliveServer, poolSize);
         ServiceDaemon daemon = new ServiceDaemon(pool, 0, "localhost");
         daemon.start();
         return daemon;

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/KeepAilveTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/KeepAilveTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/KeepAilveTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/KeepAilveTest.java Sun Apr  1 23:42:30 2012
@@ -112,7 +112,7 @@ public class KeepAilveTest extends TestC
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 
-        ServicePool pool = new ServicePool(keepAliveServer, "ejbd", 10);
+        ServicePool pool = new ServicePool(keepAliveServer, 10);
         ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/MultithreadTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/MultithreadTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/MultithreadTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/MultithreadTest.java Sun Apr  1 23:42:30 2012
@@ -18,7 +18,6 @@ package org.apache.openejb.server.ejbd;
 
 import junit.framework.TestCase;
 import org.apache.openejb.OpenEJB;
-import org.apache.openejb.client.ConnectionPoolTimeoutException;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
 import org.apache.openejb.config.ConfigurationFactory;
@@ -34,7 +33,6 @@ import javax.ejb.Stateless;
 import javax.ejb.ConcurrentAccessException;
 import javax.naming.Context;
 import javax.naming.InitialContext;
-import javax.naming.NamingException;
 import java.util.Properties;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -192,7 +190,7 @@ public class MultithreadTest extends Tes
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 
-        ServicePool pool = new ServicePool(keepAliveServer, "ejbd", (poolSize*2));
+        ServicePool pool = new ServicePool(keepAliveServer, (poolSize*2));
         this.serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java Sun Apr  1 23:42:30 2012
@@ -56,7 +56,7 @@ public class PropertiesPropogationTest e
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 
-        ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+        ServicePool pool = new ServicePool(ejbServer, 10);
         ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/Server2ServerEjbRefTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/Server2ServerEjbRefTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/Server2ServerEjbRefTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/Server2ServerEjbRefTest.java Sun Apr  1 23:42:30 2012
@@ -100,7 +100,7 @@ public class Server2ServerEjbRefTest ext
         EjbServer ejbServer = new EjbServer();
         ejbServer.init(new Properties());
 
-        ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+        ServicePool pool = new ServicePool(ejbServer, 10);
         ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/StaticFailoverTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/StaticFailoverTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/StaticFailoverTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/StaticFailoverTest.java Sun Apr  1 23:42:30 2012
@@ -137,7 +137,7 @@ public class StaticFailoverTest extends 
     private ServiceDaemon createServiceDaemon(int poolSize, EjbServer ejbServer, URI uri) throws ServiceException {
         ServiceIdentifier serviceIdentifier = new ServiceIdentifier(ejbServer, uri);
         KeepAliveServer keepAliveServer = new KeepAliveServer(serviceIdentifier);
-        ServicePool pool = new ServicePool(keepAliveServer, "ejbd", poolSize);
+        ServicePool pool = new ServicePool(keepAliveServer, poolSize);
         ServiceDaemon daemon = new ServiceDaemon(pool, 0, "localhost");
         daemon.start();
         return daemon;

Modified: openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/UberInterfaceTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/UberInterfaceTest.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/UberInterfaceTest.java (original)
+++ openejb/trunk/openejb/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/UberInterfaceTest.java Sun Apr  1 23:42:30 2012
@@ -54,7 +54,7 @@ public class UberInterfaceTest extends T
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 
-        ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+        ServicePool pool = new ServicePool(ejbServer, 10);
         ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
         serviceDaemon.start();
 

Added: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/NamedService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/NamedService.java?rev=1308219&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/NamedService.java (added)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/NamedService.java Sun Apr  1 23:42:30 2012
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.openejb.server;
+
+import org.apache.openejb.monitoring.Managed;
+
+/**
+ * @version $Rev$ $Date$
+ */
+@Managed
+public class NamedService extends ServerServiceFilter {
+
+    @Managed
+    private final String name;
+
+    public NamedService(ServerService service, String name) {
+        super(service);
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+}

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerService.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerService.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerService.java Sun Apr  1 23:42:30 2012
@@ -21,11 +21,13 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.Socket;
 
+import org.apache.openejb.monitoring.Managed;
 import org.apache.openejb.spi.Service;
 
 /**
  * @version $Rev$ $Date$
  */
+@Managed
 public interface ServerService extends Service {
 
     public void start() throws ServiceException;

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerServiceFilter.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerServiceFilter.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerServiceFilter.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServerServiceFilter.java Sun Apr  1 23:42:30 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.server;
 
+import org.apache.openejb.monitoring.Managed;
 import org.apache.openejb.server.ServerService;
 import org.apache.openejb.server.ServiceException;
 
@@ -30,6 +31,8 @@ import java.util.Properties;
  * @version $Rev$ $Date$
  */
 public class ServerServiceFilter implements ServerService {
+
+    @Managed
     private final ServerService service;
 
     public ServerServiceFilter(ServerService service) {

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceAccessController.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceAccessController.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceAccessController.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceAccessController.java Sun Apr  1 23:42:30 2012
@@ -17,11 +17,14 @@
 package org.apache.openejb.server;
 
 
+import org.apache.openejb.monitoring.Event;
+import org.apache.openejb.monitoring.Managed;
 import org.apache.openejb.server.auth.IPAddressPermission;
 import org.apache.openejb.server.auth.ExactIPAddressPermission;
 import org.apache.openejb.server.auth.ExactIPv6AddressPermission;
 import org.apache.openejb.server.auth.IPAddressPermissionFactory;
 import org.apache.openejb.server.auth.PermitAllPermission;
+import org.apache.openejb.util.Join;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -30,24 +33,28 @@ import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.net.Socket;
 import java.net.UnknownHostException;
+import java.util.ArrayList;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Properties;
 import java.util.StringTokenizer;
 
-public class ServiceAccessController implements ServerService {
+@Managed
+public class ServiceAccessController extends ServerServiceFilter {
+
+    private final Event rejections = new Event();
 
-    private final ServerService next;
     private IPAddressPermission[] hostPermissions;
 
     public ServiceAccessController(ServerService next) {
-        this.next = next;
+        super(next);
     }
 
     public void service(Socket socket) throws ServiceException, IOException {
         // Check authorization
         checkHostsAuthorization(socket.getInetAddress(), socket.getLocalAddress());
 
-        next.service(socket);
+        super.service(socket);
     }
 
     public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
@@ -68,6 +75,7 @@ public class ServiceAccessController imp
             }
         }
 
+        rejections.record();
         throw new SecurityException("Host " + clientAddress.getHostAddress() + " is not authorized to access this service.");
     }
 
@@ -116,27 +124,29 @@ public class ServiceAccessController imp
 
     public void init(Properties props) throws Exception {
         parseAdminIPs(props);
-        next.init(props);
+        super.init(props);
     }
 
-    public void start() throws ServiceException {
-        next.start();
-    }
+    @Managed
+    private final Access access = new Access();
 
-    public void stop() throws ServiceException {
-        next.stop();
-    }
+    @Managed(append = true)
+    public class Access {
 
-    public String getName() {
-        return next.getName();
-    }
+        @Managed
+        public List<String> getHostPermissions() {
+            List<String> list = new ArrayList<String>();
+            for (IPAddressPermission hostPermission : hostPermissions) {
+                list.add(hostPermission.toString());
+            }
 
-    public String getIP() {
-        return next.getIP();
-    }
+            return list;
+        }
 
-    public int getPort() {
-        return next.getPort();
-    }
+        @Managed
+        public Event getRejections() {
+            return rejections;
+        }
 
+    }
 }

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceDaemon.java Sun Apr  1 23:42:30 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.server;
 
+import org.apache.openejb.monitoring.Managed;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.loader.Options;
@@ -43,31 +44,29 @@ import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.concurrent.TimeUnit;
 
+@Managed
 public class ServiceDaemon implements ServerService {
 
     private static final Logger log = Logger.getInstance(LogCategory.OPENEJB_SERVER, ServiceDaemon.class);
 
-    private ServerService next;
+    @Managed
+    private final ServerService next;
 
     private SocketListener socketListener;
 
     private int timeout = 1000;
 
-    private InetAddress address;
+    private InetAddress inetAddress;
 
     private int port;
 
-    private String name;
-
-    boolean stop = true;
-
     private int backlog;
 
     private String ip;
 
     private boolean secure;
     private StringTemplate discoveryUriFormat;
-    private URI uri;
+    private URI serviceUri;
     private Properties props;
 
     public ServiceDaemon(ServerService next) {
@@ -77,7 +76,7 @@ public class ServiceDaemon implements Se
     public ServiceDaemon(ServerService next, int port, String ip) {
         this.port = port;
         this.ip = ip;
-        this.address = getAddress(ip);
+        this.inetAddress = getAddress(ip);
         this.next = next;
     }
 
@@ -89,24 +88,12 @@ public class ServiceDaemon implements Se
         }
     }
 
-    public void setSoTimeout(int timeout) throws SocketException {
-         this.timeout = timeout;
-         if (socketListener != null) {
-             socketListener.setSoTimeout(timeout);
-         }
-     }
-
-    public int getSoTimeout() throws IOException {
-        if (socketListener == null) return 0;
-        return socketListener.getSoTimeout();
-    }
-
     /**
      * Gets the inetAddress number that the
      * daemon is listening on.
      */
-    public InetAddress getAddress() {
-        return address;
+    public InetAddress getInetAddress() {
+        return inetAddress;
     }
 
     public void init(Properties props) throws Exception {
@@ -120,7 +107,7 @@ public class ServiceDaemon implements Se
 
         ip = props.getProperty("bind");
 
-        address = getAddress(ip);
+        inetAddress = getAddress(ip);
 
         Options options = new Options(props);
 
@@ -150,11 +137,11 @@ public class ServiceDaemon implements Se
             try {
                 if (secure) {
                     ServerSocketFactory factory = SSLServerSocketFactory.getDefault();
-                    serverSocket = factory.createServerSocket(port, backlog, address);
+                    serverSocket = factory.createServerSocket(port, backlog, inetAddress);
                     final String[] enabledCipherSuites = { "SSL_DH_anon_WITH_RC4_128_MD5" };
                     ((SSLServerSocket) serverSocket).setEnabledCipherSuites(enabledCipherSuites);
                 } else {
-                    serverSocket = new ServerSocket(port, backlog, address);
+                    serverSocket = new ServerSocket(port, backlog, inetAddress);
                 }
 
                 port = serverSocket.getLocalPort();
@@ -165,7 +152,7 @@ public class ServiceDaemon implements Se
 
             socketListener = new SocketListener(next, serverSocket);
             Thread thread = new Thread(socketListener);
-            thread.setName("service." + name + "@" + socketListener.hashCode());
+            thread.setName("service." + getName() + "@" + socketListener.hashCode());
             thread.setDaemon(true);
             thread.start();
 
@@ -194,8 +181,8 @@ public class ServiceDaemon implements Se
                 map.put("bind", address);
                 String uriString = discoveryUriFormat.apply(map);
                 try {
-                    uri = new URI(uriString);
-                    agent.registerService(uri);
+                    serviceUri = new URI(uriString);
+                    agent.registerService(serviceUri);
                 } catch (Exception e) {
                     log.error("Cannot register service '" + getName() + "' with DiscoveryAgent.", e);
                 }
@@ -209,9 +196,9 @@ public class ServiceDaemon implements Se
 
         synchronized (this) {
             DiscoveryAgent agent = SystemInstance.get().getComponent(DiscoveryAgent.class);
-            if (agent != null && discoveryUriFormat != null && uri != null) {
+            if (agent != null && discoveryUriFormat != null && serviceUri != null) {
                 try {
-                    agent.unregisterService(uri);
+                    agent.unregisterService(serviceUri);
                 } catch (IOException e) {
                     log.error("Cannot unregister service '" + getName() + "' with DiscoveryAgent.", e);
                 }
@@ -232,10 +219,16 @@ public class ServiceDaemon implements Se
      * Gets the port number that the
      * daemon is listening on.
      */
+    @Managed
     public int getPort() {
         return port;
     }
 
+    @Managed
+    public String getBind() {
+        return ip;
+    }
+
     public void service(Socket socket) throws ServiceException, IOException {
     }
 
@@ -316,5 +309,105 @@ public class ServiceDaemon implements Se
         public int getSoTimeout() throws IOException {
             return serverSocket.getSoTimeout();
         }
+
+        public ServerSocket getServerSocket() {
+            return serverSocket;
+        }
+    }
+
+    @Managed
+    public URI getServiceUri() {
+        return serviceUri;
+    }
+
+    @Managed
+    public boolean isSecure() {
+        return secure;
+    }
+
+    @Managed
+    private final AddressMonitor address = new AddressMonitor();
+
+    @Managed(append = true)
+    public class AddressMonitor {
+        @Managed
+        public String getHostName() {
+            return inetAddress.getHostName();
+        }
+
+        @Managed
+        public String getCanonicalHostName() {
+            return inetAddress.getCanonicalHostName();
+        }
+
+        @Managed
+        public String getHostAddress() {
+            return inetAddress.getHostAddress();
+        }
+
+        @Managed
+        public byte[] getAddress() {
+            return inetAddress.getAddress();
+        }
+    }
+
+    public ServerSocket getServerSocket() {
+        return socketListener.getServerSocket();
+    }
+
+    @Managed
+    private final SocketMonitor socket = new SocketMonitor();
+
+    @Managed(append = true)
+    public class SocketMonitor {
+        @Managed
+        public int getLocalPort() {
+            return getServerSocket().getLocalPort();
+        }
+
+        @Managed
+        public boolean getReuseAddress() throws SocketException {
+            return getServerSocket().getReuseAddress();
+        }
+
+        @Managed
+        public int getSoTimeout() throws IOException {
+            return getServerSocket().getSoTimeout();
+        }
+
+        @Managed
+        public boolean isClosed() {
+            return getServerSocket().isClosed();
+        }
+
+        @Managed
+        public boolean isBound() {
+            return getServerSocket().isBound();
+        }
+
+        @Managed
+        public int getReceiveBufferSize() throws SocketException {
+            return getServerSocket().getReceiveBufferSize();
+        }
+
+        @Managed
+        public void setReceiveBufferSize(int size) throws SocketException {
+            getServerSocket().setReceiveBufferSize(size);
+        }
+
+        @Managed
+        public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) {
+            getServerSocket().setPerformancePreferences(connectionTime, latency, bandwidth);
+        }
+
+        @Managed
+        public void setReuseAddress(boolean on) throws SocketException {
+            getServerSocket().setReuseAddress(on);
+        }
+
+        @Managed
+        public void setSoTimeout(int timeout) throws SocketException {
+            getServerSocket().setSoTimeout(timeout);
+        }
     }
 }

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceLogger.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceLogger.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceLogger.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceLogger.java Sun Apr  1 23:42:30 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.server;
 
+import org.apache.openejb.monitoring.Managed;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
@@ -31,35 +32,20 @@ import java.util.Properties;
 /**
  * @version $Rev$ $Date$
  */
-public class ServiceLogger implements ServerService {
+@Managed
+public class ServiceLogger extends ServerServiceFilter {
 
-    Messages messages = new Messages("org.apache.openejb.server.util.resources");
-    Logger logger;
-
-    boolean logOnSuccess;
-    boolean logOnFailure;
-
-    ServerService next;
+    private Logger logger;
 
     public ServiceLogger(ServerService next) {
-        this.next = next;
+        super(next);
     }
 
     public void init(Properties props) throws Exception {
 
         logger = Logger.getInstance(LogCategory.OPENEJB_SERVER.createChild("service."+getName()), "org.apache.openejb.server.util.resources");
 
-        next.init(props);
-    }
-
-    public void start() throws ServiceException {
-
-        next.start();
-    }
-
-    public void stop() throws ServiceException {
-
-        next.stop();
+        super.init(props);
     }
 
     public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
@@ -92,40 +78,12 @@ public class ServiceLogger implements Se
         MDCput("HOST", client.getHostAddress());
         MDCput("SERVER", getName());
 
+        final long start = System.nanoTime();
         try {
-
-//            logger.info("[request] "+socket.getPort()+" - "+client.getHostName());
-            next.service(socket);
-//            logSuccess();
+            super.service(socket);
+            logger.debug("[request] " + getName() + " " + socket.getPort() + " - " + client.getHostName() + " - " + (System.nanoTime() - start) + "ns");
         } catch (Exception e) {
-            logger.error("[failure] " + socket.getPort() + " - " + client.getHostAddress() + ": " + e.getMessage());
-
-            e.printStackTrace();
+            logger.error("[failure] " + socket.getPort() + " - " + client.getHostAddress() + ": " + e.getMessage(), e);
         }
     }
-
-    private void logIncoming() {
-        logger.info("incomming request");
-    }
-
-    private void logSuccess() {
-        logger.info("successful request");
-    }
-
-    private void logFailure(Exception e) {
-        logger.error(e.getMessage());
-    }
-
-    public String getName() {
-        return next.getName();
-    }
-
-    public String getIP() {
-        return next.getIP();
-    }
-
-    public int getPort() {
-        return next.getPort();
-    }
-
 }

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceManager.java Sun Apr  1 23:42:30 2012
@@ -149,10 +149,7 @@ public abstract class ServiceManager {
                 service = (ServerService) recipe.create(serviceClass.getClassLoader());
 
                 if (!(service instanceof SelfManaging)) {
-                    service = new ServicePool(service, serviceName, serviceProperties);
-                    service = new ServiceLogger(service);
-                    service = new ServiceAccessController(service);
-                    service = new ServiceDaemon(service);
+                    service = manage(serviceName, serviceProperties, service);
                 }
 
                 service.init(serviceProperties);
@@ -164,16 +161,7 @@ public abstract class ServiceManager {
 
                 MBeanServer server = LocalMBeanServer.get();
 
-                final ObjectNameBuilder jmxName = new ObjectNameBuilder("openejb");
-                jmxName.set("type", "ServerService");
-                jmxName.set("name", serviceName);
-
-                try {
-                    final ObjectName objectName = jmxName.build();
-                    server.registerMBean(new ManagedMBean(service), objectName);
-                } catch (Exception e) {
-                    logger.error("Unable to register MBean ", e);
-                }
+                register(serviceName, service, server);
 
                 return service;
             } catch (Throwable t) {
@@ -184,6 +172,29 @@ public abstract class ServiceManager {
         return null;
     }
 
+    public static void register(String serviceName, ServerService service, MBeanServer server) {
+        final ObjectNameBuilder jmxName = new ObjectNameBuilder("openejb");
+        jmxName.set("type", "ServerService");
+        jmxName.set("name", serviceName);
+
+        try {
+            final ObjectName objectName = jmxName.build();
+            server.registerMBean(new ManagedMBean(service), objectName);
+        } catch (Exception e) {
+            logger.error("Unable to register MBean ", e);
+        }
+    }
+
+    public static ServerService manage(String serviceName, Properties serviceProperties, ServerService service) {
+        service = new NamedService(service, serviceName);
+        service = new ServiceStats(service);
+        service = new ServiceLogger(service);
+        service = new ServicePool(service, serviceProperties);
+        service = new ServiceAccessController(service);
+        service = new ServiceDaemon(service);
+        return service;
+    }
+
     private void overrideProperties(String serviceName, Properties serviceProperties) throws IOException {
         final FileUtils base = SystemInstance.get().getBase();
 

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java Sun Apr  1 23:42:30 2012
@@ -18,6 +18,7 @@ package org.apache.openejb.server;
 
 import org.apache.openejb.loader.Options;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.monitoring.Managed;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 
@@ -26,27 +27,25 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.Socket;
 import java.util.Properties;
-import java.util.concurrent.Executor;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-public class ServicePool implements ServerService {
+@Managed
+public class ServicePool extends ServerServiceFilter {
     private static final Logger log = Logger.getInstance(LogCategory.SERVICEPOOL, "org.apache.openejb.util.resources");
 
-    private final ServerService next;
-    private final Executor executor;
     private final ThreadPoolExecutor threadPool;
     private final AtomicBoolean stop = new AtomicBoolean();
 
-    public ServicePool(final ServerService next, final String name, final Properties properties) {
-        this(next, name, new Options(properties).get("threads", 100));
+    public ServicePool(final ServerService next, final Properties properties) {
+        this(next, new Options(properties).get("threads", 100));
     }
 
-    public ServicePool(final ServerService next, final String name, final int threads) {
-        this.next = next;
+    public ServicePool(final ServerService next, final int threads) {
+        super(next);
 
         final int keepAliveTime = (1000 * 60 * 5);
 
@@ -56,7 +55,7 @@ public class ServicePool implements Serv
 
             @Override
             public Thread newThread(final Runnable arg0) {
-                return new Thread(arg0, name + " " + getNextID());
+                return new Thread(arg0, getName() + " " + getNextID());
             }
 
             private int getNextID() {
@@ -65,16 +64,9 @@ public class ServicePool implements Serv
 
         });
 
-        executor = threadPool;
         SystemInstance.get().setComponent(ServicePool.class, this);
     }
 
-    public ServicePool(final ServerService next, final Executor executor) {
-        this.next = next;
-        this.executor = executor;
-        this.threadPool = null;
-    }
-
     public ThreadPoolExecutor getThreadPool() {
         return threadPool;
     }
@@ -90,7 +82,7 @@ public class ServicePool implements Serv
             public void run() {
                 try {
                     if (stop.get()) return;
-                    next.service(socket);
+                    ServicePool.super.service(socket);
                 } catch (SecurityException e) {
                     log.error("Security error: " + e.getMessage(), e);
                 } catch (IOException e) {
@@ -129,65 +121,92 @@ public class ServicePool implements Serv
             }
         };
 
-        executor.execute(ctxCL);
-    }
-
-    /**
-     * Pulls out the access log information
-     *
-     * @param props Properties
-     * @throws ServiceException
-     */
-    @Override
-    public void init(final Properties props) throws Exception {
-        // Do our stuff
-
-        // Then call the next guy
-        next.init(props);
-    }
-
-    @Override
-    public void start() throws ServiceException {
-        // Do our stuff
-
-        // Then call the next guy
-        next.start();
-    }
-
-    @Override
-    public void stop() throws ServiceException {
-        // Do our stuff
-
-        // Then call the next guy
-        next.stop();
+        threadPool.execute(ctxCL);
     }
 
+    @Managed
+    private final Pool pool = new Pool();
 
-    /**
-     * Gets the name of the service.
-     * Used for display purposes only
-     */
-    @Override
-    public String getName() {
-        return next.getName();
+    @Managed(append = true)
+    public class Pool {
+        @Managed
+        public boolean isShutdown() {
+            return threadPool.isShutdown();
+        }
+
+        @Managed
+        public boolean isTerminating() {
+            return threadPool.isTerminating();
+        }
+
+        @Managed
+        public boolean isTerminated() {
+            return threadPool.isTerminated();
+        }
+
+        @Managed
+        public int getPoolSize() {
+            return threadPool.getPoolSize();
+        }
+
+        @Managed
+        public int getCorePoolSize() {
+            return threadPool.getCorePoolSize();
+        }
+
+        @Managed
+        public int getMaximumPoolSize() {
+            return threadPool.getMaximumPoolSize();
+        }
+
+        @Managed
+        public long getKeepAliveTime(TimeUnit unit) {
+            return threadPool.getKeepAliveTime(unit);
+        }
+
+        @Managed
+        public int getQueueSize() {
+            return threadPool.getQueue().size();
+        }
+
+        @Managed
+        public int getActiveCount() {
+            return threadPool.getActiveCount();
+        }
+
+        @Managed
+        public int getLargestPoolSize() {
+            return threadPool.getLargestPoolSize();
+        }
+
+        @Managed
+        public long getTaskCount() {
+            return threadPool.getTaskCount();
+        }
+
+        @Managed
+        public long getCompletedTaskCount() {
+            return threadPool.getCompletedTaskCount();
+        }
+
+        @Managed
+        public void setMaximumPoolSize(int maximumPoolSize) {
+            threadPool.setMaximumPoolSize(maximumPoolSize);
+        }
+
+        @Managed
+        public void setCorePoolSize(int corePoolSize) {
+            getThreadPool().setCorePoolSize(corePoolSize);
+        }
+
+        @Managed
+        public void allowCoreThreadTimeOut(boolean value) {
+            getThreadPool().allowCoreThreadTimeOut(value);
+        }
+
+        @Managed(description = "Sets time in nanoseconds")
+        public void setKeepAliveTime(long time) {
+            getThreadPool().setKeepAliveTime(time, TimeUnit.NANOSECONDS);
+        }
     }
-
-    /**
-     * Gets the ip number that the
-     * daemon is listening on.
-     */
-    @Override
-    public String getIP() {
-        return next.getIP();
-    }
-
-    /**
-     * Gets the port number that the
-     * daemon is listening on.
-     */
-    @Override
-    public int getPort() {
-        return next.getPort();
-    }
-
 }

Added: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceStats.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceStats.java?rev=1308219&view=auto
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceStats.java (added)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/ServiceStats.java Sun Apr  1 23:42:30 2012
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.openejb.server;
+
+import org.apache.openejb.monitoring.Managed;
+import org.apache.openejb.monitoring.Stats;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+
+/**
+ * @version $Rev$ $Date$
+ */
+@Managed
+public class ServiceStats extends ServerServiceFilter {
+
+    @Managed
+    private final Stats stats = new Stats();
+
+    public ServiceStats(ServerService service) {
+        super(service);
+    }
+
+    public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
+        final long start = System.nanoTime();
+        try {
+            super.service(in, out);
+        } finally {
+            stats.record(System.nanoTime() - start);
+        }
+    }
+
+    public void service(Socket socket) throws ServiceException, IOException {
+        final long start = System.nanoTime();
+        try {
+            super.service(socket);
+        } finally {
+            stats.record(System.nanoTime() - start);
+        }
+    }
+
+}

Modified: openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/auth/IPAddressPermission.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/auth/IPAddressPermission.java?rev=1308219&r1=1308218&r2=1308219&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/auth/IPAddressPermission.java (original)
+++ openejb/trunk/openejb/server/openejb-server/src/main/java/org/apache/openejb/server/auth/IPAddressPermission.java Sun Apr  1 23:42:30 2012
@@ -17,7 +17,6 @@
  */
 package org.apache.openejb.server.auth;
 
-import java.io.Serializable;
 import java.net.InetAddress;
 
 /**