You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dj...@apache.org on 2012/10/13 18:15:20 UTC

svn commit: r1397887 - in /felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager: AbstractComponentManager.java DependencyManager.java

Author: djencks
Date: Sat Oct 13 16:15:20 2012
New Revision: 1397887

URL: http://svn.apache.org/viewvc?rev=1397887&view=rev
Log:
FELIX-3680 don't recalculate size when not needed, don't set target filter from metadata when config required

Modified:
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
    felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java?rev=1397887&r1=1397886&r2=1397887&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java Sat Oct 13 16:15:20 2012
@@ -1049,11 +1049,14 @@ public abstract class AbstractComponentM
 
     private void enableDependencyManagers() throws InvalidSyntaxException
     {
-        Iterator it = getDependencyManagers();
-        while ( it.hasNext() )
+        if ( !m_componentMetadata.isConfigurationRequired() )
         {
-            DependencyManager dm = (DependencyManager) it.next();
-            dm.enable();
+            Iterator it = getDependencyManagers();
+            while ( it.hasNext() )
+            {
+                DependencyManager dm = (DependencyManager) it.next();
+                dm.enable();
+            }
         }
     }
 

Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java?rev=1397887&r1=1397886&r2=1397887&view=diff
==============================================================================
--- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java (original)
+++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/manager/DependencyManager.java Sat Oct 13 16:15:20 2012
@@ -79,6 +79,8 @@ public class DependencyManager implement
     private final Collection<ServiceReference> added = new ArrayList<ServiceReference>();
     private final Collection<ServiceReference> removed = new ArrayList<ServiceReference>();
 
+    private boolean registered;
+
 
     /**
      * Constructor that receives several parameters.
@@ -649,8 +651,7 @@ public class DependencyManager implement
      */
     void disable()
     {
-        BundleContext context = m_componentManager.getActivator().getBundleContext();
-        context.removeServiceListener( this );
+        unregisterServiceListener();
 
         m_size.set( 0 );
     }
@@ -1479,36 +1480,40 @@ public class DependencyManager implement
         {
             m_componentManager.log( LogService.LOG_DEBUG, "No change in target property for dependency {0}", new Object[]
                     {m_dependencyMetadata.getName()}, null );
+            if (registered)
+            {
+                return;
+            }
         }
-        else
-        {
-            m_target = target;
+        m_target = target;
 
-            m_componentManager.getActivator().getBundleContext().removeServiceListener( this );
-            //compute the new target filter while we wait for other threads to complete.
-            if ( target != null )
+        if ( registered )
+        {
+            unregisterServiceListener();
+        }
+        //compute the new target filter while we wait for other threads to complete.
+        if ( target != null )
+        {
+            m_componentManager.log( LogService.LOG_DEBUG, "Setting target property for dependency {0} to {1}", new Object[]
+                    {m_dependencyMetadata.getName(), target}, null );
+            try
             {
-                m_componentManager.log( LogService.LOG_DEBUG, "Setting target property for dependency {0} to {1}", new Object[]
-                        {m_dependencyMetadata.getName(), target}, null );
-                try
-                {
-                    m_targetFilter = m_componentManager.getActivator().getBundleContext().createFilter( target );
-                }
-                catch ( InvalidSyntaxException ise )
-                {
-                    m_componentManager.log( LogService.LOG_ERROR, "Invalid syntax in target property for dependency {0} to {1}", new Object[]
-                            {m_dependencyMetadata.getName(), target}, null );
-                    // log
-                    m_targetFilter = null;
-                }
+                m_targetFilter = m_componentManager.getActivator().getBundleContext().createFilter( target );
             }
-            else
+            catch ( InvalidSyntaxException ise )
             {
-                m_componentManager.log( LogService.LOG_DEBUG, "Clearing target property for dependency {0}", new Object[]
-                        {m_dependencyMetadata.getName()}, null );
+                m_componentManager.log( LogService.LOG_ERROR, "Invalid syntax in target property for dependency {0} to {1}", new Object[]
+                        {m_dependencyMetadata.getName(), target}, null );
+                // log
                 m_targetFilter = null;
             }
         }
+        else
+        {
+            m_componentManager.log( LogService.LOG_DEBUG, "Clearing target property for dependency {0}", new Object[]
+                    {m_dependencyMetadata.getName()}, null );
+            m_targetFilter = null;
+        }
         //wait for events to finish processing
         synchronized ( added )
         {
@@ -1553,8 +1558,7 @@ public class DependencyManager implement
         }
         boolean active = m_componentManager.getDependencyMap() != null;
         // register the service listener
-        String filterString = "(" + Constants.OBJECTCLASS + "=" + m_dependencyMetadata.getInterface() + ")";
-        m_componentManager.getActivator().getBundleContext().addServiceListener( this, filterString );
+        registerServiceListener();
         Collection<ServiceReference> toAdd = new ArrayList<ServiceReference>();
 
         synchronized ( enableLock )
@@ -1601,6 +1605,19 @@ public class DependencyManager implement
 
     }
 
+    private void registerServiceListener() throws InvalidSyntaxException
+    {
+        String filterString = "(" + Constants.OBJECTCLASS + "=" + m_dependencyMetadata.getInterface() + ")";
+        m_componentManager.getActivator().getBundleContext().addServiceListener( this, filterString );
+        registered = true;
+    }
+
+    private void unregisterServiceListener()
+    {
+        m_componentManager.getActivator().getBundleContext().removeServiceListener( this );
+        registered = false;
+    }
+
 
     /**
      * Returns the target filter of this dependency as a string or