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
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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]