On Thu, Dec 8, 2011 at 10:57 AM, Simon Nash <[email protected]> wrote:
> ant elder wrote:
>>
>> This is good and i will have a go in 2.x to see if a similar approach
>> works there. But i can't help thinking its a slightly convoluted
>> approach and as we have more flexibility in 2.x to add more APIs I
>> wonder if we should just add a more direct API method to set the URIs
>> with extra methods on Node, or also perhaps something like being able
>> to do: ((TuscanyServiceReference)serviceReference).setURI(uri)?
>>
> +1 for providing a more convenient solution in 2.x.
>
> A setURI() method would only work for certain binding types. Perhaps
> this could be generalized to use some kind of notion of endpoint.
>
> There's also the mysterious wiredByImpl notion from the SCA spec.
> It might be good to use that as the base concept for this capability.
>
Ok i had a quick stab at this in r1211944 and 1211945 which enables
setting the binding URI of a ServiceReference by casting it to
org.apache.tuscany.sca.core.context.impl.ServiceReferenceImpl and
calling setBindingURI. Eg
ServiceReference<Helloworld> sr =
componentContext.getServiceReference(Helloworld.class,
"helloworldService");
((ServiceReferenceImpl)sr).setBindingURI("http://localhost:8080/HelloworldService/Helloworld");
return "client: " + sr.getService().sayHello(name);
Obviously its not ideal to be casting to a that impl class and it
should rather have an API/SPI interface to cast to. I haven't done a
whole lot of testing but that that seems to work ok, can anyone see
any obvious issues?
...ant