Christoph Läubrich created ARIES-915:
----------------------------------------
Summary: The CM module for managed-service-factory does not
perform the update correct with embedded managed-properties
Key: ARIES-915
URL: https://issues.apache.org/jira/browse/ARIES-915
Project: Aries
Issue Type: Bug
Components: Blueprint
Affects Versions: 0.3
Reporter: Christoph Läubrich
I'm using the following test case:
{code:xml}<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0">
<cm:managed-service-factory id="testfactory"
factory-pid="testfactory" interface="test.FactoryTest"
auto-export="all-classes">
<cm:managed-component
class="test.FactoryTest"
init-method="init">
<cm:managed-properties persistent-id=""
update-strategy="component-managed" update-method="update"/>
</cm:managed-component>
</cm:managed-service-factory>
</blueprint>{code}
The testclass just print out to the log:{code:java}public class FactoryTest {
private static final Logger LOG =
LoggerFactory.getLogger(FactoryTest.class);
public FactoryTest() {
LOG.info("{}: FactoryTest.FactoryTest()",
System.identityHashCode(this));
}
public void init() {
// LOG.info("{}: FactoryTest.init()", System.identityHashCode(this));
}
public void update(Map<String, ?> props) {
LOG.info("{}: FactoryTest.update() props = {}",
System.identityHashCode(this), props);
}
}{code}
The logfile looks like this, I have reodereded the log output so each instance
is one block:{code}karaf@root> log:display
2012-09-04 09:36:30,660 | INFO | rint Extender: 2 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 30590872: FactoryTest.FactoryTest()
2012-09-04 09:36:30,675 | INFO | Thread-91 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 30590872: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo4,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-4.cfg,
service.pid=testfactory.8e97399a-940e-49c3-ae75-3e720951774a}
2012-09-04 09:36:30,677 | INFO | Thread-92 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 30590872: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo3,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-3.cfg,
service.pid=testfactory.3c44fb7d-6aa2-48e6-8050-1fac3c56f9b1}
2012-09-04 09:36:30,688 | INFO | Thread-93 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 30590872: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,697 | INFO | Thread-94 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 30590872: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,699 | INFO | Thread-96 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 30590872: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo1,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-1.cfg,
service.pid=testfactory.c5b988ec-8747-4354-84b4-5613a60b6ab1}
2012-09-04 09:36:30,703 | INFO | Thread-95 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 30590872: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo3,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-3.cfg,
service.pid=testfactory.3c44fb7d-6aa2-48e6-8050-1fac3c56f9b1}
2012-09-04 09:36:30,703 | INFO | Thread-95 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 7131715: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo3,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-3.cfg,
service.pid=testfactory.3c44fb7d-6aa2-48e6-8050-1fac3c56f9b1}
2012-09-04 09:36:30,668 | INFO | rint Extender: 2 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 7131715: FactoryTest.FactoryTest()
2012-09-04 09:36:30,675 | INFO | Thread-91 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 7131715: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo4,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-4.cfg,
service.pid=testfactory.8e97399a-940e-49c3-ae75-3e720951774a}
2012-09-04 09:36:30,677 | INFO | Thread-92 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 7131715: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo3,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-3.cfg,
service.pid=testfactory.3c44fb7d-6aa2-48e6-8050-1fac3c56f9b1}
2012-09-04 09:36:30,688 | INFO | Thread-93 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 7131715: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,697 | INFO | Thread-94 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 7131715: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,701 | INFO | Thread-96 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 7131715: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo1,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-1.cfg,
service.pid=testfactory.c5b988ec-8747-4354-84b4-5613a60b6ab1}
2012-09-04 09:36:30,671 | INFO | rint Extender: 2 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 21655743: FactoryTest.FactoryTest()
2012-09-04 09:36:30,699 | INFO | Thread-96 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 21655743: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo1,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-1.cfg,
service.pid=testfactory.c5b988ec-8747-4354-84b4-5613a60b6ab1}
2012-09-04 09:36:30,687 | INFO | Thread-93 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 21655743: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,697 | INFO | Thread-94 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 21655743: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,703 | INFO | Thread-95 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 21655743: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo3,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-3.cfg,
service.pid=testfactory.3c44fb7d-6aa2-48e6-8050-1fac3c56f9b1}
2012-09-04 09:36:30,679 | INFO | rint Extender: 2 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 20153007: FactoryTest.FactoryTest()
2012-09-04 09:36:30,688 | INFO | Thread-93 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 20153007: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,698 | INFO | Thread-94 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 20153007: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,701 | INFO | Thread-96 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 20153007: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo1,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-1.cfg,
service.pid=testfactory.c5b988ec-8747-4354-84b4-5613a60b6ab1}
2012-09-04 09:36:30,704 | INFO | Thread-95 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 20153007: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo3,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-3.cfg,
service.pid=testfactory.3c44fb7d-6aa2-48e6-8050-1fac3c56f9b1}
2012-09-04 09:36:30,681 | INFO | Pid=testfactory) | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 17973749: FactoryTest.FactoryTest()
2012-09-04 09:36:30,698 | INFO | Thread-94 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 17973749: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo2,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-2.cfg,
service.pid=testfactory.139e87cd-7f73-4dab-8289-af5e6be91ba5}
2012-09-04 09:36:30,701 | INFO | Thread-96 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 17973749: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo1,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-1.cfg,
service.pid=testfactory.c5b988ec-8747-4354-84b4-5613a60b6ab1}
2012-09-04 09:36:30,703 | INFO | Thread-95 | FactoryTest
| 139 - test - 0.0.4.SNAPSHOT | 17973749: FactoryTest.update() props =
{service.factoryPid=testfactory, hallo=hallo3,
felix.fileinstall.filename=file:/tmp/apache-karaf-2.2.8/etc/testfactory-3.cfg,
service.pid=testfactory.3c44fb7d-6aa2-48e6-8050-1fac3c56f9b1}
karaf@root>{code}
The Problem is, that the update method is called multiple times (from different
threads) fore each instance, even if this configuration is not related to this
component!
When enabling debug output for the cm component you see some messages like this
(it is the same for each distinct component): {code}CmManagedProperties
| 9 - org.apache.aries.blueprint - 0.3.2 | Configuration updated for
bean=.component-1 / pid={code} It seems as if the (automatic generated?) name
for the bean should be component-1, component-2, component-3 or something but
is infact always component-1 so all existing components are called.
Beside this, the method 'protected void updated(String pid, Dictionary props)'
should be syncronized since it might be called from differen threads
(osgi/blueprint/internal...).
I'm not sure if the 0.2 and 1.0 version is also affected by this.
--
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