[
https://issues.apache.org/jira/browse/TUSCANY-1674?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ant elder updated TUSCANY-1674:
-------------------------------
Fix Version/s: (was: Java-SCA-1.0)
Java-SCA-Next
Deferring all the non-critical JIRAs from 1.0
> Missing NonBlockingInterceptor on service wire
> ----------------------------------------------
>
> Key: TUSCANY-1674
> URL: https://issues.apache.org/jira/browse/TUSCANY-1674
> Project: Tuscany
> Issue Type: Bug
> Reporter: Rashmi Hunt
> Fix For: Java-SCA-Next
>
> Attachments: RuntimeWireImpl.java
>
>
> The reason why NonBlockingInterceptor is needed on the service wire as well
> is, if there is no nonBlockingInterceptor at service wire and if the service
> is invoked not from a reference then there is no asynch support even if the
> call is non blocking. For e.g if a pure webservice client (or any pure
> client) is sending a request to a non blocking service call, since Tuscany
> code is currently missing a nonBlockingInterceptor on the service wire, there
> is no async support for this case, even though the service operation is
> marked as non-blocking.
> Solution is straightforward. Add NonBlockingInterCeptor on service wire in
> RuntimeWireImpl.initInvocationChains() for the service wire clause
> Binding serviceBinding = wireTarget.getBinding();
> if (operation.isNonBlocking()) {
> addNonBlockingInterceptor(service, serviceBinding, chain);
> }
> And add a new addNonBlockingInterceptor() function which takes params
> service, serviceBinding, chain
> /**
> * Add a non-blocking interceptor if the service binding needs it
> *
> * @param service
> * @param binding
> * @param chain
> */
> private void addNonBlockingInterceptor(ComponentService service, Binding
> binding, InvocationChain chain) {
> ServiceBindingProvider provider =
> ((RuntimeComponentService)service).getBindingProvider(binding);
> if (provider != null) {
> boolean supportsAsyncOneWayInvocation = false;
> if (provider instanceof ServiceBindingProvider2) {
> supportsAsyncOneWayInvocation =
> ((ServiceBindingProvider2)provider).supportsAsyncOneWayInvocation();
> } else {
> // Must be an old provider that doesn't have this method. If
> this is a old provider keep the behavior
> // as is where there is no nonBlockingInterceptor on the
> service wire. If a binding provider needs a
> // nonBlocking interceptor, it would have been implemented
> ServiceBindingProvider2 and indicated
> // supportsAsyncOneWayInvocation accordingly
> supportsAsyncOneWayInvocation = true;
> }
> if (!supportsAsyncOneWayInvocation) {
> chain.addInterceptor(new
> NonBlockingInterceptor(workScheduler));
> }
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]