You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2011/01/07 12:02:20 UTC

svn commit: r1056255 - in /karaf/trunk: main/src/main/java/org/apache/karaf/main/Main.java main/src/test/java/org/apache/karaf/main/MainStartTest.java shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java

Author: gnodet
Date: Fri Jan  7 11:02:20 2011
New Revision: 1056255

URL: http://svn.apache.org/viewvc?rev=1056255&view=rev
Log:
[KARAF-327] Add a property to control the framework factory in case multiples ones are available in the classloader, do the call to framework.stop() in a new thread to avoid blocking (even though the shutdown itself does not block, felix waits for a lock and that can take some time), also report the error if a timeout occurs using the wrapper

Modified:
    karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
    karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java
    karaf/trunk/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java

Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java?rev=1056255&r1=1056254&r2=1056255&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java Fri Jan  7 11:02:20 2011
@@ -46,6 +46,7 @@ import java.util.regex.Pattern;
 
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.ServiceReference;
@@ -154,6 +155,8 @@ public class Main {
     
     public static final String KARAF_FRAMEWORK = "karaf.framework";
 
+    public static final String KARAF_FRAMEWORK_FACTORY = "karaf.framework.factory";
+
     public static final String KARAF_SHUTDOWN_TIMEOUT = "karaf.shutdown.timeout";
 
     public static final String KARAF_SHUTDOWN_PORT = "karaf.shutdown.port";
@@ -247,10 +250,13 @@ public class Main {
         shutdownTimeout = Integer.parseInt(configProps.getProperty(KARAF_SHUTDOWN_TIMEOUT, Integer.toString(shutdownTimeout)));
         // Start up the OSGI framework
 
-        InputStream is = classLoader.getResourceAsStream("META-INF/services/" + FrameworkFactory.class.getName());
-        BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
-        String factoryClass = br.readLine();
-        br.close();
+        String factoryClass = configProps.getProperty(KARAF_FRAMEWORK_FACTORY);
+        if (factoryClass == null) {
+            InputStream is = classLoader.getResourceAsStream("META-INF/services/" + FrameworkFactory.class.getName());
+            BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+            factoryClass = br.readLine();
+            br.close();
+        }
         FrameworkFactory factory = (FrameworkFactory) classLoader.loadClass(factoryClass).newInstance();
         framework = factory.newFramework(new StringMap(configProps, false));
         framework.start();
@@ -287,7 +293,15 @@ public class Main {
             // Stop the framework in case it's still active
             exiting = true;
             if (framework.getState() == Bundle.ACTIVE) {
-                framework.stop();
+                new Thread() {
+                    public void run() {
+                        try {
+                            framework.stop();
+                        } catch (BundleException e) {
+                            System.err.println("Error stopping karaf: " + e.getMessage());
+                        }
+                    }
+                }.start();
             }
 
             int timeout = shutdownTimeout;

Modified: karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java?rev=1056255&r1=1056254&r2=1056255&view=diff
==============================================================================
--- karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java (original)
+++ karaf/trunk/main/src/test/java/org/apache/karaf/main/MainStartTest.java Fri Jan  7 11:02:20 2011
@@ -74,6 +74,8 @@ public class MainStartTest {
 		String[] args = new String[0];
 		System.setProperty("karaf.home", home.toString());
 		System.setProperty("karaf.data", data.toString());
+        System.setProperty("karaf.framework.factory", "org.apache.felix.framework.FrameworkFactory");
+
 
         Main main = new Main(args);
         main.launch();

Modified: karaf/trunk/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java?rev=1056255&r1=1056254&r2=1056255&view=diff
==============================================================================
--- karaf/trunk/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java (original)
+++ karaf/trunk/shell/wrapper/src/main/java/org/apache/karaf/shell/wrapper/Main.java Fri Jan  7 11:02:20 2011
@@ -100,7 +100,11 @@ public class Main extends Thread impleme
         try
         {
             destroying = true;
-            main.destroy();
+            if (!main.destroy())
+            {
+                System.err.println("Timeout waiting for Karaf to shutdown");
+                return -3;
+            }
         }
         catch (Throwable ex)
         {