Amila -The shutdown for module and services will fail if the Listener 
exists and will cause the corresponding web module on an application 
server to hang. The hanging of web module was the reason this fix was 
committed.

Thanks,

Nikhil Thaker
office: 919 254 9964
nvtha...@us.ibm.com



On Thu, Sep 24, 2009 at 3:58 AM, <ntha...@apache.org> wrote:
Author: nthaker
Date: Wed Sep 23 22:28:27 2009
New Revision: 818290

URL: http://svn.apache.org/viewvc?rev=818290&view=rev
Log:
AXIS2-4507

Modified:
  
 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java
  
 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/ListenerManager.java

Modified: 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java?rev=818290&r1=818289&r2=818290&view=diff

==============================================================================
--- 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java
 
(original)
+++ 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java
 
Wed Sep 23 22:28:27 2009
@@ -27,14 +27,17 @@
 import org.apache.axis2.clustering.ClusteringConstants;
 import org.apache.axis2.clustering.management.NodeManager;
 import org.apache.axis2.clustering.state.StateManager;
+import org.apache.axis2.description.AxisModule;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisServiceGroup;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.DependencyManager;
 import org.apache.axis2.engine.ListenerManager;
+import org.apache.axis2.engine.ServiceLifeCycle;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.java.security.AccessController;
+import org.apache.axis2.modules.Module;
 import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.util.threadpool.ThreadFactory;
 import org.apache.axis2.util.threadpool.ThreadPool;
@@ -85,7 +88,8 @@

    private String cachedServicePath = null;
    protected List<ContextListener> contextListeners;
-
+    private boolean stopped = false;
+
    /**
     * Constructor
     *
@@ -727,7 +731,43 @@
            serviceGroupContextMap.clear();
        }
    }
-
+    /**
+     * Called during shutdown to clean up all Contexts
+     */
+    public void shutdownModulesAndServices() throws AxisFault{
+        if(stopped){
+            return;
+        }
+        /*Shut down the modules*/
+        if(log.isDebugEnabled()){
+            log.debug("Invoke modules shutdown.");
+        }
+        HashMap modules = axisConfiguration.getModules();
+        if (modules != null) {
+            Iterator moduleitr = modules.values().iterator();
+            while (moduleitr.hasNext()) {
+                AxisModule axisModule = (AxisModule) moduleitr.next();
+                Module module = axisModule.getModule();
+                if (module != null) {
+                    module.shutdown(this);
+                }
+            }
+        }
+        cleanupContexts();
+        /*Shut down the services*/
+        if(log.isDebugEnabled()){
+            log.debug("Invoke services shutdown.");
+        }
+        for (Iterator services = 
axisConfiguration.getServices().values().iterator();
+        services.hasNext();) {
+            AxisService axisService = (AxisService) services.next();
+            ServiceLifeCycle serviceLifeCycle = 
axisService.getServiceLifeCycle();
+            if (serviceLifeCycle != null) {
+                serviceLifeCycle.shutDown(this, axisService);
+            }
+        }
+        stopped = true;
+    }
    /**
     * Invoked during shutdown to stop the ListenerManager and perform 
configuration cleanup
     *
@@ -736,6 +776,14 @@
    public void terminate() throws AxisFault {
        if (listenerManager != null) {
            listenerManager.stop();
+        }else{
+            if(log.isDebugEnabled()){
+                log.debug("Start Invoke modules and services shutdown.");
+            }
+            shutdownModulesAndServices();
+            if(log.isDebugEnabled()){
+                log.debug("End Invoke modules and services shutdown.");
+            }
        }

Why the service and module shutdown at the else part?
Why it should not be done if a listener manager exists?

thanks,
Amila.


-- 
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/

Reply via email to