karaf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Guillaume Nodet <gno...@gmail.com>
Subject Re: svn commit: r1364640 - in /karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline: BundleWatcher.java LocalConsoleManager.java
Date Mon, 23 Jul 2012 14:14:49 GMT
What I did for the fuse version was to just raise the start level for the
console to 99 so that it will get started last, without actually actively
waiting ...

On Mon, Jul 23, 2012 at 4:14 PM, Guillaume Nodet <gnodet@gmail.com> wrote:

> Won't that change forbid to start the console if any bundle is in error
> somehow ?
> So if a user installs a bundle which can not start, he can't debug anymore
> ?
>
>
> On Mon, Jul 23, 2012 at 4:10 PM, <cschneider@apache.org> wrote:
>
>> Author: cschneider
>> Date: Mon Jul 23 14:10:45 2012
>> New Revision: 1364640
>>
>> URL: http://svn.apache.org/viewvc?rev=1364640&view=rev
>> Log:
>> KARAF-1640 Start shell when all bundles are resolved or active
>>
>> Added:
>>
>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
>> Modified:
>>
>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
>>
>> Added:
>> 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=1364640&view=auto
>>
>> ==============================================================================
>> ---
>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
>> (added)
>> +++
>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
>> Mon Jul 23 14:10:45 2012
>> @@ -0,0 +1,77 @@
>> +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;
>> +
>> +public class BundleWatcher implements Runnable {
>> +
>> +    private final BundleContext context;
>> +    private final Runnable consoleStartCallBack;
>> +    private final PrintStream out;
>> +
>> +    public BundleWatcher(BundleContext context, PrintStream out,
>> Runnable consoleStartCallBack) {
>> +        this.context = context;
>> +        this.out = out;
>> +        this.consoleStartCallBack = consoleStartCallBack;
>> +    }
>> +
>> +    @Override
>> +    public void run() {
>> +        boolean startConsole = false;
>> +        out.println("Apache Karaf starting up. Press Enter to start the
>> shell now ...");
>> +        out.println();
>> +        while (!startConsole) {
>> +            BundleStats stats = getBundleStats();
>> +            //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) {
>> +            }
>> +            if (stats.numActive + stats.numResolved == stats.numTotal) {
>> +                startConsole = true;
>> +            }
>> +        }
>> +        consoleStartCallBack.run();
>> +    }
>> +
>> +    private BundleStats getBundleStats() {
>> +        Bundle[] bundles = context.getBundles();
>> +        BundleStats stats = new BundleStats();
>> +        stats.numTotal = bundles.length;
>> +        for (Bundle bundle : bundles) {
>> +            if (bundle.getState() == Bundle.ACTIVE) {
>> +                stats.numActive ++;
>> +            }
>> +            if (bundle.getState() == Bundle.RESOLVED) {
>> +                stats.numResolved ++;
>> +            }
>> +            if (bundle.getState() == Bundle.INSTALLED) {
>> +                stats.numInstalled ++;
>> +            }
>> +        }
>> +        return stats;
>> +    }
>> +
>> +    class BundleStats {
>> +        int numResolved = 0;
>> +        int numActive = 0;
>> +        int numInstalled = 0;
>> +        int numTotal = 0;
>> +    }
>> +
>> +}
>>
>> 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=1364640&r1=1364639&r2=1364640&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
>> Mon Jul 23 14:10:45 2012
>> @@ -33,6 +33,7 @@ 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;
>> @@ -84,7 +85,14 @@ 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);
>> -        consoleFactory.startConsoleAs(console, subject);
>> +        BundleWatcher watcher = new BundleWatcher(bundleContext,
>> System.out, new Runnable() {
>> +
>> +            @Override
>> +            public void run() {
>> +                consoleFactory.startConsoleAs(console, subject);
>> +            }
>> +        });
>> +        new Thread(watcher).start();
>>      }
>>
>>      protected String startAgent(String user) {
>>
>>
>>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> FuseSource, Integration everywhere
> http://fusesource.com
>



-- 
------------------------
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
FuseSource, Integration everywhere
http://fusesource.com

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message