Closed magicmike2248 closed 7 years ago
If I then delete the first configuration object, component instances for two remaining configuration objects are activated:
list Available configurations: [0] Component._0 [1] Component._1 [2] Component._2 configuration> delete 0 Deleting Component._0 configuration> [stdout] === Deactivate null === [stdout] component.name=Component [stdout] component.id=1 [stdout] === Constructor === [stdout] === Activate 2 === [stdout] service.pid=Component._1 [stdout] service.factoryPid=Component [stdout] component.name=Component [stdout] number=2 [stdout] component.id=1 [stdout] === Constructor === [stdout] === Activate 3 === [stdout] service.pid=Component._2 [stdout] service.factoryPid=Component [stdout] component.name=Component [stdout] number=3 [stdout] component.id=1
But only one of them is shown by the SCR command:
enter scr scr> show -f Component ID State BID Name 1 ACTIVE 28 Component > No services provided. > No referenced services > Property component.id = 1 > Property component.name = Component > Property number = 2 > Property service.factoryPid = Component > Property service.pid = Component._1 > Immediate component, default enabled, config policy = require scr> enter configuration configuration> list Available configurations: [0] Component._1 [1] Component._2 configuration> delete 0 Deleting Component._1 configuration> [stdout] === Deactivate null === [stdout] component.name=Component [stdout] component.id=1
I don't think "Deactivate null" is right, all component properties should be passed to deactivate method, including number=2, so it should be Deactivate 2.
Here, the last configuration object is deleted, but a Component Instance with configuration-policy="require" is still activated despite having no configurations available.
list Available configurations: [0] Component._2 configuration> delete 0 Deleting Component._2 configuration> [stdout] === Deactivate null === [stdout] component.name=Component [stdout] component.id=1 [stdout] === Constructor === [stdout] === Activate null === [stdout] component.name=Component [stdout] component.id=1 enter scr scr> show -f Component ID State BID Name 1 ACTIVE 28 Component > No services provided. > No referenced services > Property component.id = 1 > Property component.name = Component > Immediate component, default enabled, config policy = require scr> enter configuration configuration> list No configurations available configuration>
I've tested test this and can confirm the bug. This bug was introduced in 6.0.0, in the previous version things worked correctly.
Bug fixed in component(SCR) bundle version 6.0.2.
This is concerning the Declarative Services SCR bundle (component_all-6.0.0.jar).
According to OSGi Compendium R6 Specification, item 112.7 (Declarative Services Specification / Deployment),
If I have a component with configuration-policy="require", and multiple Configuration Objects in Configuration Admin with Factory PID matching my component's configuration-pid (which in my case is equal to component name), then for each Configuration Object I should have a Component Instance created and activated, but this is not happening.
Here's my component:
And here's the console log of me creating three factory configurations and only the first component instance being created: