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 2012/05/15 22:42:55 UTC

svn commit: r1338883 - /geronimo/server/branches/3.0-beta/framework/modules/geronimo-main/src/main/java/org/apache/geronimo/main/FrameworkLauncher.java

Author: gawor
Date: Tue May 15 20:42:55 2012
New Revision: 1338883

URL: http://svn.apache.org/viewvc?rev=1338883&view=rev
Log:
wait up to 3 minutes when stopping the framework from shutdown hook

Modified:
    geronimo/server/branches/3.0-beta/framework/modules/geronimo-main/src/main/java/org/apache/geronimo/main/FrameworkLauncher.java

Modified: geronimo/server/branches/3.0-beta/framework/modules/geronimo-main/src/main/java/org/apache/geronimo/main/FrameworkLauncher.java
URL: http://svn.apache.org/viewvc/geronimo/server/branches/3.0-beta/framework/modules/geronimo-main/src/main/java/org/apache/geronimo/main/FrameworkLauncher.java?rev=1338883&r1=1338882&r2=1338883&view=diff
==============================================================================
--- geronimo/server/branches/3.0-beta/framework/modules/geronimo-main/src/main/java/org/apache/geronimo/main/FrameworkLauncher.java (original)
+++ geronimo/server/branches/3.0-beta/framework/modules/geronimo-main/src/main/java/org/apache/geronimo/main/FrameworkLauncher.java Tue May 15 20:42:55 2012
@@ -153,7 +153,8 @@ public class FrameworkLauncher {
 
         Runtime.getRuntime().addShutdownHook(new Thread() {
             public void run() {
-                FrameworkLauncher.this.destroy(false);
+                // wait up to 3 minutes for complete shutdown
+                FrameworkLauncher.this.shutdown(3 * 60 * 1000);
             }
         });
 
@@ -181,17 +182,34 @@ public class FrameworkLauncher {
 
     public void destroy(boolean await) {
         try {
-            destroyFramework(await);
+            if (await) {
+                waitForFramework(0);
+            }
+            stopFramework(0);            
+        } catch (Exception e) {
+            System.err.println("Error stopping framework: " + e);
+        }
+
+        cleanup();
+    }
+
+    public void shutdown(long timeout) {
+        try {
+            stopFramework(timeout);
         } catch (Exception e) {
             System.err.println("Error stopping framework: " + e);
         }
 
+        cleanup();
+    }
+
+    private void cleanup() {
         if (uniqueInstance && cacheDirectory != null) {
             Utils.clearSunJarFileFactoryCache(cacheDirectory.getAbsolutePath());
             Utils.recursiveDelete(cacheDirectory);
         }
     }
-
+    
     private void configJansiPath() {
         String osName = "";
         String name = System.getProperty("os.name").toLowerCase().trim();
@@ -210,26 +228,29 @@ public class FrameworkLauncher {
         }
         System.setProperty("library.jansi.path", new File(geronimoBase, "var/native/jansi/" + osName + bitMode).getAbsolutePath());
     }
-
-    private void destroyFramework(boolean await) throws BundleException, InterruptedException {
+   
+    private void waitForFramework(long timeout) throws InterruptedException {
         if (framework == null) {
             return;
         }
-
-        if (await) {
-            while (true) {
-                FrameworkEvent event = framework.waitForStop(0);
-                if (event.getType() != FrameworkEvent.STOPPED_UPDATE) {
-                    break;
-                }
+        while (true) {
+            FrameworkEvent event = framework.waitForStop(timeout);
+            if (event.getType() != FrameworkEvent.STOPPED_UPDATE) {
+                break;
             }
         }
+    }
+    
+    private void stopFramework(long timeout) throws BundleException, InterruptedException {
+        if (framework == null) {
+            return;
+        }
         if (framework.getState() == Bundle.ACTIVE) {
             framework.stop();
-            framework.waitForStop(0);
+            framework.waitForStop(timeout);
         }
     }
-
+    
     public Framework getFramework() {
         return framework;
     }