Author: cschneider
Date: Mon Aug 6 10:03:50 2012
New Revision: 1369765
URL: http://svn.apache.org/viewvc?rev=1369765&view=rev
Log:
KARAF-1640: Moving the inner classes out to make it easier to port to trunk.
Adding some documentation
Added:
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
Modified:
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Modified:
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
URL:
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java?rev=1369765&r1=1369764&r2=1369765&view=diff
==============================================================================
---
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
(original)
+++
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
Mon Aug 6 10:03:50 2012
@@ -48,16 +48,12 @@ import java.util.regex.Pattern;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
import org.osgi.framework.ServiceReference;
-import org.osgi.framework.SynchronousBundleListener;
import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;
-import org.osgi.framework.startlevel.FrameworkStartLevel;
import org.osgi.service.startlevel.StartLevel;
/**
@@ -300,61 +296,6 @@ public class Main {
}.start();
}
- private static class StartupListener implements FrameworkListener,
SynchronousBundleListener {
- private final BundleContext context;
- private StartupListener(BundleContext context) {
- this.context = context;
- context.addBundleListener(this);
- context.addFrameworkListener(this);
- }
- public synchronized void bundleChanged(BundleEvent bundleEvent) {
- Bundle[] bundles = context.getBundles();
- int numActive = 0;
- int numBundles = bundles.length;
- for (Bundle bundle : bundles) {
- if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) {
- numBundles--;
- } else if (bundle.getState() == Bundle.ACTIVE) {
- numActive ++;
- }
- }
- boolean started =
Boolean.parseBoolean(System.getProperty("karaf.console.started", "false"));
- if (!started) {
- update(numActive, numBundles);
- }
- }
- 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();
- if (startLevel >= defStartLevel) {
- context.removeBundleListener(this);
- context.removeFrameworkListener(this);
- }
- }
- }
- public void update(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(' ');
- }
- }
- sb.append(']');
- System.out.print(sb.toString());
- System.out.flush();
- if (done == total) {
- System.out.println();
- }
- }
- }
-
private void startKarafActivators(ClassLoader classLoader) throws
IOException {
Enumeration<URL> urls =
classLoader.getResources("META-INF/MANIFEST.MF");
while (urls != null && urls.hasMoreElements()) {
Added:
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
URL:
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java?rev=1369765&view=auto
==============================================================================
---
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
(added)
+++
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/StartupListener.java
Mon Aug 6 10:03:50 2012
@@ -0,0 +1,72 @@
+package org.apache.karaf.main;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.SynchronousBundleListener;
+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.
+ */
+class StartupListener implements FrameworkListener, SynchronousBundleListener {
+ private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED =
"karaf.console.started";
+
+ private final BundleContext context;
+ StartupListener(BundleContext context) {
+ this.context = context;
+ context.addBundleListener(this);
+ context.addFrameworkListener(this);
+ }
+ public synchronized void bundleChanged(BundleEvent bundleEvent) {
+ Bundle[] bundles = context.getBundles();
+ int numActive = 0;
+ int numBundles = bundles.length;
+ for (Bundle bundle : bundles) {
+ if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) {
+ numBundles--;
+ } else if (bundle.getState() == Bundle.ACTIVE) {
+ numActive ++;
+ }
+ }
+ boolean started =
Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED,
"false"));
+ if (!started) {
+ showProgressBar(numActive, numBundles);
+ }
+ }
+ 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();
+ if (startLevel >= defStartLevel) {
+ context.removeBundleListener(this);
+ context.removeFrameworkListener(this);
+ }
+ }
+ }
+ 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(' ');
+ }
+ }
+ sb.append(']');
+ System.out.print(sb.toString());
+ System.out.flush();
+ if (done == total) {
+ System.out.println();
+ }
+ }
+}
\ No newline at end of file
Modified:
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
URL:
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java?rev=1369765&r1=1369764&r2=1369765&view=diff
==============================================================================
---
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
(original)
+++
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Mon Aug 6 10:03:50 2012
@@ -28,7 +28,6 @@ import java.security.KeyPair;
import java.security.PrivilegedExceptionAction;
import java.util.Hashtable;
import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
import javax.security.auth.Subject;
import jline.Terminal;
@@ -40,11 +39,7 @@ import org.apache.sshd.agent.SshAgent;
import org.apache.sshd.agent.local.AgentImpl;
import org.fusesource.jansi.AnsiConsole;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkListener;
import org.osgi.framework.ServiceRegistration;
-import org.osgi.framework.startlevel.FrameworkStartLevel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,10 +47,10 @@ public class ConsoleFactory {
private static final Logger LOGGER =
LoggerFactory.getLogger(ConsoleFactory.class);
- private BundleContext bundleContext;
+ BundleContext bundleContext;
private CommandProcessor commandProcessor;
private TerminalFactory terminalFactory;
- private Console console;
+ Console console;
private boolean start;
private ServiceRegistration registration;
private SshAgent local;
@@ -156,56 +151,7 @@ public class ConsoleFactory {
session.put(".jline.terminal", terminal);
session.put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentId);
- new DelayedStarted(unwrappedIn).start();
- }
-
- class DelayedStarted extends Thread implements FrameworkListener {
- final AtomicBoolean started = new AtomicBoolean(false);
- final InputStream in;
- DelayedStarted(InputStream in) {
- super("Karaf Shell Console Thread");
- this.in = in;
- int defaultStartLevel =
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
- int startLevel =
bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
- if (startLevel >= defaultStartLevel) {
- started.set(true);
- } else {
- bundleContext.addFrameworkListener(this);
- frameworkEvent(new
FrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, bundleContext.getBundle(),
null));
- }
- }
-
- public void run() {
- try {
- while (!started.get()) {
- if (in.available() == 0) {
- Thread.sleep(10);
- }
- while (in.available() > 0) {
- char ch = (char) in.read();
- if (ch == '\r' || ch == '\n') {
- started.set(true);
- break;
- }
- }
- }
- } catch (Throwable t) {
- // Ignore
- }
- System.setProperty("karaf.console.started", "true");
- System.out.println();
- bundleContext.removeFrameworkListener(this);
- console.run();
- }
- public void frameworkEvent(FrameworkEvent event) {
- if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
- int defaultStartLevel =
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
- int startLevel =
bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
- if (startLevel >= defaultStartLevel) {
- started.set(true);
- }
- }
- }
+ new DelayedStarted(this.console, bundleContext, unwrappedIn).start();
}
protected String startAgent(String user) {
Added:
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
URL:
http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java?rev=1369765&view=auto
==============================================================================
---
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
(added)
+++
karaf/branches/karaf-2.3.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/DelayedStarted.java
Mon Aug 6 10:03:50 2012
@@ -0,0 +1,73 @@
+package org.apache.karaf.shell.console.jline;
+
+import java.io.InputStream;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.startlevel.FrameworkStartLevel;
+
+/**
+ * Delay the start of the console until the desired start level is reached or
enter is pressed
+ */
+class DelayedStarted extends Thread implements FrameworkListener {
+ private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED =
"karaf.console.started";
+
+ private final AtomicBoolean started = new AtomicBoolean(false);
+ private final InputStream in;
+ private final Runnable console;
+ private final BundleContext bundleContext;
+
+ DelayedStarted(Runnable console, BundleContext bundleContext, InputStream
in) {
+ super("Karaf Shell Console Thread");
+ this.console = console;
+ this.bundleContext = bundleContext;
+ this.in = in;
+ int defaultStartLevel =
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+ int startLevel =
bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
+ if (startLevel >= defaultStartLevel) {
+ started.set(true);
+ } else {
+ bundleContext.addFrameworkListener(this);
+ frameworkEvent(new
FrameworkEvent(FrameworkEvent.STARTLEVEL_CHANGED, bundleContext.getBundle(),
null));
+ }
+ }
+
+ public void run() {
+ try {
+ while (!started.get()) {
+ if (in.available() == 0) {
+ Thread.sleep(10);
+ }
+ while (in.available() > 0) {
+ char ch = (char) in.read();
+ if (ch == '\r' || ch == '\n') {
+ started.set(true);
+ break;
+ }
+ }
+ }
+ } catch (Throwable t) {
+ // Ignore
+ }
+
+ // 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();
+ }
+
+ public void frameworkEvent(FrameworkEvent event) {
+ if (event.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
+ int defaultStartLevel =
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+ int startLevel =
this.bundleContext.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
+ if (startLevel >= defaultStartLevel) {
+ started.set(true);
+ }
+ }
+ }
+}