killbill-aplcache

osgi: make the killbill ServiceListener more flexible Don't

2/15/2013 7:05:42 PM

Details

diff --git a/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java b/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java
index 51b84d6..79f082b 100644
--- a/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java
+++ b/osgi/src/main/java/com/ning/billing/osgi/KillbillActivator.java
@@ -85,39 +85,32 @@ public class KillbillActivator implements BundleActivator, ServiceListener {
         }
     }
 
-    private <T> boolean listenForServiceType(final ServiceEvent event, Class<T> claz, final OSGIServiceRegistration<T> registation) {
-
-        // Is that for us ?
-        final String[] objectClass = (String[]) event.getServiceReference().getProperty("objectClass");
-        if (objectClass == null || objectClass.length == 0 || !claz.getName().equals(objectClass[0])) {
-            return false;
-        }
-
+    private <T> boolean listenForServiceType(final ServiceEvent event, final Class<T> claz, final OSGIServiceRegistration<T> registration) {
         // Make sure we can retrieve the plugin name
         final ServiceReference serviceReference = event.getServiceReference();
         final String pluginName = (String) serviceReference.getProperty(OSGIPluginProperties.PLUGIN_NAME_PROP);
         if (pluginName == null) {
-            // STEPH logger ?
+            // TODO STEPH logger ?
             return true;
         }
 
         final T theService = (T) context.getService(serviceReference);
-        if (theService == null) {
-            return true;
+        // Is that for us? We look for a subclass here for greater flexibility (e.g. HttpServlet for a Servlet service)
+        if (theService == null || !claz.isAssignableFrom(theService.getClass())) {
+            return false;
         }
 
         switch (event.getType()) {
             case ServiceEvent.REGISTERED:
-                registation.registerService(pluginName, theService);
-
+                registration.registerService(pluginName, theService);
                 break;
             case ServiceEvent.UNREGISTERING:
-                registation.unregisterService(pluginName);
+                registration.unregisterService(pluginName);
                 break;
-
             default:
                 break;
         }
+
         return true;
     }