Author: davidb Date: Wed Feb 11 11:36:34 2015 New Revision: 1658933 URL: http://svn.apache.org/r1658933 Log: FELIX-4793 Components with an empty configuration are created even if configuration is required or available
This happens when the 'Obsolete Factory Component Factory' is set to true. This commit addresses, the issue. Thanks to Carsten Ziegeler for the code fix. A test is also included. Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java felix/trunk/scr/src/test/resources/integration_test_simple_factory_components.xml Modified: felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java?rev=1658933&r1=1658932&r2=1658933&view=diff ============================================================================== --- felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java (original) +++ felix/trunk/scr/src/main/java/org/apache/felix/scr/impl/config/ConfigurableComponentHolder.java Wed Feb 11 11:36:34 2015 @@ -644,7 +644,8 @@ public class ConfigurableComponentHolder { if ( isSatisfied() ) { - if ( m_factoryPidIndex == null || m_componentMetadata.isObsoleteFactoryComponentFactory()) + if ( m_factoryPidIndex == null || + (m_componentMetadata.isObsoleteFactoryComponentFactory() && !m_componentMetadata.isConfigurationRequired())) { m_singleComponent = createComponentManager(false); cms.add( m_singleComponent ); Modified: felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java?rev=1658933&r1=1658932&r2=1658933&view=diff ============================================================================== --- felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java (original) +++ felix/trunk/scr/src/test/java/org/apache/felix/scr/integration/ComponentFactoryTest.java Wed Feb 11 11:36:34 2015 @@ -143,6 +143,19 @@ public class ComponentFactoryTest extend } @Test + public void test_component_factory_require_configuration_obsolete() throws Exception + { + final String componentname = "factory.component.configuration.obsolete"; + + TestCase.assertNull(SimpleComponent.INSTANCE); + + createFactoryConfiguration(componentname); + delay(); + getConfigurationsDisabledThenEnable(componentname, 1, ComponentConfigurationDTO.ACTIVE); + TestCase.assertEquals(PROP_NAME, SimpleComponent.INSTANCE.getProperty(PROP_NAME)); + } + + @Test public void test_component_factory_optional_configuration() throws Exception { final String componentname = "factory.component.configuration.optional"; Modified: felix/trunk/scr/src/test/resources/integration_test_simple_factory_components.xml URL: http://svn.apache.org/viewvc/felix/trunk/scr/src/test/resources/integration_test_simple_factory_components.xml?rev=1658933&r1=1658932&r2=1658933&view=diff ============================================================================== --- felix/trunk/scr/src/test/resources/integration_test_simple_factory_components.xml (original) +++ felix/trunk/scr/src/test/resources/integration_test_simple_factory_components.xml Wed Feb 11 11:36:34 2015 @@ -36,6 +36,15 @@ <implementation class="org.apache.felix.scr.integration.components.SimpleComponent" /> </scr:component> + <scr:component name="factory.component.configuration.obsolete" + enabled="false" + configuration-policy="require" + xmlns:felix="http://felix.apache.org/xmlns/scr/extensions/v1.0.0" + felix:obsoleteFactoryComponentFactory="true" > + <implementation class="org.apache.felix.scr.integration.components.SimpleComponent" /> + <property name="foo">bar</property> + </scr:component> + <scr:component name="factory.component.configuration.optional" enabled="false" configuration-policy="optional"