You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2011/09/26 11:12:09 UTC

svn commit: r1175734 - /openejb/trunk/openejb3/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java

Author: andygumbrecht
Date: Mon Sep 26 09:12:09 2011
New Revision: 1175734

URL: http://svn.apache.org/viewvc?rev=1175734&view=rev
Log:
Fix: Ensure MBean is removed on stop.

Modified:
    openejb/trunk/openejb3/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java

Modified: openejb/trunk/openejb3/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java?rev=1175734&r1=1175733&r2=1175734&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java (original)
+++ openejb/trunk/openejb3/server/openejb-server/src/main/java/org/apache/openejb/server/SimpleServiceManager.java Mon Sep 26 09:12:09 2011
@@ -16,15 +16,6 @@
  */
 package org.apache.openejb.server;
 
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.net.InetAddress;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.monitoring.ManagedMBean;
 import org.apache.openejb.monitoring.ObjectNameBuilder;
@@ -32,6 +23,13 @@ import org.apache.xbean.finder.ResourceF
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+import java.io.IOException;
+import java.lang.management.ManagementFactory;
+import java.net.InetAddress;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 
 /**
  * @version $Rev$ $Date$
@@ -39,9 +37,12 @@ import javax.management.ObjectName;
  */
 public class SimpleServiceManager extends ServiceManager {
 
+    private static ObjectName objectName = null;
+
     private ServerService[] daemons;
     private boolean stop = false;
 
+
     public SimpleServiceManager() {
     }
 
@@ -79,7 +80,7 @@ public class SimpleServiceManager extend
         public Map mapAvailableServices(Class interfase) throws IOException, ClassNotFoundException {
             Map services = resourceFinder.mapAvailableProperties(ServerService.class.getName());
 
-            for (Iterator iterator = services.entrySet().iterator(); iterator.hasNext();) {
+            for (Iterator iterator = services.entrySet().iterator(); iterator.hasNext(); ) {
                 Map.Entry entry = (Map.Entry) iterator.next();
                 String name = (String) entry.getKey();
                 Properties properties = (Properties) entry.getValue();
@@ -103,6 +104,16 @@ public class SimpleServiceManager extend
         }
     }
 
+    private static ObjectName getObjectName() {
+        if (null == objectName) {
+            final ObjectNameBuilder jmxName = new ObjectNameBuilder("openejb");
+            jmxName.set("type", "Server");
+            jmxName.set("name", "DiscoveryRegistry");
+            objectName = jmxName.build();
+        }
+        return objectName;
+    }
+
     @Override
     public void init() throws Exception {
         try {
@@ -110,25 +121,18 @@ public class SimpleServiceManager extend
             InetAddress localhost = InetAddress.getLocalHost();
             org.apache.log4j.MDC.put("HOST", localhost.getHostName());
         } catch (Throwable e) {
+            //Ignore
         }
 
         DiscoveryRegistry registry = new DiscoveryRegistry();
 
         // register the mbean
         try {
-            MBeanServer server = ManagementFactory.getPlatformMBeanServer();
-
-            ObjectNameBuilder jmxName = new ObjectNameBuilder("openejb");
-            jmxName.set("type", "Server");
-            jmxName.set("name", "DiscoveryRegistry");
-
-            ObjectName objectName = jmxName.build();
-            server.registerMBean(new ManagedMBean(registry), objectName);
-        } catch (Exception e) {
-            logger.error("Unable to register MBean ", e);
+            ManagementFactory.getPlatformMBeanServer().registerMBean(new ManagedMBean(registry), getObjectName());
+        } catch (Throwable e) {
+            logger.error("Failed to register 'openejb' MBean", e);
         }
 
-
         SystemInstance.get().setComponent(DiscoveryRegistry.class, registry);
 
         ServiceFinder serviceFinder = new ServiceFinder("META-INF/");
@@ -196,13 +200,30 @@ public class SimpleServiceManager extend
         logger.info("Stopping server services");
         stop = true;
 
-        for (int i = 0; i < daemons.length; i++) {
+        final ServerService[] services = daemons.clone();
+
+        for (int i = 0; i < services.length; i++) {
             try {
-                daemons[i].stop();
+                services[i].stop();
             } catch (ServiceException e) {
-                logger.fatal("Service Shutdown Failed: " + daemons[i].getName() + ".  Exception: " + e.getMessage(), e);
+                logger.fatal("Service Shutdown Failed: " + services[i].getName() + ".  Exception: " + e.getMessage(), e);
+            }
+        }
+
+        // De-register the mbean
+        try {
+
+            final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+            final ObjectName objectName = getObjectName();
+
+            if (server.isRegistered(objectName)) {
+                server.unregisterMBean(objectName);
             }
+
+        } catch (Throwable e) {
+            logger.warning("Failed to de-register the 'openejb' mbean", e);
         }
+
         notifyAll();
     }