[ https://issues.apache.org/jira/browse/FELIX-4290?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14040982#comment-14040982 ]
David Humeniuk commented on FELIX-4290: --------------------------------------- for clarification, the affects version is 1.6.2 and fix is 1.8.0, currently listing is incorrect > [DS] Issue with factory components with required configuration > -------------------------------------------------------------- > > Key: FELIX-4290 > URL: https://issues.apache.org/jira/browse/FELIX-4290 > Project: Felix > Issue Type: Bug > Components: Declarative Services (SCR) > Affects Versions: scr-1.8.0 > Reporter: Pierre De Rop > Assignee: David Jencks > Attachments: FELIX-4290.patch, FELIX-4290.test.tgz > > > This issue is related to the dev post at > http://www.mail-archive.com/dev@felix.apache.org/msg31209.html > While doing some non regression tests on the scr/trunk (before doing 1.8 > release, I came across some problems with some of our applications using > declarative service. > What am I observing is that many factory components are unsatisfied and our > application is not coming up at all (It was working fine with scr 1.6.2). > Now, I have joined to this issue an integration test which seems to reproduce > the problem, and also a candidate fix. > The ComponentFactoryWithTargetFiltersTest test is using the > integration_test_targetfilter_factory_components.xml and does the following: > 1) it enables the "factory.component.reference.targetfilter" component. > This component has a required configuration, is a factory component, and has > a dynamic reference 1..1 on a SlmpleService instance. > 2) Then we instantiate two SimpleService instances: The first one contains a > "value=service1" service property, and the second one contains the > "value=service2" service property. > 3) at this point, we create the configuration for the component factory. > Notice that at this point, the factory component should transit from > STATE_UNSATISFIED to STATE_FACTORY. but it seems that this is not the case > and we see in logs: > log level: 3 D=14:55:12,837 T=Thread[Configuration Updater,5,main]: > [factory.component.reference.targetfilter(0)] Configuration PID updated for > Component Factory > log level: 3 D=14:55:12,837 T=Thread[Configuration Updater,5,main]: > [factory.component.reference.targetfilter(0)] Current ComponentFactory state=4 > log level: 4 D=14:55:12,837 T=Thread[Configuration Updater,5,main]: > [factory.component.reference.targetfilter(0)] Attempting to activate > unsatisfied component > log level: 4 D=14:55:12,837 T=Thread[Configuration Updater,5,main]: > [factory.component.reference.targetfilter(0)] ActivateInternal > log level: 4 D=14:55:12,837 T=Thread[Configuration Updater,5,main]: > [factory.component.reference.targetfilter(0)] Activating component from state > 4 > log level: 4 D=14:55:12,837 T=Thread[Configuration Updater,5,main]: > [factory.component.reference.targetfilter(0)] Dependency not satisfied: ref > log level: 4 D=14:55:12,837 T=Thread[Configuration Updater,5,main]: > [factory.component.reference.targetfilter(0)] Not all dependencies satisfied, > cannot activate > 4) Then we lookup the ComponentFactory for the > "factory.component.reference.targetfilter" component, and we pass to the > CF.newInstance() method a Hashtable with the following target filter: > "ref.target="(value=service2)") > 4) and finally, we expect the component to be bound to SimpleService2 > (because we have configured the target filter (ref) to "(value=service2)". > Initially, i though that the problem was coming from target filters. But it > seems that the problem comes from the fact that the factory component stays > unsatisfied, event if we provide the configuration and even when the two > SImpleService instances are registered. > And the test fails like this: > junit.framework.AssertionFailedError: expected:<64> but was:<4> > at junit.framework.Assert.fail(Assert.java:57) > at junit.framework.Assert.failNotEquals(Assert.java:329) > at junit.framework.Assert.assertEquals(Assert.java:78) > at junit.framework.Assert.assertEquals(Assert.java:234) > at junit.framework.Assert.assertEquals(Assert.java:241) > at junit.framework.TestCase.assertEquals(TestCase.java:409) > at > org.apache.felix.scr.integration.ComponentFactoryWithTargetFiltersTest.test_component_factory(ComponentFactoryWithTargetFiltersTest.java:82) > Now, if I apply the proposed attached patch, then the integration test is > successful and my application is also coming up correctly. > (I did not have time to try to follow what David is suggesting in the dev > post, regarding a potential issue in SingleComponentManager.reconfigure() and > a missing check regarding m_factoryProperties). -- This message was sent by Atlassian JIRA (v6.2#6252)