On 7/21/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:

ant elder wrote:
> On 7/21/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
>>
>> ant elder wrote:
>> > On 7/20/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote:
>> >
>> > <snip>
>> >
>> > - I have to deal with concurrent requests in my business logic, but
>> then
>>
>> >> I'm having a hard time understanding how my business logic is
>> going to
>> >> handle interlaced injection calls and business method calls in a
>> >> multi-threaded environment...
>> >
>> >
>> > Could you explain this issue a bit more, what do you mean "interlaced
>> > injection calls and business method calls"?
>> >
>> >   ...ant
>> >
>>
>> My component implementation looks like this:
>>
>> class MyBrokenComponent {
>>
>>   Client callback;
>>
>>   @Callback
>>   void setCallback(Client callback) {
>>     this.callback = callback;
>>   }
>>
>>   void echo(String s) {
>>     callback.echoCallback(s);
>>   }
>>
>> 2 concurrent requests enter a composite scoped component instance (a
>> single instance). I'm not feeling lucky today and it happens that my
>> fast Dual core processor just decided to schedule the execution of the
>> requests as follows:
>>
>> Thread 1
>>   component.setCallback(callback A corresponding to the request in
>> Thread
>> 1)
>> Thread 2
>>   component.setCallback(callback 2 corresponding to the request in
>> Thread
>> 2)
>> Thread 1
>>   echo("hey")
>> Thread 2
>>   echo("hey")
>>
>> Both callbacks will go to back A. Not good :) and by the way, do I need
>> to mark my setter methods synchronized???
>>
>> I guess we can play similar scenarios and illustrate the same issues
>> with ConversationID, Callbacks, or RequestContext. How can this work at
>> all?
>
>
> Right, which is why back here [1] the suggestion was throwing some
> exception
> when its composite scoped. Can't we do that and just say conversations
> aren't supported in this configuration?
>
>   ...ant
>
> [1]
>
http://mail-archives.apache.org/mod_mbox/ws-tuscany-dev/200707.mbox/[EMAIL 
PROTECTED]
>
>

Yes, we could throw an exception at assembly/startup time, or even
simpler... I'm not sure we need to write any code to handle this at this
point, we could just make clear here on the list that some
configurations are not supported and that the behavior is undefined
until clarified with the spec for:

- injection of thread-specific information (requestContext, callback)
into component instances shared across threads (scopes other than
stateless).
- injection of conversation-specific information (conversationID,
conversationAttributes) into component instances shared across
conversations (scopes other than conversational and stateless)

Thoughts?


Sounds good to me. I shall go write no code for it :)

  ...ant

Reply via email to