[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