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/07/03 13:50:07 UTC

svn commit: r790872 - in /geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container: AbstractServiceReferenceRecipe.java BlueprintContainerImpl.java ReferenceListRecipe.java ReferenceRecipe.java

Author: gnodet
Date: Fri Jul  3 11:50:07 2009
New Revision: 790872

URL: http://svn.apache.org/viewvc?rev=790872&view=rev
Log:
Fix references shutdown

Modified:
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintContainerImpl.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java?rev=790872&r1=790871&r2=790872&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/AbstractServiceReferenceRecipe.java Fri Jul  3 11:50:07 2009
@@ -143,6 +143,7 @@
         if (started.compareAndSet(true, false)) {
             synchronized (references) {
                 blueprintContainer.getBundleContext().removeServiceListener(this);
+                doStop();
                 for (Iterator<ServiceReference> it = references.iterator(); it.hasNext();) {
                     ServiceReference ref = it.next();
                     it.remove();
@@ -153,6 +154,9 @@
         }
     }
 
+    protected void doStop() {
+    }
+
     protected boolean isStarted() {
         return started.get();
     }

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintContainerImpl.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintContainerImpl.java?rev=790872&r1=790871&r2=790872&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintContainerImpl.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintContainerImpl.java Fri Jul  3 11:50:07 2009
@@ -430,14 +430,26 @@
     private void untrackServiceReferences() {
         Map<String, List<SatisfiableRecipe>> dependencies = getSatisfiableDependenciesMap();
         if (dependencies != null) {
-            Set<String> satisfiables = new HashSet<String>();
+            Set<String> stopped = new HashSet<String>();
             for (List<SatisfiableRecipe> recipes : dependencies.values()) {
                 for (SatisfiableRecipe satisfiable : recipes) {
-                    if (satisfiables.add(satisfiable.getName())) {
-                        satisfiable.stop();
+                    untrackServiceReference(satisfiable, stopped, dependencies);
+                }
+            }
+        }
+    }
+
+    private void untrackServiceReference(SatisfiableRecipe recipe, Set<String> stopped, Map<String, List<SatisfiableRecipe>> dependencies) {
+        if (stopped.add(recipe.getName())) {
+            for (Map.Entry<String, List<SatisfiableRecipe>> entry : dependencies.entrySet()) {
+                if (entry.getValue().contains(recipe)) {
+                    Recipe r = getRepository().getRecipe(entry.getKey());
+                    if (r instanceof SatisfiableRecipe) {
+                        untrackServiceReference((SatisfiableRecipe) r, stopped, dependencies);
                     }
                 }
             }
+            recipe.stop();
         }
     }
 

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java?rev=790872&r1=790871&r2=790872&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceListRecipe.java Fri Jul  3 11:50:07 2009
@@ -90,16 +90,6 @@
         }
     }
 
-    public void stop() {
-        super.stop();
-        if (storage != null) {
-            List<ServiceDispatcher> dispatchers = new ArrayList<ServiceDispatcher>(storage);
-            for (ServiceDispatcher dispatcher : dispatchers) {
-                untrack(dispatcher.reference);
-            }
-        }
-    }
-
     protected void retrack() {
         List<ServiceReference> refs = getServiceReferences();
         if (refs != null) {

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java?rev=790872&r1=790871&r2=790872&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java (original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/ReferenceRecipe.java Fri Jul  3 11:50:07 2009
@@ -94,9 +94,7 @@
         }
     }
 
-    @Override
-    public void stop() {
-        super.stop();
+    protected void doStop() {
         synchronized (monitor) {
             unbind();
             monitor.notifyAll();
@@ -133,6 +131,7 @@
     }
 
     private void bind(ServiceReference ref) {
+        LOGGER.debug("Binding reference {} to {}", getName(), ref);
         synchronized (monitor) {
             if (trackedServiceReference != null) {
                 blueprintContainer.getBundleContext().ungetService(trackedServiceReference);
@@ -150,6 +149,7 @@
     }
 
     private void unbind() {
+        LOGGER.debug("Unbinding reference {}", getName());
         synchronized (monitor) {
             if (trackedServiceReference != null) {
                 if (listeners != null) {