You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ch...@apache.org on 2007/12/05 18:53:07 UTC
svn commit: r601450 -
/servicemix/branches/servicemix-4.0/runtime/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/spring/GShell.java
Author: chirino
Date: Wed Dec 5 09:53:06 2007
New Revision: 601450
URL: http://svn.apache.org/viewvc?rev=601450&view=rev
Log:
- Better Exit Support
- We now try to wait for the framework to initialize before starting up the shell. This is still having some problems
Modified:
servicemix/branches/servicemix-4.0/runtime/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/spring/GShell.java
Modified: servicemix/branches/servicemix-4.0/runtime/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/spring/GShell.java
URL: http://svn.apache.org/viewvc/servicemix/branches/servicemix-4.0/runtime/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/spring/GShell.java?rev=601450&r1=601449&r2=601450&view=diff
==============================================================================
--- servicemix/branches/servicemix-4.0/runtime/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/spring/GShell.java (original)
+++ servicemix/branches/servicemix-4.0/runtime/gshell/gshell-core/src/main/java/org/apache/geronimo/gshell/spring/GShell.java Wed Dec 5 09:53:06 2007
@@ -16,13 +16,19 @@
*/
package org.apache.geronimo.gshell.spring;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
import org.apache.geronimo.gshell.DefaultEnvironment;
+import org.apache.geronimo.gshell.ExitNotification;
import org.apache.geronimo.gshell.command.IO;
import org.apache.geronimo.gshell.shell.Environment;
import org.apache.geronimo.gshell.shell.InteractiveShell;
import org.apache.servicemix.main.spi.MainService;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
import org.springframework.osgi.context.BundleContextAware;
/**
@@ -41,7 +47,7 @@
private boolean start;
private MainService mainService;
private BundleContext bundleContext;
-
+ private CountDownLatch frameworkStarted;
public GShell(InteractiveShell shell) {
this.shell = shell;
this.io = new IO(System.in, System.out, System.err);
@@ -53,6 +59,7 @@
}
public void start() {
+ frameworkStarted = new CountDownLatch(1);
if (start) {
thread = new Thread(this);
thread.start();
@@ -61,6 +68,7 @@
public void stop() throws InterruptedException {
if (thread != null) {
+ frameworkStarted.countDown();
thread.interrupt();
thread.join();
thread = null;
@@ -68,7 +76,9 @@
}
public void run() {
- try {
+ try {
+ waitForFrameworkToStart();
+
IOTargetSource.setIO(io);
EnvironmentTargetSource.setEnvironment(env);
@@ -97,6 +107,10 @@
}
}
+ } catch (ExitNotification e) {
+ if( mainService!=null ) {
+ mainService.setExitCode(0);
+ }
} catch (Exception e) {
if( mainService!=null ) {
mainService.setExitCode(-1);
@@ -110,6 +124,30 @@
}
}
}
+
+ /**
+ * Blocks until the framework has finished starting. We do this so that any installed
+ * bundles for commands get fully registered.
+ *
+ * @throws InterruptedException
+ */
+ private void waitForFrameworkToStart() throws InterruptedException {
+ System.out.println("Waiting for system to startup...");
+ getBundleContext().addFrameworkListener(new FrameworkListener(){
+ public void frameworkEvent(FrameworkEvent event) {
+ System.out.println("Got event: "+event.getType());
+ if( event.getType() == FrameworkEvent.STARTED ) {
+ frameworkStarted.countDown();
+ }
+ }
+ });
+
+ if( frameworkStarted.await(5, TimeUnit.SECONDS) ) {
+ System.out.println("System completed startup.");
+ } else {
+ System.out.println("System took too long startup... continuing");
+ }
+ }
public MainService getMainService() {
return mainService;