Tuscany
  1. Tuscany
  2. TUSCANY-1996

ConversationEndedException is not thrown.

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: Java-SCA-1.0.1
    • Fix Version/s: Java-SCA-1.x
    • Component/s: SCA Java Runtime
    • Labels:
      None
    • Environment:
      Revision: 596254

      Description

      ConversationEndedException is not thrown if you reuse a service after you have ended the conversation or the conversation has expired. Instead it starts a new conversation with the same conversation id. This can be seen in the conversationPreInvoke method in the JDKInvocationHandler. Where conversations are re-used even if they are in the ended state.

      Ben

        Activity

        ant elder made changes -
        Component/s SCA Java Runtime [ 12313754 ]
        Component/s Java SCA Core Runtime [ 12310647 ]
        Ben Smith made changes -
        Resolution Invalid [ 6 ]
        Status Open [ 1 ] Resolved [ 5 ]
        Hide
        Ben Smith added a comment -

        OK... I'm happy that this is has been fixed previously

        Show
        Ben Smith added a comment - OK... I'm happy that this is has been fixed previously
        Ben Smith made changes -
        Field Original Value New Value
        Comment [ I am working on a patch for this issue. Will take into account Simons comments and ensure that the exception is thrown on expired conversations.

        With regards to conversations that have have ended through an @EndsConversations method I have noticed that if it uses a System generated Conversation ID it will reuse this ID. Should it not instead create a new one?

        Ben ]
        Hide
        Simon Nash added a comment -

        This behavior is correct for the case of explicitly ending the conversation, but not for the case of the conversation timing out. The following is from the SCA Java Annotations and APIs 1.00 errata at http://www.osoa.org/display/Main/Errata+for+Java+Annotations+and+APIs+V1.00

        5. Resolve contradiction regarding ConversationEndedException

        Description: Section 1.6.2.2 @EndsConversation (lines 409-420) states that when a method is called on a conversational interface after an @EndsConversation has been called, a ConversationEndedException is thrown. This contradicts section 1.6.5 Conversation Lifetime Summary / Ending conversations, lines 494-495, where it states that "after an @EndsConversation method has been called" (on a service reference) ", then a new conversation will automatically be started." ...and... (lines 498-499) if the conversation has timed out, a ConversationEndedException is thrown.

        Solution: Replace lines 417-420 at the end of section 1.6.2.2 with the following: "If a conversation is ended with an explicit outbound call to an @EndsConversation method or a call to ServiceReference.endConversation(), then any subsequent call to an operation on the service reference will start a new conversation. If the conversation ends for any other reason (e.g. a timeout occurred), then until ServiceReference.getConversation().end() is called, the ConversationEndedException will be thrown by any conversational operation."

        Show
        Simon Nash added a comment - This behavior is correct for the case of explicitly ending the conversation, but not for the case of the conversation timing out. The following is from the SCA Java Annotations and APIs 1.00 errata at http://www.osoa.org/display/Main/Errata+for+Java+Annotations+and+APIs+V1.00 5. Resolve contradiction regarding ConversationEndedException Description: Section 1.6.2.2 @EndsConversation (lines 409-420) states that when a method is called on a conversational interface after an @EndsConversation has been called, a ConversationEndedException is thrown. This contradicts section 1.6.5 Conversation Lifetime Summary / Ending conversations, lines 494-495, where it states that "after an @EndsConversation method has been called" (on a service reference) ", then a new conversation will automatically be started." ...and... (lines 498-499) if the conversation has timed out, a ConversationEndedException is thrown. Solution: Replace lines 417-420 at the end of section 1.6.2.2 with the following: "If a conversation is ended with an explicit outbound call to an @EndsConversation method or a call to ServiceReference.endConversation(), then any subsequent call to an operation on the service reference will start a new conversation. If the conversation ends for any other reason (e.g. a timeout occurred), then until ServiceReference.getConversation().end() is called, the ConversationEndedException will be thrown by any conversational operation."
        Ben Smith created issue -

          People

          • Assignee:
            Unassigned
            Reporter:
            Ben Smith
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development