[ 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.