[Jboss-cvs] JBossAS SVN: r55983 - branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Aug 16 09:28:23 EDT 2006


Author: adrian at jboss.org
Date: 2006-08-16 09:28:21 -0400 (Wed, 16 Aug 2006)
New Revision: 55983

Modified:
   branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java
Log:
Make sure shutdown() uninstalls in the reverse order to install()/register().

Modified: branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java
===================================================================
--- branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java	2006-08-16 13:11:06 UTC (rev 55982)
+++ branches/MC_VDF_WORK/system-jmx/src/main/org/jboss/system/ServiceController.java	2006-08-16 13:28:21 UTC (rev 55983)
@@ -24,8 +24,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.management.MBeanRegistration;
 import javax.management.MBeanServer;
@@ -100,6 +102,9 @@
    /** The contexts */
    protected Map<ObjectName, ServiceControllerContext> installed = new ConcurrentHashMap<ObjectName, ServiceControllerContext>(); 
    
+   /** The contexts in installation order */
+   protected CopyOnWriteArrayList<ServiceControllerContext> installedOrder = new CopyOnWriteArrayList<ServiceControllerContext>();
+   
    /**
     * Get the MBeanServer
     * 
@@ -163,8 +168,8 @@
    public List<ServiceContext> listDeployed()
    {
       // Retrieve the service context from all our installed contexts
-      ArrayList<ServiceContext> result = new ArrayList<ServiceContext>(installed.size());
-      for (ServiceControllerContext context : installed.values())
+      ArrayList<ServiceContext> result = new ArrayList<ServiceContext>(installedOrder.size());
+      for (ServiceControllerContext context : installedOrder)
          result.add(context.getServiceContext());
       return result;
    }
@@ -173,7 +178,7 @@
    {
       // Retrieve the service contexts that are not deployed properly
       ArrayList<ServiceContext> result = new ArrayList<ServiceContext>();
-      for (ServiceControllerContext context : installed.values())
+      for (ServiceControllerContext context : installedOrder)
       {
          ServiceContext sc = context.getServiceContext();
          if (sc.state != ServiceContext.CREATED &&
@@ -513,6 +518,7 @@
          log.trace("Ignoring request to remove nonexistent service: " + objectName);
          return;
       }
+      installedOrder.remove(context);
       log.debug("removing service: " + objectName);
 
       // Uninstall the context
@@ -529,15 +535,17 @@
    
    public void shutdown()
    {
-      log.debug("Stopping " + installed.size() + " services");
+      log.debug("Stopping " + installedOrder.size() + " services");
 
       KernelController controller = kernel.getController();
       
       int serviceCounter = 0;
 
       // Uninstall all the contexts we know about
-      for (ServiceControllerContext context : installed.values())
+      ListIterator<ServiceControllerContext> iterator = installedOrder.listIterator(installedOrder.size());
+      while (iterator.hasPrevious())
       {
+         ServiceControllerContext context = iterator.previous();
          controller.uninstall(context.getName());
          ++serviceCounter;
       }
@@ -590,6 +598,7 @@
    public void postDeregister()
    {
       installed.clear();
+      installedOrder.clear();
       server = null;
    }
    
@@ -604,6 +613,7 @@
    {
       controller.install(context);
       installed.put(context.getObjectName(), context);
+      installedOrder.add(context);
    }
    
    /**




More information about the jboss-cvs-commits mailing list