You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/10/23 13:45:56 UTC
svn commit: r707354 - in
/servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator:
Activator.java OsgiLocator.java
Author: gnodet
Date: Thu Oct 23 04:45:55 2008
New Revision: 707354
URL: http://svn.apache.org/viewvc?rev=707354&view=rev
Log:
Add debug logging to the specs' osgi stuff
Modified:
servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/Activator.java
servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java
Modified: servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/Activator.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/Activator.java?rev=707354&r1=707353&r2=707354&view=diff
==============================================================================
--- servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/Activator.java (original)
+++ servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/Activator.java Thu Oct 23 04:45:55 2008
@@ -34,33 +34,60 @@
public class Activator implements BundleActivator, SynchronousBundleListener {
- private BundleContext bundleContext;
+ private static boolean debug = false;
+
private ConcurrentMap<Long, Map<String, Callable<Class>>> factories = new ConcurrentHashMap<Long, Map<String, Callable<Class>>>();
+ private BundleContext bundleContext;
+
+ static {
+ try {
+ String prop = System.getProperty("org.apache.servicemix.specs.debug");
+ debug = prop != null && !"false".equals(prop);
+ } catch (Throwable t) { }
+ }
+
+ /**
+ * <p>Output debugging messages.</p>
+ *
+ * @param msg <code>String</code> to print to <code>stderr</code>.
+ */
+ private void debugPrintln(String msg) {
+ if (debug) {
+ System.err.println("Spec(" + bundleContext.getBundle().getBundleId() + "): " + msg);
+ }
+ }
+
public synchronized void start(BundleContext bundleContext) throws Exception {
this.bundleContext = bundleContext;
+ debugPrintln("activating");
bundleContext.addBundleListener(this);
for (Bundle bundle : bundleContext.getBundles()) {
register(bundle);
}
+ debugPrintln("activated");
}
public synchronized void stop(BundleContext bundleContext) throws Exception {
+ debugPrintln("deactivating");
+ bundleContext.removeBundleListener(this);
while (!factories.isEmpty()) {
unregister(factories.keySet().iterator().next());
}
+ debugPrintln("deactivated");
this.bundleContext = null;
}
public void bundleChanged(BundleEvent event) {
if (event.getType() == BundleEvent.RESOLVED) {
register(event.getBundle());
- } else if (event.getType() == BundleEvent.UNRESOLVED) {
+ } else if (event.getType() == BundleEvent.UNRESOLVED || event.getType() == BundleEvent.UNINSTALLED) {
unregister(event.getBundle().getBundleId());
}
}
protected void register(final Bundle bundle) {
+ debugPrintln("checking bundle " + bundle.getBundleId());
Map<String, Callable<Class>> map = factories.get(bundle.getBundleId());
Enumeration e = bundle.findEntries("META-INF/services/", "*", false);
if (e != null) {
@@ -77,16 +104,27 @@
}
map.put(factoryId, new Callable<Class>() {
public Class call() throws Exception {
- BufferedReader br = new BufferedReader(new InputStreamReader(u.openStream(), "UTF-8"));
- String factoryClassName = br.readLine();
- br.close();
- return bundle.loadClass(factoryClassName);
+ try {
+ debugPrintln("creating factory for key: " + factoryId);
+ BufferedReader br = new BufferedReader(new InputStreamReader(u.openStream(), "UTF-8"));
+ String factoryClassName = br.readLine();
+ br.close();
+ debugPrintln("factory implementation: " + factoryClassName);
+ return bundle.loadClass(factoryClassName);
+ } catch (Exception e) {
+ debugPrintln("exception caught while creating factory: " + e);
+ throw e;
+ } catch (Error e) {
+ debugPrintln("error caught while creating factory: " + e);
+ throw e;
+ }
}
});
}
}
if (map != null) {
for (Map.Entry<String, Callable<Class>> entry : map.entrySet()) {
+ debugPrintln("registering service for key " + entry.getKey());
OsgiLocator.register(entry.getKey(), entry.getValue());
}
}
@@ -96,6 +134,7 @@
Map<String, Callable<Class>> map = factories.remove(bundleId);
if (map != null) {
for (Map.Entry<String, Callable<Class>> entry : map.entrySet()) {
+ debugPrintln("unregistering service for key " + entry.getKey());
OsgiLocator.unregister(entry.getKey(), entry.getValue());
}
}
Modified: servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java?rev=707354&r1=707353&r2=707354&view=diff
==============================================================================
--- servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java (original)
+++ servicemix/smx4/specs/trunk/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java Thu Oct 23 04:45:55 2008
@@ -26,6 +26,9 @@
private static Map<String, List<Callable<Class>>> factories;
+ private OsgiLocator() {
+ }
+
public static synchronized void unregister(String id, Callable<Class> factory) {
if (factories != null) {
List<Callable<Class>> l = factories.get(id);