Author: norman
Date: Mon Jul  4 10:56:40 2011
New Revision: 1142618

URL: http://svn.apache.org/viewvc?rev=1142618&view=rev
Log:
Make sure we keep track of all ServiceReferences. See JAMES-835

Modified:
    
james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/osgi/AbstractServiceTracker.java

Modified: 
james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/osgi/AbstractServiceTracker.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/osgi/AbstractServiceTracker.java?rev=1142618&r1=1142617&r2=1142618&view=diff
==============================================================================
--- 
james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/osgi/AbstractServiceTracker.java
 (original)
+++ 
james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/osgi/AbstractServiceTracker.java
 Mon Jul  4 10:56:40 2011
@@ -19,7 +19,9 @@
 package org.apache.james.container.spring.osgi;
 
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -53,7 +55,7 @@ public abstract class AbstractServiceTra
     private BundleContext context;
     private BeanFactory factory;
     private String configuredClass;
-    private ServiceRegistration reg;
+    private final List<ServiceRegistration> reg = new 
ArrayList<ServiceRegistration>();
 
     @Override
     public void setBeanFactory(BeanFactory factory) throws BeansException {
@@ -105,18 +107,24 @@ public abstract class AbstractServiceTra
                         registry.registerBeanDefinition(getComponentName(), 
def);
 
                         // register the bean as service in the BundleContext
-                        reg = 
b.getBundleContext().registerService(clazz.getName(), 
factory.getBean(getComponentName(), clazz), p);
+                        
reg.add(b.getBundleContext().registerService(clazz.getName(), 
factory.getBean(getComponentName(), clazz), p));
                     }
                 }
             }
             break;
         case BundleEvent.STOPPED:
             if (reg != null) {
-
-                // Check if we need to unregister the service
-                if (b.equals(reg.getReference().getBundle())) {
-                    reg.unregister();
+                List<ServiceRegistration> removed = new 
ArrayList<ServiceRegistration>();
+                for (int i = 0; i < reg.size(); i++) {
+                    ServiceRegistration sr = reg.get(i);
+                    // Check if we need to unregister the service
+                    if (b.equals(sr.getReference().getBundle())) {
+                        sr.unregister();
+                        removed.add(sr);
+                    } 
                 }
+                reg.removeAll(removed);
+               
             }
             break;
         default:
@@ -132,7 +140,9 @@ public abstract class AbstractServiceTra
 
         // Get the configuration for the class
         configuredClass = config.getString("[@class]");
-        context.addBundleListener(this);
+        if (context != null) {
+            context.addBundleListener(this);
+        }
     }
 
     @Override



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to