You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2012/07/24 15:00:52 UTC

svn commit: r1365028 - in /karaf/trunk: main/src/main/java/org/apache/karaf/main/ shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/ shell/console/src/main/resources/OSGI-INF/blueprint/

Author: cschneider
Date: Tue Jul 24 13:00:51 2012
New Revision: 1365028

URL: http://svn.apache.org/viewvc?rev=1365028&view=rev
Log:
KARAF-1640 Wait for startlevel instead if bundle states

Modified:
    karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java
    karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
    karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
    karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml

Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java
URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java?rev=1365028&r1=1365027&r2=1365028&view=diff
==============================================================================
--- karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java (original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java Tue Jul 24 13:00:51 2012
@@ -184,6 +184,7 @@ public class ConfigProperties {
         String prop = props.getProperty(SECURITY_PROVIDERS);
         this.securityProviders = (prop != null) ? prop.split(",") : new String[] {};
         this.defaultStartLevel = Integer.parseInt(props.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+        System.setProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, Integer.toString(this.defaultStartLevel));
         this.lockStartLevel = Integer.parseInt(props.getProperty(PROPERTY_LOCK_LEVEL, Integer.toString(lockStartLevel)));                
         this.lockDelay = Integer.parseInt(props.getProperty(PROPERTY_LOCK_DELAY, Integer.toString(lockDelay)));
         this.props.setProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, Integer.toString(lockStartLevel));

Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java?rev=1365028&r1=1365027&r2=1365028&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java Tue Jul 24 13:00:51 2012
@@ -1,20 +1,22 @@
 package org.apache.karaf.shell.console.impl.jline;
 
-import java.io.IOException;
 import java.io.PrintStream;
 
-import org.fusesource.jansi.Ansi;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.startlevel.FrameworkStartLevel;
 
 public class BundleWatcher implements Runnable {
 
     private final BundleContext context;
     private final Runnable consoleStartCallBack;
     private final PrintStream out;
+    private final int defaultStartLevel;
 
-    public BundleWatcher(BundleContext context, PrintStream out, Runnable consoleStartCallBack) {
+    public BundleWatcher(BundleContext context, int defaultStartLevel, PrintStream out, Runnable consoleStartCallBack) {
         this.context = context;
+        this.defaultStartLevel = defaultStartLevel;
         this.out = out;
         this.consoleStartCallBack = consoleStartCallBack;
     }
@@ -24,28 +26,27 @@ public class BundleWatcher implements Ru
         boolean startConsole = false;
         out.println("Apache Karaf starting up. Press Enter to start the shell now ...");
         out.println();
+        
         while (!startConsole) {
             BundleStats stats = getBundleStats();
+            stats.print(out);
             //out.print(Ansi.ansi().cursorUp(1).toString());
-            out.println(String.format("Bundles - total: %d, active: %d, resolved: %d, installed: %d         ", 
-                    stats.numTotal, stats.numActive, stats.numResolved, stats.numInstalled));
             try {
                 Thread.sleep(500);
-            } catch (InterruptedException e) {
-            }
-            try {
                 if (System.in.available() > 0) {
                     char ch = (char) System.in.read();
                     if (ch == '\r') {
                         startConsole = true;
                     }
                 }
-            } catch (IOException e) {
+            } catch (Exception e) {
             }
-            if (stats.numActive + stats.numResolved == stats.numTotal) {
+            if (stats.startLevel == defaultStartLevel) {
                 startConsole = true;
             }
         }
+        BundleStats stats = getBundleStats();
+        stats.print(out);
         consoleStartCallBack.run();
     }
 
@@ -64,6 +65,9 @@ public class BundleWatcher implements Ru
                 stats.numInstalled ++;
             }
         }
+        Bundle frameworkBundle = context.getBundle(0);
+        FrameworkStartLevel fsl = frameworkBundle.adapt(FrameworkStartLevel.class);
+        stats.startLevel = fsl.getStartLevel();
         return stats;
     }
     
@@ -72,6 +76,12 @@ public class BundleWatcher implements Ru
         int numActive = 0;
         int numInstalled = 0;
         int numTotal = 0; 
+        int startLevel = 0;
+        
+        public void print(PrintStream out) {
+            out.println(String.format("Bundles - total: %d, active: %d, resolved: %d, installed: %d, startlevel: %d         ", 
+                    numTotal, numActive, numResolved, numInstalled, startLevel));
+        }
     }
 
 }

Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java?rev=1365028&r1=1365027&r2=1365028&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java Tue Jul 24 13:00:51 2012
@@ -23,6 +23,7 @@ import java.io.ObjectInputStream;
 import java.net.URL;
 import java.security.KeyPair;
 import java.util.Hashtable;
+
 import javax.security.auth.Subject;
 
 import jline.Terminal;
@@ -33,7 +34,6 @@ import org.apache.karaf.shell.console.Co
 import org.apache.karaf.shell.console.ConsoleFactory;
 import org.apache.sshd.agent.SshAgent;
 import org.apache.sshd.agent.local.AgentImpl;
-import org.fusesource.jansi.Ansi;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
@@ -48,16 +48,19 @@ public class LocalConsoleManager {
     private TerminalFactory terminalFactory;
     private Console console;
     private boolean start;
+    private final int defaultStartLevel;
     private CommandProcessor commandProcessor;
     private ServiceRegistration registration;
     private SshAgent local;
 
     public LocalConsoleManager(boolean start, 
+            String defaultStartLevel,
             BundleContext bundleContext, 
             TerminalFactory terminalFactory, 
             ConsoleFactory consoleFactory,
             CommandProcessor commandProcessor) throws Exception {
         this.start = start;
+        this.defaultStartLevel = Integer.parseInt(defaultStartLevel);
         this.bundleContext = bundleContext;
         this.terminalFactory = terminalFactory;
         this.consoleFactory = consoleFactory;
@@ -85,7 +88,7 @@ public class LocalConsoleManager {
         String agentId = startAgent("karaf");
         this.console = consoleFactory.createLocal(this.commandProcessor, terminal, callback);
         this.console.getSession().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentId);
-        BundleWatcher watcher = new BundleWatcher(bundleContext, System.out, new Runnable() {
+        BundleWatcher watcher = new BundleWatcher(bundleContext, defaultStartLevel, System.out, new Runnable() {
             
             @Override
             public void run() {

Modified: karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml?rev=1365028&r1=1365027&r2=1365028&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml (original)
+++ karaf/trunk/shell/console/src/main/resources/OSGI-INF/blueprint/karaf-console.xml Tue Jul 24 13:00:51 2012
@@ -34,6 +34,7 @@
 
     <bean id="consoleFactory" class="org.apache.karaf.shell.console.impl.jline.LocalConsoleManager" destroy-method="stop">
         <argument value="$[karaf.startLocalConsole]"/>
+        <argument value="$[org.osgi.framework.startlevel.beginning]"/>
         <argument ref="blueprintBundleContext"/>
         <argument ref="terminalFactory"/>
         <argument ref="consoleFactoryService"/>