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 >
