You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Rashmi Hunt (JIRA)" <de...@tuscany.apache.org> on 2012/09/06 07:09:07 UTC
[jira] [Created] (TUSCANY-4069) Issue with resolving autowired
reference when binding is not defined to a target service exposed over
multiple bindings
Rashmi Hunt created TUSCANY-4069:
------------------------------------
Summary: 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
[jira] [Closed] (TUSCANY-4069) Issue with resolving autowired
reference when binding is not defined to a target service exposed over
multiple bindings
Posted by "ant elder (JIRA)" <de...@tuscany.apache.org>.
[ 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