[ 
https://issues.apache.org/jira/browse/TUSCANY-3940?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Greg Dritschler updated TUSCANY-3940:
-------------------------------------

    Attachment: TUSCANY-3940.patch

> Change AsyncJDKInvocationHandler to use WorkScheduler directly
> --------------------------------------------------------------
>
>                 Key: TUSCANY-3940
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-3940
>             Project: Tuscany
>          Issue Type: Improvement
>    Affects Versions: Java-SCA-2.0
>            Reporter: Greg Dritschler
>            Priority: Minor
>         Attachments: TUSCANY-3940.patch
>
>
> AsyncJDKInvocationHandler obtains an ExecutorService from the WorkScheduler 
> utility and uses it to schedule asynchronous requests.  
> AsyncJDKInvocationHandler could just as well use the WorkScheduler utility 
> directly.  This might simplify things for some WorkScheduler providers since 
> they wouldn't have to support an ExecutorService interface.  I am attaching a 
> patch to make this change.
> While working on this, I discovered some other problems which I'm also fixing 
> in this patch.
> 1.  When the client passes a callback object, 
> AsyncJDKInvocationHandler.doInvokeAsyncCallback() invokes the callback 
> immediately after making the asynchronous request.  The callback object 
> should be invoked when the response is actually available.  I am fixing this 
> by saving the callback object in the future object, 
> AsyncInvocationFutureImpl.  When the response or fault is delivered to the 
> future (via setResponse() or setFault() or setWrappedFault()), the future 
> invokes the callback object.  
> 2.  AsyncJDKInvocationHandler.separateThreadInvoker.run() contains a catch 
> block for a ServiceRuntimeException.  If the cause of the 
> ServiceRuntimeException is NOT a FaultException, the exception is swallowed 
> for no reason.  I changed the code to deliver the exception to the future.
> 3.  AsyncJDKInvocationHandler.doInvokeSync() contains a wait of 1000 seconds 
> when a client does a sync invocation of an async service.  This is way too 
> long for a synchronous timeout.  Ideally this should be configurable in some 
> manner, although I don't know how much effort we want to spend on it given 
> that this is not a desirable invocation pattern.  For now I am changing it to 
> wait 120 seconds.
> 4. AsyncFaultWrapper tries to reconstruct a fault using a constructor with a 
> String argument.  If the class does not have such a constructor, this fails.  
> I have added code to try with the default constructor.
> Change #1 exposed an issue in the async-services itest.  Service1ClientImpl 
> uses static variables for the async response and async response fault.  After 
> the first time through, these values may have residual values from the prior 
> execution and the test will skip waiting on the mutex.  The test got away 
> from this before because of the bad logic in AsyncJDKInvocationHandler:
>   -- AsyncJDKInvocationHandler.doInvokeAsyncCallback() scheduled a runnable 
> to invoke the request.  It waited for this runnable to complete!
>   -- The runnable invoked the callback handler after firing the request.  The 
> itest callback handler does a get() on the provided future with an indefinite 
> timeout. 
> So the itest was guaranteed that its static variables would be updated.  The 
> test was really running pseudo-synchronously.  I changed the itest to use 
> non-static variables.  Now it is falling into the mutex wait for a new 
> response.  I increased the wait time a bit just to be safe.
> *** The JCA_11017 compliance test has a very similar problem.  It is not 
> using statics, but it is making multiple requests inside a loop using the 
> same variables.  It uses a CountdownLatch with a value of 1, so after the 
> first request the latch won't wait anymore.  This causes it to not wait for 
> the exception response for the second request.  It got away with this before 
> for the same reason outlined above;  the requests were actually 
> pseudo-synchronous.  The patch does not have a fix for this, so JCA_11017 
> will fail until it is somehow corrected.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to