geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ga...@apache.org
Subject svn commit: r797533 - /geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintExtender.java
Date Fri, 24 Jul 2009 15:33:51 GMT
Author: gawor
Date: Fri Jul 24 15:33:49 2009
New Revision: 797533

URL: http://svn.apache.org/viewvc?rev=797533&view=rev
Log:
improved destroy algorithm

Modified:
    geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintExtender.java

Modified: geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintExtender.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintExtender.java?rev=797533&r1=797532&r2=797533&view=diff
==============================================================================
--- geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintExtender.java
(original)
+++ geronimo/sandbox/blueprint/blueprint-core/src/main/java/org/apache/geronimo/blueprint/container/BlueprintExtender.java
Fri Jul 24 15:33:49 2009
@@ -20,6 +20,8 @@
 
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
@@ -92,8 +94,9 @@
         context.removeBundleListener(this);
         // Orderly shutdown of containers
         while (!containers.isEmpty()) {
-            Bundle bundle = getBundleToDestroy();
-            destroyContext(bundle);
+            for (Bundle bundle : getBundlesToDestroy()) {
+                destroyContext(bundle);
+            }
         }
         this.eventDispatcher.destroy();
         this.handlers.destroy();
@@ -101,8 +104,8 @@
         LOGGER.debug("Blueprint extender stopped");
     }
 
-    private Bundle getBundleToDestroy() {
-        Bundle bundleToDestroy = null;
+    private List<Bundle> getBundlesToDestroy() {
+        List<Bundle> bundlesToDestroy = new ArrayList<Bundle>();
         for (Bundle bundle : containers.keySet()) {
             ServiceReference[] references = bundle.getRegisteredServices();
             int usage = 0;
@@ -116,29 +119,30 @@
             }
             LOGGER.debug("Usage for bundle {} is {}", bundle, usage);
             if (usage == 0) {
-                if (bundleToDestroy == null) {
-                    LOGGER.debug("Currently selecting bundle {} for destroy (first bundle
with no usage)", bundle);
-                    bundleToDestroy = bundle;
-                } else if (bundle.getLastModified() > bundleToDestroy.getLastModified())
{
-                    LOGGER.debug("Currently selecting bundle {} for destroy (it has been
installed more recently)", bundle);
-                    bundleToDestroy = bundle;
-                }
+                LOGGER.debug("Currently selecting bundle {} for destroy", bundle);
+                bundlesToDestroy.add(bundle);
             }
         }
-        if (bundleToDestroy == null) {
+        if (!bundlesToDestroy.isEmpty()) {
+            Collections.sort(bundlesToDestroy, new Comparator<Bundle>() {
+                public int compare(Bundle b1, Bundle b2) {
+                    return (int) (b2.getLastModified() - b1.getLastModified());
+                }
+            });
+        } else {
             ServiceReference ref = null;
             for (Bundle bundle : containers.keySet()) {
                 ServiceReference[] references = bundle.getRegisteredServices();
                 for (ServiceReference reference : references) {
-                    if (ref == null || reference.compareTo(ref) > 0) {
+                    if (ref == null || reference.compareTo(ref) < 0) {
                         LOGGER.debug("Currently selecting bundle {} for destroy (with reference
{})", bundle, reference);
                         ref = reference;
                     }
                 }
             }
-            bundleToDestroy = ref.getBundle();
+            bundlesToDestroy.add(ref.getBundle());
         }
-        return bundleToDestroy;
+        return bundlesToDestroy;
     }
 
     public void bundleChanged(BundleEvent event) {



Mime
View raw message