You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2012/04/06 09:55:54 UTC
svn commit: r1310212 -
/karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java
Author: gnodet
Date: Fri Apr 6 07:55:53 2012
New Revision: 1310212
URL: http://svn.apache.org/viewvc?rev=1310212&view=rev
Log:
[KARAF-1023] Add karaf activators for jars in the lib folder
Conflicts:
main/src/main/java/org/apache/karaf/main/Main.java
Modified:
karaf/branches/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.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=1310212&r1=1310211&r2=1310212&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 Fri Apr 6 07:55:53 2012
@@ -39,12 +39,14 @@ import java.util.Properties;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.TreeMap;
+import java.util.jar.Manifest;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
@@ -182,6 +184,10 @@ public class Main {
public static final String OPTIONALS_PROPERTY = "${optionals}"; // optionals includes
+ public static final String KARAF_ACTIVATOR = "Karaf-Activator";
+
+ public static final String SECURITY_PROVIDERS = "org.apache.karaf.security.providers";
+
Logger LOG = Logger.getLogger(this.getClass().getName());
private File karafHome;
@@ -199,6 +205,8 @@ public class Main {
private int shutdownTimeout = 5 * 60 * 1000;
private boolean exiting = false;
private ShutdownCallback shutdownCallback;
+ private List<BundleActivator> karafActivators = new ArrayList<BundleActivator>();
+
public Main(String[] args) {
this.args = args;
@@ -271,6 +279,8 @@ public class Main {
loadStartupProperties(configProps);
processAutoProperties(framework.getBundleContext());
framework.start();
+ // Start custom activators
+ startKarafActivators(classLoader);
// Start lock monitor
new Thread() {
public void run() {
@@ -279,6 +289,46 @@ public class Main {
}.start();
}
+ private void startKarafActivators(ClassLoader classLoader) throws IOException {
+ Enumeration<URL> urls = classLoader.getResources("META-INF/MANIFEST.MF");
+ while (urls != null && urls.hasMoreElements()) {
+ URL url = urls.nextElement();
+ String className = null;
+ InputStream is = url.openStream();
+ try {
+ Manifest mf = new Manifest(is);
+ className = mf.getMainAttributes().getValue(KARAF_ACTIVATOR);
+ if (className != null) {
+ BundleActivator activator = (BundleActivator) classLoader.loadClass(className).newInstance();
+ activator.start(framework.getBundleContext());
+ karafActivators.add(activator);
+ }
+ } catch (Throwable e) {
+ if (className != null) {
+ System.err.println("Error starting karaf activator " + className + ": " + e.getMessage());
+ LOG.log(Level.WARNING, "Error starting karaf activator " + className + " from url " + url, e);
+ }
+ } finally {
+ if (is != null) {
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+ }
+ }
+
+ private void stopKarafActivators() {
+ for (BundleActivator activator : karafActivators) {
+ try {
+ activator.stop(framework.getBundleContext());
+ } catch (Throwable e) {
+ LOG.log(Level.WARNING, "Error stopping karaf activator " + activator.getClass().getName(), e);
+ }
+ }
+ }
+
public void awaitShutdown() throws Exception {
if (framework == null) {
return;
@@ -328,6 +378,7 @@ public class Main {
}
FrameworkEvent event = framework.waitForStop(step);
if (event.getType() != FrameworkEvent.WAIT_TIMEDOUT) {
+ stopKarafActivators();
return true;
}
}
@@ -447,7 +498,7 @@ public class Main {
}
} catch (Throwable ex) {
main.setExitCode(-2);
- System.err.println("Error occured shutting down framework: " + ex);
+ System.err.println("Error occurred shutting down framework: " + ex);
ex.printStackTrace();
} finally {
if (!restart) {
@@ -458,7 +509,7 @@ public class Main {
}
private static void processSecurityProperties(Properties m_configProps) {
- String prop = m_configProps.getProperty("org.apache.karaf.security.providers");
+ String prop = m_configProps.getProperty(SECURITY_PROVIDERS);
if (prop != null) {
String[] providers = prop.split(",");
for (String provider : providers) {