You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Felix Meschberger (JIRA)" <ji...@apache.org> on 2009/04/26 23:31:30 UTC

[jira] Assigned: (FELIX-1053) SCR: Bound Service Replacement regression ?

     [ https://issues.apache.org/jira/browse/FELIX-1053?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Felix Meschberger reassigned FELIX-1053:
----------------------------------------

    Assignee: Felix Meschberger

> SCR: Bound Service Replacement regression ?
> -------------------------------------------
>
>                 Key: FELIX-1053
>                 URL: https://issues.apache.org/jira/browse/FELIX-1053
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>         Environment: linux/java version "1.5.0_18"
>            Reporter: Pierre De Rop
>            Assignee: Felix Meschberger
>         Attachments: bound-replacement.tgz
>
>
> With the SCR trunk version, it looks like the "Bound Service Replacement" feature does not work anymore, and
> I think it might be a regression, because it works fine with the SCR version 1.0.6
> I have attached to this issue a sample code which reproduces the problem. In the sample, there are two bundles:
> client-1.0.jar
> =========
> - contains a Client which has a dynamic/required/unary dependency over the "service.Service" interface, with the service property "foo=bar"
> - Here is the serviceComponent.xml description:
>    <?xml version="1.0" encoding="UTF-8"?>
>    <component name="Client">
>      <implementation class="client.Client"/>
>      <reference name="SERVICE" 
>        interface="service.Service"
>        policy="dynamic"
>        cardinality="1..1"
>        target="(foo=bar)"
>        bind="bind"/>
>    </component>
> service-1.0.jar
> ==========
> - contains the Service interface: "service.Service"
> - contains the Service implementation: "service.impl.ServiceImpl"
> - contains a ComponentFactory ("service.impl.ServiceFactory") which is in charge of creating component instances of type "ServiceImpl".
> Here is the serviceComponent.xml:
>    <?xml version="1.0" encoding="UTF-8"?>
>    <component name="Service" factory="ServiceFactory">
>      <service>
>        <provide interface="service.Service"/>
>      </service>
>      <implementation class="service.impl.ServiceImpl"/>
>    </component>
>    
>    <component name="ServiceFactory">
>      <implementation class="service.impl.ServiceFactory"/>
>      <reference name="COMPONENT_FACTORY" 
>        interface="org.osgi.service.component.ComponentFactory"
>        target="(component.name=Service)"
>        bind="bind"/>
>    </component>
> The ComponentFactory does the following, in a separate thread:
>    while (true) {
>      1- create a ServiceImpl component instance with property "foo=bar2"
>      2- dispose eventual previously created ServiceImpl with property "foo=bar2"
>      3- create a ServiceImpl component instance with property "foo=bar"
>      4- dispose eventual previously created ServiceImpl with property "foo=bar"
>      5- Sleep 500 seconds
>    }
> The issue arises in the step 4: Indeed, when the old ServiceImpl (with property "foo=bar") is disposed, the Client is deactivated, but
> I think it should not, mainly because SCR should actually replace the old bound ServiceImpl with the new one that was created in step 3.
> When you will start the test, you will see the following logs:
>    ServiceFactory: creating Service instance with property "foo=bar2" ...
>    ServiceFactory: creating Service instance with property "foo=bar" ...
>    ServiceFactory: Sleeping 500 ms ...
>    Client: bound Service : service.impl.ServiceImpl@1bca5f1
>    Client: activated with properties={component.name=Client; component.id=4; SERVICE.target=(foo=bar); }
>    ServiceFactory: creating Service instance with property "foo=bar2" ...
>    ServiceFactory: disposing old Service instance with property "foo=bar2" ...
>    ServiceFactory: creating Service instance with property "foo=bar" ...
>    ServiceFactory: disposing old Service instance with property "foo=bar" ...
>    Client: DEACTIVATED !
> Felix, could you please take a look at the sample code and check if my analysis is correct ?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.