You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "ant elder (JIRA)" <de...@tuscany.apache.org> on 2012/09/07 12:03:07 UTC
[jira] [Closed] (TUSCANY-4069) Issue with resolving autowired
reference when binding is not defined to a target service exposed over
multiple bindings
[ https://issues.apache.org/jira/browse/TUSCANY-4069?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ant elder closed TUSCANY-4069.
------------------------------
Resolution: Fixed
Patch applied, thanks for the fix Rashmi.
> Issue with resolving autowired reference when binding is not defined to a target service exposed over multiple bindings
> -------------------------------------------------------------------------------------------------------------------------
>
> Key: TUSCANY-4069
> URL: https://issues.apache.org/jira/browse/TUSCANY-4069
> Project: Tuscany
> Issue Type: Bug
> Components: Java SCA Assembly Model
> Affects Versions: Java-SCA-2.0-Beta3
> Reporter: Rashmi Hunt
>
> This issue is somewhat similar to TUSCANY-3941, with difference that the autowired reference without
> any binding defined, gets matched to a first binding on the target service with multiple bindings even
> though binding.sca is one of them.
>
> E.g
> <component name="Calculator" autowire="true" >
> <implementation.java class="test.sca.calculator.Calculator"/>
> <service name="CalculatorService">
> <binding.sca/>
> </service>
> <reference name="add" multiplicity="1..1">
> <interface.java interface="test.sca.add.AddLocal"/>
> </reference>
> </component>
> <component name="Add">
> <implementation.java class="test.sca.add.AddDelegate"/>
> <service name="AddLocal">
> <binding.ws name="ws"/>
> <binding.sca/>
> </service>
> </component>
> Since above autowired reference "add" in component "Calculator" is defined without any binding, I would
> think the runtime would match it to <binding.sca> of the target Service. Instead for this reference,
> runtime matches to first binding of the target service, which is binding.ws instead of matching to
> binding.sca even though binding.sca is one of the bindings defined in the target service.
> Fix can be, in EndpointReferenceBinderImpl.selectForwardEndpoint(..) add below logic,
> if (endpointReference.getBinding() == null && endpointReference.getReference().getAutowire() == true){
> for (Endpoint endpoint : matchedEndpoints){
> if (endpoint.getBinding() instanceof SCABinding){
> matchedEndpoint = endpoint;
> break;
> }
> }
> }
> after,
> // TUSCANY-3941 check for the case where the user has provided a
> // binding.sca at the reference and make sure we pick
> // a binding.sca at the service regardless of how many
> // other bindings are provided
> if (endpointReference.getBinding() != null &&
> endpointReference.getBinding() instanceof SCABinding ){
> for (Endpoint endpoint : matchedEndpoints){
> if (endpoint.getBinding() instanceof SCABinding){
> matchedEndpoint = endpoint;
> break;
> }
> }
> }
--
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