[ 
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

        

Reply via email to