You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Mark Combellack (JIRA)" <tu...@ws.apache.org> on 2007/10/19 16:44:51 UTC
[jira] Updated: (TUSCANY-1860) Tuscany does not support performing
call backs using a separate thread to the original invoking thread
[ https://issues.apache.org/jira/browse/TUSCANY-1860?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mark Combellack updated TUSCANY-1860:
-------------------------------------
Attachment: CallbackInSeparateThreadITest.patch
The attached CallbackInSeparateThreadITest.patch file adds a simple iTest that demonstrates the problem of callbacks in a separate thread.
> Tuscany does not support performing call backs using a separate thread to the original invoking thread
> ------------------------------------------------------------------------------------------------------
>
> Key: TUSCANY-1860
> URL: https://issues.apache.org/jira/browse/TUSCANY-1860
> Project: Tuscany
> Issue Type: Improvement
> Components: Java SCA Core Runtime
> Affects Versions: Java-SCA-1.0
> Environment: SVN Head revision #586349
> Linux
> Reporter: Mark Combellack
> Fix For: Java-SCA-Next
>
> Attachments: CallbackInSeparateThreadITest.patch
>
>
> The current implementation of Tuscany does not allow a Component implementation to invoke the call back using a separate thread.
> Consider the scenario:
> 1) Client invokes a method on a Service.
> 2) The Service obtains the CallableReference of the client using @Callback
> 3) The Service spawns a new thread and passes the CallableReference to the thread
> 4) The original calling thread from the client returns
> Meanwhile - the newly spawned thread:
> 5) Does some stuff
> 6) Invokes the getService() on the CallableReference to get a proxy to the client
> 7) Invokes the callback method on the proxy to the client
> 8) The client will have it's callback method invoked
> 9) The separate thread ends as it's job is done.
>
> The problem is with the way that Tuscany uses ThreadLocal to store the callback location. The newly spawned thread will not have the callback location attached to it's ThreadLocal.
> The above scenario will fail at step 7 with the following exception:
> Exception in thread "Timer-0" org.osoa.sca.ServiceRuntimeException: No callback wire found for /
> at org.apache.tuscany.sca.core.invocation.JDKCallbackInvocationHandler.invoke(JDKCallbackInvocationHandler.java:63)
> at $Proxy12.eventNotification(Unknown Source)
> at org.apache.tuscany.sca.itest.EventProcessorServiceImpl.receiveEvent(EventProcessorServiceImpl.java:114)
> at org.apache.tuscany.sca.itest.EventProcessorServiceImpl.access$0(EventProcessorServiceImpl.java:102)
> at org.apache.tuscany.sca.itest.EventProcessorServiceImpl$EventGenerator$EventGeneratorTimerTask.run(EventProcessorServiceImpl.java:193)
> at java.util.TimerThread.mainLoop(Timer.java:512)
> at java.util.TimerThread.run(Timer.java:462)
--
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: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org