You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Greg Dritschler (JIRA)" <de...@tuscany.apache.org> on 2011/07/27 22:42:10 UTC

[jira] [Updated] (TUSCANY-3904) SCAClientFactory.getService() may use wrong binding when referencing a promoted service

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

Greg Dritschler updated TUSCANY-3904:
-------------------------------------

    Attachment: TUSCANY-3904.patch

> SCAClientFactory.getService() may use wrong binding when referencing a promoted service
> ---------------------------------------------------------------------------------------
>
>                 Key: TUSCANY-3904
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-3904
>             Project: Tuscany
>          Issue Type: Bug
>    Affects Versions: Java-SCA-2.0
>            Reporter: Greg Dritschler
>            Priority: Minor
>         Attachments: TUSCANY-3904.patch
>
>
> SCAClientFactory.getService() doesn't work correctly when referencing a promoted service.
> Let's say I have composite A with component C1
>     <component name="C1">
>         <implementation.composite name="B"/>
>         <service name="S1Promoted">
>             <binding.sca name="myscabinding"/>
>         </service>
>     </component>
> and composite B with component C2
>     <service name="S1Promoted" promote="C2"/>
>     <component name="C2">
>         <implementation.java class="..."/>
>         <service name="S1">
>             <binding.ws/>
>         </service>
>     </component>
> When I use SCAClientFactory.getService("C1/S1Promoted/myscabinding") to obtain the service, the invocation uses binding.ws, not binding.sca.  This doesn't sound correct to me.  It certainly seems wrong to ignore the explicit binding name and pick something else.  But even I left out the binding name and just asked for "C1/S1Promoted", I would expect binding.sca to be used since that's the binding that's defined for that component service.
> RuntimeComponentImpl.getServiceReference(Class<B> businessInterface, String serviceName) checks for
> implementation.composite and then uses the component context of the promoted component to create a self-reference.
> ComponentContextImpl.getEndpoint(ComponentService service, String bindingName) searches for the endpoint in the promoted component's context.  It has a check for binding name, but if it can't find a match, logic added by TUSCANY-3543 just picks the first endpoint.
> The logic in getServiceReference() to use the promoted component's context doesn't seem to be necessary.  I deleted it and re-tested and got the desired results (binding.sca was used).  I am attaching a patch.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira