-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) { >> >> -- Apache Karaf <http://karaf.apache.org/> Committer & PMC OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & Project Lead OPS4J Pax for Vaadin <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project Lead blog <http://notizblog.nierbeck.de/>
