I would not -1 with out testing.
On Mon, Aug 13, 2012 at 8:49 AM, Jamie G. <[email protected]> wrote: > Yes, I have built and tested it. > > On Mon, Aug 13, 2012 at 8:47 AM, Christian Schneider > <[email protected]> wrote: >> Am I missing something? The default is that the delayed start is turned off. >> Have you guys tested the code? >> >> Christian >> >> Am 13.08.2012 13:01, schrieb Achim Nierbeck: >> >>> -1, I thought it was clearly communicated that this shouldn't be the >>> default behavior. >>> >>> >>> 2012/8/13 Jamie G. <[email protected]>: >>>> >>>> -1 This behaviour was discussed on the dev list to not be made default. >>>> >>>> On Mon, Aug 13, 2012 at 6:40 AM, <[email protected]> wrote: >>>>> >>>>> Author: cschneider >>>>> Date: Mon Aug 13 09:10:22 2012 >>>>> New Revision: 1372333 >>>>> >>>>> URL: http://svn.apache.org/viewvc?rev=1372333&view=rev >>>>> Log: >>>>> KARAF-1640: Adding option to start console delayed. Showing some stats >>>>> when console comes up >>>>> >>>>> Modified: >>>>> >>>>> karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java >>>>> karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java >>>>> >>>>> karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java >>>>> >>>>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java >>>>> >>>>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java >>>>> >>>>> 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=1372333&r1=1372332&r2=1372333&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 >>>>> Mon Aug 13 09:10:22 2012 >>>>> @@ -113,6 +113,10 @@ public class ConfigProperties { >>>>> private static final String KARAF_SHUTDOWN_COMMAND = >>>>> "karaf.shutdown.command"; >>>>> >>>>> private static final String KARAF_SHUTDOWN_PID_FILE = >>>>> "karaf.shutdown.pid.file"; >>>>> + >>>>> + private static final String KARAF_STARTUP_MESSAGE = >>>>> "karaf.startup.message"; >>>>> + >>>>> + private static final String KARAF_DELAY_CONSOLE = >>>>> "karaf.delay.console"; >>>>> >>>>> private static final String DEFAULT_SHUTDOWN_COMMAND = "SHUTDOWN"; >>>>> >>>>> @@ -120,7 +124,7 @@ public class ConfigProperties { >>>>> >>>>> private static final String SECURITY_PROVIDERS = >>>>> "org.apache.karaf.security.providers"; >>>>> >>>>> - private static final String KARAF_STARTUP_MESSAGE = >>>>> "karaf.startup.message"; >>>>> + >>>>> >>>>> /** >>>>> * If a lock should be used before starting the runtime >>>>> @@ -154,6 +158,7 @@ public class ConfigProperties { >>>>> String optionals; >>>>> File etcFolder; >>>>> String startupMessage; >>>>> + boolean delayConsoleStart; >>>>> >>>>> public ConfigProperties() throws Exception { >>>>> this.karafHome = Utils.getKarafHome(ConfigProperties.class, >>>>> PROP_KARAF_HOME, ENV_KARAF_HOME); >>>>> @@ -206,6 +211,8 @@ public class ConfigProperties { >>>>> this.portFile = props.getProperty(KARAF_SHUTDOWN_PORT_FILE); >>>>> this.shutdownCommand = >>>>> props.getProperty(KARAF_SHUTDOWN_COMMAND, DEFAULT_SHUTDOWN_COMMAND); >>>>> this.startupMessage = props.getProperty(KARAF_STARTUP_MESSAGE, >>>>> "Apache Karaf starting up. Press Enter to open the shell now..."); >>>>> + this.delayConsoleStart = >>>>> Boolean.parseBoolean(props.getProperty(KARAF_DELAY_CONSOLE, "true")); >>>>> + System.setProperty(KARAF_DELAY_CONSOLE, new >>>>> Boolean(this.delayConsoleStart).toString()); >>>>> } >>>>> >>>>> private String getProperyOrFail(String propertyName) { >>>>> >>>>> 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=1372333&r1=1372332&r2=1372333&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 Mon >>>>> Aug 13 09:10:22 2012 >>>>> @@ -210,7 +210,9 @@ public class Main { >>>>> >>>>> public void launch() throws Exception { >>>>> config = new ConfigProperties(); >>>>> - System.out.println(config.startupMessage); >>>>> + if (config.delayConsoleStart) { >>>>> + System.out.println(config.startupMessage); >>>>> + } >>>>> BootstrapLogManager.setProperties(config.props); >>>>> Lock lock = createLock(); >>>>> lockManager = new LockManager(lock, new KarafLockCallback(), >>>>> config.lockDelay); >>>>> @@ -252,7 +254,9 @@ public class Main { >>>>> >>>>> setStartLevel(config.lockStartLevel); >>>>> // Progress bar >>>>> - new StartupListener(framework.getBundleContext()); >>>>> + if (config.delayConsoleStart) { >>>>> + new StartupListener(LOG, framework.getBundleContext()); >>>>> + } >>>>> lockManager.startLockMonitor(); >>>>> } >>>>> >>>>> >>>>> Modified: >>>>> karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java >>>>> URL: >>>>> http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java?rev=1372333&r1=1372332&r2=1372333&view=diff >>>>> >>>>> ============================================================================== >>>>> --- >>>>> karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java >>>>> (original) >>>>> +++ >>>>> karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java >>>>> Mon Aug 13 09:10:22 2012 >>>>> @@ -1,5 +1,7 @@ >>>>> package org.apache.karaf.main; >>>>> >>>>> +import java.util.logging.Logger; >>>>> + >>>>> import org.osgi.framework.Bundle; >>>>> import org.osgi.framework.BundleContext; >>>>> import org.osgi.framework.BundleEvent; >>>>> @@ -10,20 +12,29 @@ import org.osgi.framework.SynchronousBun >>>>> import org.osgi.framework.startlevel.FrameworkStartLevel; >>>>> >>>>> /** >>>>> - * Watches the startup of the framework and displays a progress bar of >>>>> the number of bundles started / total. >>>>> - * The listener will remove itself after the desired start level is >>>>> reached or the system property karaf.console.started is set to >>>>> - * true. >>>>> + * Watches the startup of the framework and displays a progress bar of >>>>> the >>>>> + * number of bundles started / total. The listener will remove itself >>>>> after the >>>>> + * desired start level is reached or the system property >>>>> karaf.console.started >>>>> + * is set to true. >>>>> */ >>>>> class StartupListener implements FrameworkListener, >>>>> SynchronousBundleListener { >>>>> + private Logger log; >>>>> private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED = >>>>> "karaf.console.started"; >>>>> + private long startTime; >>>>> + private int currentPercentage; >>>>> + >>>>> + private final BundleContext context; >>>>> >>>>> - private final BundleContext context; >>>>> - StartupListener(BundleContext context) { >>>>> + StartupListener(Logger log, BundleContext context) { >>>>> + this.log = log; >>>>> this.context = context; >>>>> + this.currentPercentage = 0; >>>>> + this.startTime = System.currentTimeMillis(); >>>>> context.addBundleListener(this); >>>>> context.addFrameworkListener(this); >>>>> } >>>>> - public synchronized void bundleChanged(BundleEvent bundleEvent) { >>>>> + >>>>> + public BundleStats getBundleStats() { >>>>> Bundle[] bundles = context.getBundles(); >>>>> int numActive = 0; >>>>> int numBundles = bundles.length; >>>>> @@ -31,42 +42,76 @@ class StartupListener implements Framewo >>>>> if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != >>>>> null) { >>>>> numBundles--; >>>>> } else if (bundle.getState() == Bundle.ACTIVE) { >>>>> - numActive ++; >>>>> + numActive++; >>>>> } >>>>> } >>>>> - boolean started = >>>>> Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, >>>>> "false")); >>>>> - if (!started) { >>>>> - showProgressBar(numActive, numBundles); >>>>> + BundleStats stats = new BundleStats(); >>>>> + stats.numActive = numActive; >>>>> + stats.numTotal = numBundles; >>>>> + return stats; >>>>> + } >>>>> + >>>>> + public synchronized void bundleChanged(BundleEvent bundleEvent) { >>>>> + BundleStats stats = getBundleStats(); >>>>> + if (!isConsoleStarted()) { >>>>> + showProgressBar(stats.numActive, stats.numTotal); >>>>> } >>>>> } >>>>> + >>>>> + private boolean isConsoleStarted() { >>>>> + return >>>>> Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, >>>>> "false")); >>>>> + } >>>>> + >>>>> public synchronized void frameworkEvent(FrameworkEvent >>>>> frameworkEvent) { >>>>> if (frameworkEvent.getType() == >>>>> FrameworkEvent.STARTLEVEL_CHANGED) { >>>>> - int defStartLevel = >>>>> Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL)); >>>>> - int startLevel = >>>>> context.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel(); >>>>> + int defStartLevel = Integer.parseInt(System >>>>> + >>>>> .getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL)); >>>>> + int startLevel = context.getBundle(0) >>>>> + .adapt(FrameworkStartLevel.class).getStartLevel(); >>>>> if (startLevel >= defStartLevel) { >>>>> context.removeBundleListener(this); >>>>> context.removeFrameworkListener(this); >>>>> + long startTimeSeconds = (System.currentTimeMillis() - >>>>> this.startTime) / 1000; >>>>> + BundleStats stats = getBundleStats(); >>>>> + String message = "Karaf started in " + startTimeSeconds >>>>> + "s. Bundle stats: " + stats.numActive >>>>> + + " active , " + stats.numTotal + " total"; >>>>> + log.info(message); >>>>> + if (!isConsoleStarted()) { >>>>> + showProgressBar(100, 100); >>>>> + System.out.println(message); >>>>> + } >>>>> + >>>>> } >>>>> } >>>>> } >>>>> + >>>>> public void showProgressBar(int done, int total) { >>>>> int percent = (done * 100) / total; >>>>> - StringBuilder sb = new StringBuilder(); >>>>> - sb.append(String.format("\r%3d%% [", percent)); >>>>> - for (int i = 0; i < 100; i++) { >>>>> - if (i < percent) { >>>>> - sb.append('='); >>>>> - } else if (i == percent) { >>>>> - sb.append('>'); >>>>> - } else { >>>>> - sb.append(' '); >>>>> + // Make sure we do not go backwards with percentage >>>>> + if (percent > currentPercentage) { >>>>> + currentPercentage = percent; >>>>> + StringBuilder sb = new StringBuilder(); >>>>> + sb.append(String.format("\r%3d%% [", percent)); >>>>> + for (int i = 0; i < 100; i++) { >>>>> + if (i < percent) { >>>>> + sb.append('='); >>>>> + } else if (i == percent) { >>>>> + sb.append('>'); >>>>> + } else { >>>>> + sb.append(' '); >>>>> + } >>>>> } >>>>> + sb.append(']'); >>>>> + System.out.print(sb.toString()); >>>>> + System.out.flush(); >>>>> } >>>>> - sb.append(']'); >>>>> - System.out.print(sb.toString()); >>>>> - System.out.flush(); >>>>> if (done == total) { >>>>> System.out.println(); >>>>> } >>>>> } >>>>> + >>>>> + class BundleStats { >>>>> + int numActive; >>>>> + int numTotal; >>>>> + } >>>>> } >>>>> \ No newline at end of file >>>>> >>>>> Modified: >>>>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java >>>>> URL: >>>>> http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java?rev=1372333&r1=1372332&r2=1372333&view=diff >>>>> >>>>> ============================================================================== >>>>> --- >>>>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java >>>>> (original) >>>>> +++ >>>>> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java >>>>> Mon Aug 13 09:10:22 2012 >>>>> @@ -55,8 +55,6 @@ class DelayedStarted extends Thread impl >>>>> >>>>> // Signal to the main module that it can stop displaying the >>>>> startup progress >>>>> System.setProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, "true"); >>>>> - >>>>> - System.out.println(); >>>>> this.bundleContext.removeFrameworkListener(this); >>>>> console.run(); >>>>> } >>>>> >>>>> 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=1372333&r1=1372332&r2=1372333&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 Aug 13 09:10:22 2012 >>>>> @@ -88,14 +88,20 @@ 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); >>>>> - DelayedStarted watcher = new DelayedStarted(new Runnable() { >>>>> - >>>>> - @Override >>>>> + >>>>> + Runnable consoleStarter = new Runnable() { >>>>> public void run() { >>>>> consoleFactory.startConsoleAs(console, subject); >>>>> } >>>>> - }, bundleContext, System.in); >>>>> - new Thread(watcher).start(); >>>>> + }; >>>>> + >>>>> + boolean delayconsole = >>>>> Boolean.parseBoolean(System.getProperty("karaf.delay.console")); >>>>> + if (delayconsole) { >>>>> + DelayedStarted watcher = new DelayedStarted(consoleStarter, >>>>> bundleContext, System.in); >>>>> + new Thread(watcher).start(); >>>>> + } else { >>>>> + consoleStarter.run(); >>>>> + } >>>>> } >>>>> >>>>> protected String startAgent(String user) { >>>>> >>>>> >>> >>> >> >> >> -- >> Christian Schneider >> http://www.liquid-reality.de >> >> Open Source Architect >> Talend Application Integration Division http://www.talend.com >>
