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