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