FELIX-1810: improvements to Main startup class, patch provided by Jarek Gawor
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@831274 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java b/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
index 6b72775..fa12d90 100644
--- a/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
+++ b/karaf/main/src/main/java/org/apache/felix/karaf/main/Main.java
@@ -187,36 +187,33 @@
storage.mkdirs();
configProps.setProperty(Constants.FRAMEWORK_STORAGE, storage.getAbsolutePath());
}
+
+ defaultStartLevel = Integer.parseInt(configProps.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+ lockStartLevel = Integer.parseInt(configProps.getProperty(PROPERTY_LOCK_LEVEL, Integer.toString(lockStartLevel)));
+ lockDelay = Integer.parseInt(configProps.getProperty(PROPERTY_LOCK_DELAY, Integer.toString(lockDelay)));
+ configProps.setProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, Integer.toString(lockStartLevel));
+ // Start up the OSGI framework
- try {
- defaultStartLevel = Integer.parseInt(configProps.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
- lockStartLevel = Integer.parseInt(configProps.getProperty(PROPERTY_LOCK_LEVEL, Integer.toString(lockStartLevel)));
- lockDelay = Integer.parseInt(configProps.getProperty(PROPERTY_LOCK_DELAY, Integer.toString(lockDelay)));
- configProps.setProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL, Integer.toString(lockStartLevel));
- // Start up the OSGI framework
-
- InputStream is = getClass().getResourceAsStream("/META-INF/services/" + FrameworkFactory.class.getName());
- BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- String factoryClass = br.readLine();
- br.close();
- FrameworkFactory factory = (FrameworkFactory) getClass().getClassLoader().loadClass(factoryClass).newInstance();
- framework = factory.newFramework(new StringMap(configProps, false));
- framework.start();
- processAutoProperties(framework.getBundleContext());
- // Start lock monitor
- new Thread() {
- public void run() {
- lock(configProps);
- }
- }.start();
- }
- catch (Exception ex) {
- setExitCode(-1);
- throw new Exception("Could not create framework", ex);
- }
+ InputStream is = getClass().getResourceAsStream("/META-INF/services/" + FrameworkFactory.class.getName());
+ BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+ String factoryClass = br.readLine();
+ br.close();
+ FrameworkFactory factory = (FrameworkFactory) getClass().getClassLoader().loadClass(factoryClass).newInstance();
+ framework = factory.newFramework(new StringMap(configProps, false));
+ framework.start();
+ processAutoProperties(framework.getBundleContext());
+ // Start lock monitor
+ new Thread() {
+ public void run() {
+ lock(configProps);
+ }
+ }.start();
}
public void destroy(boolean await) throws Exception {
+ if (framework == null) {
+ return;
+ }
try {
if (await) {
framework.waitForStop(0);
@@ -311,9 +308,15 @@
final Main main = new Main(args);
try {
main.launch();
+ } catch (Throwable ex) {
+ main.setExitCode(-1);
+ System.err.println("Could not create framework: " + ex);
+ ex.printStackTrace();
+ }
+ try {
main.destroy(true);
- }
- catch (Throwable ex) {
+ } catch (Throwable ex) {
+ main.setExitCode(-2);
System.err.println("Error occured shutting down framework: " + ex);
ex.printStackTrace();
} finally {
@@ -362,7 +365,7 @@
return;
}
}
- throw new Exception("Instance " + args[1] + " not found");
+ throw new Exception("Instance " + instanceName + " not found");
}
}
} catch (Exception e) {
@@ -796,8 +799,7 @@
String key = (String) e.nextElement();
if (key.startsWith("felix.") ||
key.startsWith("karaf.") ||
- key.equals("org.osgi.framework.system.packages") ||
- key.equals("org.osgi.framework.bootdelegation")) {
+ key.startsWith("org.osgi.framework.")) {
configProps.setProperty(key, System.getProperty(key));
}
}
@@ -1063,6 +1065,10 @@
this.exitCode = exitCode;
}
+ public Framework getFramework() {
+ return framework;
+ }
+
public void lock(Properties props) {
try {
if (Boolean.parseBoolean(props.getProperty(PROPERTY_USE_LOCK, "true"))) {