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

Raymond Feng resolved TUSCANY-3348.
-----------------------------------

    Resolution: Fixed

An improved fix were checked in under:

http://svn.apache.org/viewvc?rev=830700&view=rev
http://svn.apache.org/viewvc?rev=830703&view=rev

The orginal path has a flaw for the JDKCallbackInvocationHandler.

I found out there is a performance issue in CallableReferenceImpl.resolve(). It 
always tries to get the CompositeActivator from the thread local. I add a test 
to the "else" to avoid that.

One more thing I found is that the JDKInvocationHandler and 
JDKCallbackInvocationHandler (sublcass) use the same handleCallback() at this 
moment. I think we can optimize that as the JDKCallbackHandler probably just 
has to set up the callbackID for the callback while the JDKInvocationHandler 
needs to receive the callbackID/callbackObject from the client. If my 
understanding is correct, then the JDKInvocationHandler can do the 
callbackEndpoint check first (as Hasan's fix did) and 
JDKCallbackInvocationHandler just set the callbackID.

> PERF: handleCallback is not optimized
> -------------------------------------
>
>                 Key: TUSCANY-3348
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-3348
>             Project: Tuscany
>          Issue Type: Improvement
>          Components: Java SCA Core Runtime
>         Environment: All
>            Reporter: Hasan Muhammad
>            Assignee: Raymond Feng
>             Fix For: Java-SCA-1.5.2, Java-SCA-2.0
>
>
> The following change in JDKInvocationHandler.handleCallback() improves 
> performance when callback is not defined.
> From:
> -----------------------------------
>     private void handleCallback(Message msg, RuntimeWire wire, Object 
> currentConversationID)
>         throws TargetResolutionException {
>         ReferenceParameters parameters = 
> msg.getFrom().getReferenceParameters();
>         parameters.setCallbackID(getCallbackID());
>         if (msg.getFrom() == null || msg.getFrom().getCallbackEndpoint() == 
> null) {
>             return;
>         }
>         parameters.setCallbackReference(msg.getFrom().getCallbackEndpoint());
> ------------------------------------
> To:
> ------------------------------------
>     private void handleCallback(Message msg, RuntimeWire wire, Object 
> currentConversationID)
>         throws TargetResolutionException { 
>         if (msg.getFrom() == null || msg.getFrom().getCallbackEndpoint() == 
> null) {
>             return;
>         }
>         ReferenceParameters parameters = 
> msg.getFrom().getReferenceParameters();
>         parameters.setCallbackID(getCallbackID());
>         parameters.setCallbackReference(msg.getFrom().getCallbackEndpoint());
> -------------------------------------

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to