[ 
https://issues.apache.org/jira/browse/TUSCANY-2077?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12579024#action_12579024
 ] 

Vamsavardhana Reddy commented on TUSCANY-2077:
----------------------------------------------

I am noticing that though ConversationManagerImpl.startConversation() is 
generating two different conversationIDs, only one of the conversationID is 
being used in initializing GammaImpl.  The convesation object carries the 
correct conversationID.  For this reason, line 20 in the output above is 
showing the correct conversationID ending in 8f78 even though line 4 and line 6 
show the conversationID ending in 57b6.  Here is the sequence of events that 
occur in the failing case:

Thread1: ConversationManager.startConversation() generates id1
Thread2: ConversationManager.startConversation() generates id2
Thread1: sets id1 as conversationID in ReferenceParameters
Thread2: sets id2 as conversationID in ReferenceParameters overwriting id1.
Thread1: initializes GammaImpl with conversationID id2
Thread2: initializes GammaImpl with conversationID id2

Though each thread is using its own MessageImpl object, both the MessageImpl 
objects are using the same instance of EndpointReferenceImpl (set at line 268 
in JDKInvocationHandler.invoke() ) which is why Thread2 is overwriting the 
convesationID.  Should each MessageImpl object be using a different instance of 
EndpointReferenceImpl?


> ConversationIds are not always unique
> -------------------------------------
>
>                 Key: TUSCANY-2077
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-2077
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA Core Runtime
>    Affects Versions: Java-SCA-1.2
>         Environment: Windows XP SP2, Intel Core 2 CPU, 2.6, 2GB Ram, jdk 
> 1.5.0_10 
>            Reporter: Daniel Stucky
>            Assignee: Vamsavardhana Reddy
>         Attachments: testoneway.zip
>
>
> The attached test works fine if I do NOT mark method run() in Aplha with 
> @OneWay. 
> The goal is to call Alpha.run() multiple times "concurrently" by using 
> @OneWay.
> If I DO mark it with @OneWay sometimes the following error occurs
> Here is the command line output with line numbers:
>  1: Starting ...
>  2: test.composite ready !!!
>  3: GammaImpl:GammaImpl(), conversationId=null
>  4: Gamma:start(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
>  5: GammaImpl:GammaImpl(), conversationId=null
>  6: Gamma:start(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
>  7: Gamma:hasNext(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
>  8: Gamma:next(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
>  9: value=id_0, conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 10: Gamma:hasNext(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 11: Gamma:next(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 12: value=id_1, conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 13: Gamma:hasNext(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 14: Gamma:next(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 15: value=id_2, conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 16: Gamma:hasNext(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 17: Gamma:hasNext(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 18: Gamma:next(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 19: Gamma:next(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 20: value=id_0, conversationId=3c6df219-e61c-4327-94dc-1cd2b3a08f78
> 21: value=id_3, conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 22: Gamma:hasNext(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 23: Gamma:next(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 24: value=id_4, conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 25: Gamma:hasNext(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 26: Gamma:stop(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> 27: GammaImpl:GammaImpl(), conversationId=null
> 28: Gamma:hasNext(), conversationId=dcde1a3f-8eb0-4e33-84fd-80d7359432b2
> 29: java.lang.NullPointerException
>       at services.GammaImpl.hasNext(GammaImpl.java:40)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:585)
>       at 
> org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:109)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:108)
>       at 
> org.apache.tuscany.sca.binding.sca.impl.SCABindingInvoker.invoke(SCABindingInvoker.java:61)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:108)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:287)
>       at 
> org.apache.tuscany.sca.core.invocation.JDKInvocationHandler.invoke(JDKInvocationHandler.java:155)
>       at $Proxy14.hasNext(Unknown Source)
>       at services.AlphaImpl.run(AlphaImpl.java:26)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:585)
>       at 
> org.apache.tuscany.sca.implementation.java.invocation.JavaImplementationInvoker.invoke(JavaImplementationInvoker.java:109)
>       at 
> org.apache.tuscany.sca.core.databinding.wire.PassByValueInterceptor.invoke(PassByValueInterceptor.java:108)
>       at 
> org.apache.tuscany.sca.core.invocation.NonBlockingInterceptor$1.run(NonBlockingInterceptor.java:71)
>       at org.apache.tuscany.sca.core.work.Jsr237Work.run(Jsr237Work.java:61)
>       at 
> org.apache.tuscany.sca.core.work.ThreadPoolWorkManager$DecoratingWork.run(ThreadPoolWorkManager.java:214)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>       at java.lang.Thread.run(Thread.java:595)
> 30: Gamma:stop(), conversationId=5297f3ca-8c6e-4b65-a5e6-5c4fee0457b6
> This is a strange problem that is not always reproduceable but only from time 
> to time. I guess it's a concurrency issue. At first I've seen this only while 
> debugging, but I managed to get the exception using sleep().
> In line 3-5 two instances of Gamma are created and on each the method start 
> is called. Note that both use the same conversationID. This should not be the 
> case!
> In line 27 another instance of  Gamma is created. Why ? No method start() is 
> called !
> Then in line in method hasNext() the conversationId suddenly is 
> dcde1a3f-8eb0-4e33-84fd-80d7359432b2. I guess it is the firts method executed 
> on this new instance, thus creating a new conversationId. And as no start() 
> was called, the internal list is not initialized but NULL.
> Is there a conceptual problem with my code? 

-- 
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]

Reply via email to