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;
/**