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