You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2016/07/04 11:51:45 UTC

svn commit: r1751255 - /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java

Author: cziegeler
Date: Mon Jul  4 11:51:45 2016
New Revision: 1751255

URL: http://svn.apache.org/viewvc?rev=1751255&view=rev
Log:
FELIX-5300 : ServiceComponentRuntime should not throw IllegalStateException

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java?rev=1751255&r1=1751254&r2=1751255&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/ComponentRegistry.java Mon Jul  4 11:51:45 2016
@@ -30,16 +30,16 @@ import java.util.concurrent.ConcurrentHa
 import java.util.concurrent.ConcurrentMap;
 
 import org.apache.felix.scr.impl.helper.ComponentMethods;
+import org.apache.felix.scr.impl.helper.SimpleLogger;
 import org.apache.felix.scr.impl.inject.ComponentMethodsImpl;
+import org.apache.felix.scr.impl.manager.AbstractComponentManager;
 import org.apache.felix.scr.impl.manager.ComponentActivator;
 import org.apache.felix.scr.impl.manager.ComponentHolder;
 import org.apache.felix.scr.impl.manager.ConfigurableComponentHolder;
-import org.apache.felix.scr.impl.manager.RegionConfigurationSupport;
-import org.apache.felix.scr.impl.metadata.TargetedPID;
-import org.apache.felix.scr.impl.helper.SimpleLogger;
-import org.apache.felix.scr.impl.manager.AbstractComponentManager;
 import org.apache.felix.scr.impl.manager.DependencyManager;
+import org.apache.felix.scr.impl.manager.RegionConfigurationSupport;
 import org.apache.felix.scr.impl.metadata.ComponentMetadata;
+import org.apache.felix.scr.impl.metadata.TargetedPID;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
@@ -344,14 +344,21 @@ public class ComponentRegistry
         	ComponentActivator activator = holder.getActivator();
         	if (activator != null)
         	{
-        		Bundle holderBundle = activator.getBundleContext().getBundle();
-        		for (Bundle b: bundles)
-        		{
-        			if (b == holderBundle)
-        			{
-        				holders.add(holder);
-        			}
-        		}
+        	    try
+        	    {
+            		Bundle holderBundle = activator.getBundleContext().getBundle();
+            		for (Bundle b: bundles)
+            		{
+            			if (b == holderBundle)
+            			{
+            				holders.add(holder);
+            			}
+            		}
+        	    }
+        	    catch ( IllegalStateException ise)
+        	    {
+        	        // ignore inactive bundles
+        	    }
         	}
         }
         return holders;
@@ -478,7 +485,7 @@ public class ComponentRegistry
         // fall back: bundle is not considered active
         return false;
     }
-    
+
     private final ThreadLocal<List<ServiceReference<?>>> circularInfos = new ThreadLocal<List<ServiceReference<?>>> ()
     {
 
@@ -487,9 +494,9 @@ public class ComponentRegistry
         {
             return new ArrayList<ServiceReference<?>>();
         }
-    }; 
-    
-    
+    };
+
+
     /**
      * Track getService calls by service reference.
      * @param serviceReference
@@ -513,14 +520,14 @@ public class ComponentRegistry
         info.add(serviceReference);
         return false;
     }
-    
 
-    private class Info 
+
+    private class Info
     {
-        
+
         private final List<ServiceReference<?>> info;
-        
-        
+
+
         public Info(List<ServiceReference<?>> info)
         {
             this.info = info;
@@ -545,9 +552,9 @@ public class ComponentRegistry
             }
             return sb.toString();
         }
-        
+
     }
-        
+
     public <T> void leaveCreate(final ServiceReference<T> serviceReference)
     {
         List<ServiceReference<?>> info = circularInfos.get();
@@ -560,9 +567,9 @@ public class ComponentRegistry
             else
             {
                 info.remove(serviceReference);
-            } 
+            }
         }
-        
+
     }
 
     /**
@@ -577,7 +584,7 @@ public class ComponentRegistry
         final List<Entry<?, ?>> dependencyManagers = m_missingDependencies.remove( serviceReference );
         if ( dependencyManagers != null )
         {
-            
+
             Runnable runnable = new Runnable()
             {
 
@@ -653,19 +660,20 @@ public class ComponentRegistry
         {
             return trackingCount;
         }
-        
+
         @Override
-        public String toString() 
+        public String toString()
         {
             return dm.toString() + "@" + trackingCount;
         }
     }
-    
+
     private final ConcurrentMap<Long, RegionConfigurationSupport> bundleToRcsMap = new ConcurrentHashMap<Long, RegionConfigurationSupport>();
 
     public RegionConfigurationSupport registerRegionConfigurationSupport(
             ServiceReference<ConfigurationAdmin> reference) {
         RegionConfigurationSupport trialRcs = new RegionConfigurationSupport(m_logger, reference) {
+            @Override
             protected Collection<ComponentHolder<?>> getComponentHolders(TargetedPID pid)
             {
                 return ComponentRegistry.this.getComponentHoldersByPid(pid);
@@ -682,7 +690,7 @@ public class ComponentRegistry
 		while (true)
 		{
 			existing = bundleToRcsMap.putIfAbsent(bundleId, trialRcs);
-			if (existing == null) 
+			if (existing == null)
 			{
 				trialRcs.start();
 				return trialRcs;
@@ -711,6 +719,6 @@ public class ComponentRegistry
 		{
 			bundleToRcsMap.remove(rcs.getBundleId());
 		}
-		
+
 	}
 }