Pierre De Rop created FELIX-3661:
------------------------------------

             Summary: Scr sometimes does not invoke Reference bind method
                 Key: FELIX-3661
                 URL: https://issues.apache.org/jira/browse/FELIX-3661
             Project: Felix
          Issue Type: Bug
          Components: Declarative Services (SCR)
            Reporter: Pierre De Rop


With scr from trunk: sometimes, a satisfied Reference bind method is not 
invoked.
I'm not sure, but this might be related to the FELIX-3659 issue and/or when 
Reference types are org.osgi.service.ComponentFactory types.

The use case is the following:

- I have a DS component (name="agent"), which depends on the CompositeFactory 
service (ref is dynamic, optional, cardinality=0..N).
- the "agent" component is started (at this point), the CompositeFactory is not 
yet available
- next, the implementation bundle for the CompositeFactory service starts and 
registers the service, using bundleContext.registerService.
- but the "agent" component is not invoked in its 
bindCompositeFactory(CompositeFactory) method.

I have attached a logfile which illustrates the problem.

1) Line 8491: the '"agent" component is being created, and some bind method are 
successfully invoked, except the "bindCompositeFactory" method (but this is 
normal since the service is optional, and not yet available):

2012-09-11 23:09:21,147 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[agent] For dependency loggerRepository, optional: false; to bind: 
{[org.apache.log4j.spi.LoggerRepository]=org.apache.felix.scr.impl.manager.AbstractComponentManager$RefPair@1b7a875}
2012-09-11 23:09:21,147 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[agent] invoking bind: bindLoggerRepository
2012-09-11 23:09:21,147 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[agent] For dependency compositeFactory, optional: true; to bind: {}

(here the bind for loggerRepository is invoked, but not for compositeFactory 
... normal behavior for now.

2) at line 8644, the CompositeFactory service is being registered, but we see 
the "component not yet created, assuming bind method call succeeded" log and 
the bindCompositeFactory method on the "agent" component is not invoked. 

However, another 
"com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand" DS 
component is succesfully bound with the CompositeFactory, but this component 
depends on the CompositeService, using a ServiceReference type, instead of the 
actual CompositeFactory type, in the bind method signature ...

2012-09-11 23:09:21,222 ProxyAppReporter-FastCacheListener WARN  
com.alcatel_lucent.as.service.composite.impl.CompositeFactoryImpl  - 
Registering CompositeFactory ...
2012-09-11 23:09:21,222 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[agent] Dependency Manager: Adding Service 
com.alcatel_lucent.as.service.composite.CompositeFactory/565
2012-09-11 23:09:21,222 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[agent] DependencyManager : component not yet created, assuming bind method 
call succeeded
2012-09-11 23:09:21,223 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.GogoCompositeCommand] 
Dependency Manager: Adding Service 
com.alcatel_lucent.as.service.composite.CompositeFactory/565
2012-09-11 23:09:21,223 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.GogoCompositeCommand] 
DependencyManager : component not yet created, assuming bind method call 
succeeded
2012-09-11 23:09:21,223 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand] 
Dependency Manager: Adding Service 
com.alcatel_lucent.as.service.composite.CompositeFactory/565
2012-09-11 23:09:21,223 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand] 
getting bind: bindCompositeFactory
2012-09-11 23:09:21,224 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand] 
Locating method bindCompositeFactory in class 
com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand
2012-09-11 23:09:21,224 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand] 
doFindMethod: Looking for method 
com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand.bindCompositeFactory
2012-09-11 23:09:21,224 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand] 
doFindMethod: Found Method public void 
com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand.bindCompositeFactory(org.osgi.framework.ServiceReference)
2012-09-11 23:09:21,224 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand] 
Found bind method: public void 
com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand.bindCompositeFactory(org.osgi.framework.ServiceReference)
2012-09-11 23:09:21,224 ProxyAppReporter-FastCacheListener DEBUG osgi  - 
[com.alcatel_lucent.as.service.composite.impl.shell.FelixCompositeCommand] 
invoking bind: bindCompositeFactory
2012-09-11 23:09:21,224 ProxyAppReporter-FastCacheListener INFO  
osgi.event.service  - Service registered by bundle 
com.alcatel_lucent.as.service.composite.impl(1.1100.01)
 
{objectClass=[com.alcatel_lucent.as.service.composite.CompositeFactory],service.id=565}

Hope that the log file will be enough to understand the issue ?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to