You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2011/07/28 05:19:56 UTC

svn commit: r1151708 - in /geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core: plugin.xml src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java

Author: gawor
Date: Thu Jul 28 03:19:53 2011
New Revision: 1151708

URL: http://svn.apache.org/viewvc?rev=1151708&view=rev
Log:
improve server shutdown

Modified:
    geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/plugin.xml
    geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java

Modified: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/plugin.xml
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/plugin.xml?rev=1151708&r1=1151707&r2=1151708&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/plugin.xml (original)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/plugin.xml Thu Jul 28 03:19:53 2011
@@ -66,7 +66,7 @@
             initialState="stopped"
             supportsRemoteHosts="true"
             startTimeout="240000"
-            stopTimeout="30000"
+            stopTimeout="90000"
             startBeforePublish="true"
             runtimeTypeId="org.apache.geronimo.runtime.30"
             launchConfigId="org.apache.geronimo.st.v30.core.launchConfigurationType"

Modified: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java?rev=1151708&r1=1151707&r2=1151708&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java (original)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v30.core/src/main/java/org/apache/geronimo/st/v30/core/GeronimoServerBehaviourDelegate.java Thu Jul 28 03:19:53 2011
@@ -245,28 +245,66 @@ public class GeronimoServerBehaviourDele
      * 
      * @see org.eclipse.wst.server.core.model.ServerBehaviourDelegate#stop(boolean)
      */
-    synchronized public void stop(final boolean force) {
+    public synchronized void stop(final boolean force) {
         Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.stop", force);
 
-        stopPingThread();
-        if (getServer().getServerState() != IServer.STATE_STOPPED) {
+        IServer server = getServer();
+                
+        if (server.getServerState() != IServer.STATE_STOPPED) {
             setServerState(IServer.STATE_STOPPING);
-            stopKernel();
         }
-        GeronimoConnectionFactory.getInstance().destroy(getServer());
-        if (force) {
-            terminate();
-            return;
+        
+        // stop threads
+        stopPingThread();
+        stopSynchronizeProjectOnServerTask();
+        
+        // request shutdown
+        stopKernel();
+        
+        server.getStopTimeout();
+        
+        // wait for shutdown
+        if (!waitForStopped(60 * 1000) || force) {
+            ILaunch launch = server.getLaunch();
+            if (launch != null) {
+                Trace.trace(Trace.INFO, "Killing the geronimo server process", Activator.traceCore); //$NON-NLS-1$
+                try {
+                    launch.terminate();
+                } catch (Exception e) {
+                    Trace.trace(Trace.ERROR, "Error killing the geronimo server process", e, Activator.logCore); //$NON-NLS-1$
+                }
+            }
         }
-        int state = getServer().getServerState();
-        if (state == IServer.STATE_STOPPED)
-            return;
-        if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING)
-            terminate();
-                                                   
+        
+        GeronimoConnectionFactory.getInstance().destroy(server);
+        
+        stopImpl(); 
+                                                           
         Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.stop");
     }
 
+    private boolean waitForStopped(long timeout) {
+        Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.waitForStopped", timeout);
+        
+        long started = System.currentTimeMillis();
+        boolean stopped = false;
+        try {
+            while (System.currentTimeMillis() - started < timeout) {
+                if (isKernelAlive()) {
+                    Thread.sleep(500);
+                } else {
+                    stopped = true;
+                    break;
+                }
+            }
+        } catch (InterruptedException e) {
+            // ignore
+        }
+        
+        Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.waitForStopped", stopped);
+        return stopped;
+    }
+    
     private void setStatus(IModule[] module, IStatus status, MultiStatus multiStatus) {
         if (status.isOK()) {
             setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
@@ -839,33 +877,6 @@ public class GeronimoServerBehaviourDele
         return (IGeronimoServer) getServer().loadAdapter(IGeronimoServer.class, null);
     }
 
-    protected void terminate() {
-        Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.terminate");
-
-        if (getServer().getServerState() == IServer.STATE_STOPPED) {
-            return;
-        }
-
-        setServerState(IServer.STATE_STOPPING);
-        Trace.trace(Trace.INFO, "Killing the geronimo server process", Activator.traceCore); //$NON-NLS-1$
-        
-        try {
-            ILaunch launch = getServer().getLaunch();
-            if (launch != null) {
-                launch.terminate();
-            }
-            stopImpl();            
-        } catch (Exception e) {
-            Trace.trace(Trace.ERROR, "Error killing the geronimo server process", e, Activator.logCore); //$NON-NLS-1$
-            // 
-            // WTP does not allow a CoreException to be thrown in this case 
-            // 
-            throw new RuntimeException(Messages.serverStopFailed);
-        }
-
-        Trace.tracePoint("Exit ", Activator.traceCore, "GeronimoServerBehaviourDelegate.terminate");
-    }
-
     protected void stopImpl() {
         if (processListener != null) {
             DebugPlugin.getDefault().removeDebugEventListener(processListener);
@@ -1198,16 +1209,16 @@ public class GeronimoServerBehaviourDele
         return kernel;
     }
     
-    protected void stopKernel() {
+    private void stopKernel() {
+        Trace.tracePoint("Entry", Activator.traceCore, "GeronimoServerBehaviourDelegate.stopKernel");
         try {
             MBeanServerConnection connection = getServerConnection();
-            Trace.trace(Trace.INFO, "Server shutdown starting...", Activator.traceCore);
             connection.invoke(getFrameworkMBean(connection), "stopBundle",
                      new Object[] { 0 }, new String[] { long.class.getName() });
-            Trace.trace(Trace.INFO, "Server shutdown completed", Activator.traceCore);          
         } catch (Exception e) {
-            Trace.trace(Trace.ERROR, e.getMessage(), e, Activator.traceCore);
+            Trace.trace(Trace.ERROR, "Error while requesting server shutdown", e, Activator.traceCore);
         }
+        Trace.tracePoint("Exit", Activator.traceCore, "GeronimoServerBehaviourDelegate.stopKernel");
     }
 
     public boolean isKernelAlive() {