You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gn...@apache.org on 2009/04/21 19:43:06 UTC

svn commit: r767238 - in /geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint: Activator.java context/DefaultModuleContextEventSender.java

Author: gnodet
Date: Tue Apr 21 17:43:06 2009
New Revision: 767238

URL: http://svn.apache.org/viewvc?rev=767238&view=rev
Log:
Support for ModuleContextListener, remove a TODO

Modified:
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/Activator.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/DefaultModuleContextEventSender.java

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/Activator.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/Activator.java?rev=767238&r1=767237&r2=767238&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/Activator.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/Activator.java Tue Apr 21 17:43:06 2009
@@ -36,7 +36,6 @@
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleListener;
 import org.osgi.framework.SynchronousBundleListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -81,7 +80,6 @@
         for (Bundle bundle : bundles) {
             destroyContext(bundle);
         }
-        // TODO: destroy all contexts
         context.removeBundleListener(this);
         this.sender.destroy();
         this.handlers.destroy();

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/DefaultModuleContextEventSender.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/DefaultModuleContextEventSender.java?rev=767238&r1=767237&r2=767238&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/DefaultModuleContextEventSender.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/context/DefaultModuleContextEventSender.java Tue Apr 21 17:43:06 2009
@@ -31,6 +31,7 @@
 import org.osgi.service.event.EventConstants;
 import org.osgi.service.blueprint.context.ModuleContextEventConstants;
 import org.osgi.service.blueprint.context.ModuleContext;
+import org.osgi.service.blueprint.context.ModuleContextListener;
 import org.apache.geronimo.blueprint.BlueprintConstants;
 import org.apache.geronimo.blueprint.ModuleContextEventSender;
 
@@ -44,11 +45,14 @@
 
     private final Bundle extenderBundle;
     private final ServiceTracker eventAdminServiceTracker;
+    private final ServiceTracker contextListenerTracker;
 
     public DefaultModuleContextEventSender(BundleContext bundleContext) {
         this.extenderBundle = bundleContext.getBundle();
         this.eventAdminServiceTracker = new ServiceTracker(bundleContext, EventAdmin.class.getName(), null);
         this.eventAdminServiceTracker.open();
+        this.contextListenerTracker = new ServiceTracker(bundleContext, ModuleContextListener.class.getName(), null);
+        this.contextListenerTracker.open();
     }
 
     public void sendCreating(ModuleContext moduleContext) {
@@ -80,6 +84,22 @@
     }
 
     public void sendEvent(ModuleContext moduleContext, String topic, Throwable cause, String[] serviceObjectClass, String serviceFilter) {
+
+        if (topic == TOPIC_CREATED || topic == TOPIC_FAILURE) {
+            Object[] listeners = contextListenerTracker.getServices();
+            for (Object listener : listeners) {
+                try {
+                    if (topic == TOPIC_CREATED) {
+                        ((ModuleContextListener) listener).contextCreated(moduleContext.getBundleContext().getBundle());
+                    } else if (topic == TOPIC_FAILURE) {
+                        ((ModuleContextListener) listener).contextCreationFailed(moduleContext.getBundleContext().getBundle(), cause);
+                    }
+                } catch (Throwable t) {
+                    t.printStackTrace(); // TODO: log
+                }
+            }
+        }
+
         EventAdmin eventAdmin = getEventAdmin();
         if (eventAdmin == null) {
             return;
@@ -127,5 +147,6 @@
 
     public void destroy() {
         this.eventAdminServiceTracker.close();
+        this.contextListenerTracker.close();
     }
 }