Issue 3683: New issue: Server Side Flow Clarification (interceptors-rtf) Source: Oracle (Dr. Harold Carr, Ph.D., nobody) Nature: Uncategorized Issue Severity: Summary: While implementing PI we found an example that may raise a contradiction in the spec. Consider the following server-side flow: A.receive_request_service_contexts is called; B.receive_request_service_contexts is called; C.receive_request_service_contexts is called; D.receive_request_service_contexts is called; A.receive_request is called; B.receive_request is called; C.receive_request is called and raises a SystemException; B.send_exception is called; A.send_exception is called; This seems to be the correct flow given the statement in 21.3.9.2 receive_request: "If it does [raise a SYSTEM_EXCEPTION], no other Interceptors' receive_request operations are called. Those Interceptors on the Flow Stack are popped and their send_exception interception points are called." However, in 21.3.10.1 Server-side Flow Rules, it is stated that "If and only if receive_request_service_contexts runs to completion is an ending point called." This "if and only if" implies that an ending point is called if "receive_request_service_contexts" runs to completion. However, if an intermediate point fails, the paragraph in 21.3.9.2 implies that send_exception is called only for those whose intermediate points returned successfully. How can we clarify this apparent conflict? Resolution: Add the following example after the existing 2nd scenario in section 21.2.10.3 Server-side Flow Exam Revised Text: Scenario: B.receive_request raises an exception: A.receive_request_service_contexts is called; B.receive_request_service_contexts is called; C.receive_request_service_contexts is called; A.receive_request is called; B.receive_request is called and raises a SystemException; C.send_exception is called; B.send_exception is called; A.send_exception is called; In this scenario you can see that the flow for each Interceptor follows the rules. Since the receive_request_service_contexts starting point ran to completion then, no matter what happens in intermediate points, a "terminating" intercpetion point must be called for all interceptors. Actions taken: June 28, 2000: received issue January 9, 2001: closed issue Discussion: End of Annotations:===== Date: Wed, 28 Jun 2000 15:28:03 -0700 (PDT) Message-Id: <200006282228.PAA13880@shorter.eng.sun.com> From: Harold Carr To: interceptors-ftf@omg.org, issues@omg.org Subject: New issue: Server Side Flow Clarification Content-Type: text X-UIDL: -fO!!HV$e9D>A!!6[[d9 While implementing PI we found an example that may raise a contradiction in the spec. Consider the following server-side flow: A.receive_request_service_contexts is called; B.receive_request_service_contexts is called; C.receive_request_service_contexts is called; D.receive_request_service_contexts is called; A.receive_request is called; B.receive_request is called; C.receive_request is called and raises a SystemException; B.send_exception is called; A.send_exception is called; This seems to be the correct flow given the statement in 21.3.9.2 receive_request: "If it does [raise a SYSTEM_EXCEPTION], no other Interceptors' receive_request operations are called. Those Interceptors on the Flow Stack are popped and their send_exception interception points are called." However, in 21.3.10.1 Server-side Flow Rules, it is stated that "If and only if receive_request_service_contexts runs to completion is an ending point called." This "if and only if" implies that an ending point is called if "receive_request_service_contexts" runs to completion. However, if an intermediate point fails, the paragraph in 21.3.9.2 implies that send_exception is called only for those whose intermediate points returned successfully. How can we clarify this apparent conflict? Date: Wed, 28 Jun 2000 21:28:33 -0230 From: Matthew Newhook To: Harold Carr Cc: interceptors-ftf@omg.org, issues@omg.org Subject: Re: New issue: Server Side Flow Clarification Message-ID: <20000628212832.C5338@ooc.com> References: <200006282228.PAA13880@shorter.eng.sun.com> Mime-Version: 1.0 X-Mailer: Mutt 1.0pre3us In-Reply-To: <200006282228.PAA13880@shorter.eng.sun.com> Content-Type: text/plain; charset=us-ascii X-UIDL: WW-e9d7i!!l%Zd92Ie!! Hi, On Wed, Jun 28, 2000 at 03:28:03PM -0700, Harold Carr wrote: > > While implementing PI we found an example that may raise a > contradiction in the spec. Consider the following server-side flow: > > A.receive_request_service_contexts is called; > B.receive_request_service_contexts is called; > C.receive_request_service_contexts is called; > D.receive_request_service_contexts is called; > A.receive_request is called; > B.receive_request is called; > C.receive_request is called and raises a SystemException; > B.send_exception is called; > A.send_exception is called; > > This seems to be the correct flow given the statement in > 21.3.9.2 receive_request: > > "If it does [raise a SYSTEM_EXCEPTION], no other Interceptors' > receive_request operations are called. Those Interceptors on the Flow > Stack are popped and their send_exception interception points are > called." But interceptors A, B, C & D are on the "flow stack" since their receive_request_service_contexts method was called to completion. Therefore your example is wrong. send_exception should be called on all of the interceptors. > However, in 21.3.10.1 Server-side Flow Rules, it is stated that "If > and only if receive_request_service_contexts runs to completion is > an > ending point called." This "if and only if" implies that an ending > point is called if "receive_request_service_contexts" runs to > completion. However, if an intermediate point fails, the paragraph > in > 21.3.9.2 implies that send_exception is called only for those whose > intermediate points returned successfully. > > How can we clarify this apparent conflict? Regards, Matthew -- Matthew Newhook E-Mail: mailto:matthew@ooc.com Software Designer WWW: http://www.ooc.com Object Oriented Concepts, Inc. Phone: (709) 738-3725 From: butek@us.ibm.com Received: from southrelay02.raleigh.ibm.com (southrelay02.raleigh.ibm.com [9.37.3.209]) by e22.nc.us.ibm.com (8.9.3/8.9.3) with ESMTP id IAA09314 for ; Thu, 29 Jun 2000 08:33:23 -0500 Received: from d54mta03.raleigh.ibm.com (d54mta03.raleigh.ibm.com [9.67.228.35]) by southrelay02.raleigh.ibm.com (8.8.8m3/NCO v4.9) with SMTP id IAA38346 for ; Thu, 29 Jun 2000 08:54:48 -0400 Received: by d54mta03.raleigh.ibm.com(Lotus SMTP MTA v4.6.5 (863.2 5-20-1999)) id 8525690D.0046EEC4 ; Thu, 29 Jun 2000 08:54:46 -0400 X-Lotus-FromDomain: IBMUS To: interceptors-ftf@omg.org Message-ID: <8525690D.0046D9FF.00@d54mta03.raleigh.ibm.com> Date: Thu, 29 Jun 2000 08:53:52 -0400 Subject: Re: New issue: Server Side Flow Clarification Mime-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset=us-ascii X-UIDL: *'*e9XZ%e9&??!!"E#e9 I agree with Matthew. The reader DOES have to understand what is meant by the "Flow Stack" to make sense of that first paragraph, but section 21.3.3 on page 21-7 describes it fairly clearly, I think: To visualize the general flow rules, >>>think of each Interceptor as being put on a Flow Stack when a starting interception point completes successfully<<<. (An ORB need not implement the Flow Stack. It is presented simply as a visual cue.) An ending interception point is called for each Interceptor in the stack. Perhaps a cross-reference to that section would be useful, but the Flow Stack is referred to in quite a few places. I think it would just add clutter. Russell Butek butek@us.ibm.com Matthew Newhook on 06/28/2000 06:58:33 PM To: Harold Carr cc: interceptors-ftf@omg.org, issues@omg.org Subject: Re: New issue: Server Side Flow Clarification Hi, On Wed, Jun 28, 2000 at 03:28:03PM -0700, Harold Carr wrote: > > While implementing PI we found an example that may raise a > contradiction in the spec. Consider the following server-side flow: > > A.receive_request_service_contexts is called; > B.receive_request_service_contexts is called; > C.receive_request_service_contexts is called; > D.receive_request_service_contexts is called; > A.receive_request is called; > B.receive_request is called; > C.receive_request is called and raises a SystemException; > B.send_exception is called; > A.send_exception is called; > > This seems to be the correct flow given the statement in > 21.3.9.2 receive_request: > > "If it does [raise a SYSTEM_EXCEPTION], no other Interceptors' > receive_request operations are called. Those Interceptors on the Flow > Stack are popped and their send_exception interception points are > called." But interceptors A, B, C & D are on the "flow stack" since their receive_request_service_contexts method was called to completion. Therefore your example is wrong. send_exception should be called on all of the interceptors. > However, in 21.3.10.1 Server-side Flow Rules, it is stated that "If > and only if receive_request_service_contexts runs to completion is > an > ending point called." This "if and only if" implies that an ending > point is called if "receive_request_service_contexts" runs to > completion. However, if an intermediate point fails, the paragraph > in > 21.3.9.2 implies that send_exception is called only for those whose > intermediate points returned successfully. > > How can we clarify this apparent conflict? Regards, Matthew -- Matthew Newhook E-Mail: mailto:matthew@ooc.com Software Designer WWW: http://www.ooc.com Object Oriented Concepts, Inc. Phone: (709) 738-3725 Date: Thu, 29 Jun 2000 11:40:42 -0700 From: Harold Carr X-Mailer: Mozilla 4.51 [en] (WinNT; U) X-Accept-Language: en MIME-Version: 1.0 To: butek@us.ibm.com CC: interceptors-ftf@omg.org Subject: Re: New issue: Server Side Flow Clarification References: <8525690D.0046D9FF.00@d54mta03.raleigh.ibm.com> Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii X-UIDL: ^WOd9c+Ie9];d!!nUA!! Well, I agree to begin with (although I did not say it) - I was just pointing out a potential conflict. Perhaps we could at least add an example such as: A.receive_request_service_contexts is called; B.receive_request_service_contexts is called; C.receive_request_service_contexts is called; D.receive_request_service_contexts is called; A.receive_request is called; B.receive_request is called; C.receive_request is called and raises a SystemException; D.send_expeption is called; B.send_exception is called; A.send_exception is called; I think this would be useful since the strict FIFO behavior in all the other examples is not exhibited in this instance. Cheers, Harold butek@us.ibm.com wrote: > > I agree with Matthew. The reader DOES have to understand what is meant by > the "Flow Stack" to make sense of that first paragraph, but section 21.3.3 > on page 21-7 describes it fairly clearly, I think: > > To visualize the general flow rules, >>>think of each Interceptor as being > put on a Flow Stack when a starting interception point completes > successfully<<<. (An ORB need not implement the Flow Stack. It is presented > simply as a visual cue.) An ending interception point is called for each > Interceptor in the stack. > > Perhaps a cross-reference to that section would be useful, but the Flow > Stack is referred to in quite a few places. I think it would just add > clutter. > > Russell Butek > butek@us.ibm.com > > Matthew Newhook on 06/28/2000 06:58:33 PM > > To: Harold Carr > cc: interceptors-ftf@omg.org, issues@omg.org > Subject: Re: New issue: Server Side Flow Clarification > > Hi, > > On Wed, Jun 28, 2000 at 03:28:03PM -0700, Harold Carr wrote: > > > > While implementing PI we found an example that may raise a > > contradiction in the spec. Consider the following server-side flow: > > > > A.receive_request_service_contexts is called; > > B.receive_request_service_contexts is called; > > C.receive_request_service_contexts is called; > > D.receive_request_service_contexts is called; > > A.receive_request is called; > > B.receive_request is called; > > C.receive_request is called and raises a SystemException; > > B.send_exception is called; > > A.send_exception is called; > > > > This seems to be the correct flow given the statement in > > 21.3.9.2 receive_request: > > > > "If it does [raise a SYSTEM_EXCEPTION], no other Interceptors' > > receive_request operations are called. Those Interceptors on the Flow > > Stack are popped and their send_exception interception points are > > called." > > But interceptors A, B, C & D are on the "flow stack" since their > receive_request_service_contexts method was called to completion. > Therefore your example is wrong. send_exception should be called on all > of the interceptors. > > > However, in 21.3.10.1 Server-side Flow Rules, it is stated that "If > > and only if receive_request_service_contexts runs to completion is an > > ending point called." This "if and only if" implies that an ending > > point is called if "receive_request_service_contexts" runs to > > completion. However, if an intermediate point fails, the paragraph in > > 21.3.9.2 implies that send_exception is called only for those whose > > intermediate points returned successfully. > > > > How can we clarify this apparent conflict? > > Regards, Matthew > -- > Matthew Newhook E-Mail: mailto:matthew@ooc.com > Software Designer WWW: http://www.ooc.com > Object Oriented Concepts, Inc. Phone: (709) 738-3725 From: butek@us.ibm.com Received: from southrelay02.raleigh.ibm.com (southrelay02.raleigh.ibm.com [9.37.3.209]) by e22.nc.us.ibm.com (8.9.3/8.9.3) with ESMTP id OAA28128 for ; Thu, 29 Jun 2000 14:54:02 -0500 Received: from d54mta03.raleigh.ibm.com (d54mta03.raleigh.ibm.com [9.67.228.35]) by southrelay02.raleigh.ibm.com (8.8.8m3/NCO v4.9) with SMTP id PAA57806 for ; Thu, 29 Jun 2000 15:15:28 -0400 Received: by d54mta03.raleigh.ibm.com(Lotus SMTP MTA v4.6.5 (863.2 5-20-1999)) id 8525690D.0069C858 ; Thu, 29 Jun 2000 15:15:25 -0400 X-Lotus-FromDomain: IBMUS To: interceptors-ftf@omg.org Message-ID: <8525690D.00697F1C.00@d54mta03.raleigh.ibm.com> Date: Thu, 29 Jun 2000 15:12:15 -0400 Subject: Re: New issue: Server Side Flow Clarification Mime-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset=us-ascii X-UIDL: =W\d9Z`%!!=^Je9+ild9 Ah. Section 21.3.10.3 - Server-Side Flow Examples - should have this example. I thought it did. I agree with you that it's probably needed. Russell Butek butek@us.ibm.com Harold Carr on 06/29/2000 01:40:42 PM To: Russell Butek/Austin/IBM@IBMUS cc: interceptors-ftf@omg.org Subject: Re: New issue: Server Side Flow Clarification Well, I agree to begin with (although I did not say it) - I was just pointing out a potential conflict. Perhaps we could at least add an example such as: A.receive_request_service_contexts is called; B.receive_request_service_contexts is called; C.receive_request_service_contexts is called; D.receive_request_service_contexts is called; A.receive_request is called; B.receive_request is called; C.receive_request is called and raises a SystemException; D.send_expeption is called; B.send_exception is called; A.send_exception is called; I think this would be useful since the strict FIFO behavior in all the other examples is not exhibited in this instance. Cheers, Harold butek@us.ibm.com wrote: > > I agree with Matthew. The reader DOES have to understand what is meant by > the "Flow Stack" to make sense of that first paragraph, but section 21.3.3 > on page 21-7 describes it fairly clearly, I think: > > To visualize the general flow rules, >>>think of each Interceptor as being > put on a Flow Stack when a starting interception point completes > successfully<<<. (An ORB need not implement the Flow Stack. It is presented > simply as a visual cue.) An ending interception point is called for each > Interceptor in the stack. > > Perhaps a cross-reference to that section would be useful, but the Flow > Stack is referred to in quite a few places. I think it would just add > clutter. > > Russell Butek > butek@us.ibm.com > > Matthew Newhook on 06/28/2000 06:58:33 PM > > To: Harold Carr > cc: interceptors-ftf@omg.org, issues@omg.org > Subject: Re: New issue: Server Side Flow Clarification > > Hi, > > On Wed, Jun 28, 2000 at 03:28:03PM -0700, Harold Carr wrote: > > > > While implementing PI we found an example that may raise a > > contradiction in the spec. Consider the following server-side flow: > > > > A.receive_request_service_contexts is called; > > B.receive_request_service_contexts is called; > > C.receive_request_service_contexts is called; > > D.receive_request_service_contexts is called; > > A.receive_request is called; > > B.receive_request is called; > > C.receive_request is called and raises a SystemException; > > B.send_exception is called; > > A.send_exception is called; > > > > This seems to be the correct flow given the statement in > > 21.3.9.2 receive_request: > > > > "If it does [raise a SYSTEM_EXCEPTION], no other Interceptors' > > receive_request operations are called. Those Interceptors on the Flow > > Stack are popped and their send_exception interception points are > > called." > > But interceptors A, B, C & D are on the "flow stack" since their > receive_request_service_contexts method was called to completion. > Therefore your example is wrong. send_exception should be called on all > of the interceptors. > > > However, in 21.3.10.1 Server-side Flow Rules, it is stated that "If > > and only if receive_request_service_contexts runs to completion is an > > ending point called." This "if and only if" implies that an ending > > point is called if "receive_request_service_contexts" runs to > > completion. However, if an intermediate point fails, the paragraph in > > 21.3.9.2 implies that send_exception is called only for those whose > > intermediate points returned successfully. > > > > How can we clarify this apparent conflict? > > Regards, Matthew > -- > Matthew Newhook E-Mail: mailto:matthew@ooc.com > Software Designer WWW: http://www.ooc.com > Object Oriented Concepts, Inc. Phone: (709) 738-3725 Date: Thu, 29 Jun 2000 16:44:03 -0230 From: Matthew Newhook To: Harold Carr Cc: butek@us.ibm.com, interceptors-ftf@omg.org Subject: Re: New issue: Server Side Flow Clarification Message-ID: <20000629164403.A10880@ooc.com> References: <8525690D.0046D9FF.00@d54mta03.raleigh.ibm.com> <395B982A.9D30B88C@sun.com> Mime-Version: 1.0 X-Mailer: Mutt 1.0pre3us In-Reply-To: <395B982A.9D30B88C@sun.com> Content-Type: text/plain; charset=us-ascii X-UIDL: HAG!!,P3!!<\C!!o_6e9 HI, On Thu, Jun 29, 2000 at 11:40:42AM -0700, Harold Carr wrote: > Well, I agree to begin with (although I did not say it) - I was just > pointing out a potential conflict. Perhaps we could at least add an > example such as: > > A.receive_request_service_contexts is called; > B.receive_request_service_contexts is called; > C.receive_request_service_contexts is called; > D.receive_request_service_contexts is called; > A.receive_request is called; > B.receive_request is called; > C.receive_request is called and raises a SystemException; > D.send_expeption is called; > B.send_exception is called; > A.send_exception is called; > > I think this would be useful since the strict FIFO behavior in all the > other examples is not exhibited in this instance. Your example is wrong since send_exception is not called for interceptor C. Since receive_request_service_contexts ran to completion then no matter what happens a "terminating" intercpetion point must be called for interceptor C. The correct sequence reads: A.receive_request_service_contexts is called; B.receive_request_service_contexts is called; C.receive_request_service_contexts is called; D.receive_request_service_contexts is called; A.receive_request is called; B.receive_request is called; C.receive_request is called and raises a SystemException; D.send_expeption is called; C.send_expeption is called; B.send_exception is called; A.send_exception is called; > Cheers, > Harold Regards, Matthew -- Matthew Newhook E-Mail: mailto:matthew@ooc.com Software Designer WWW: http://www.ooc.com Object Oriented Concepts, Inc. Phone: (709) 738-3725 Date: Thu, 29 Jun 2000 12:18:55 -0700 From: Harold Carr X-Mailer: Mozilla 4.51 [en] (WinNT; U) X-Accept-Language: en MIME-Version: 1.0 To: Matthew Newhook CC: butek@us.ibm.com, interceptors-ftf@omg.org Subject: Re: New issue: Server Side Flow Clarification References: <8525690D.0046D9FF.00@d54mta03.raleigh.ibm.com> <395B982A.9D30B88C@sun.com> <20000629164403.A10880@ooc.com> Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii X-UIDL: E;dd9B > HI, > > On Thu, Jun 29, 2000 at 11:40:42AM -0700, Harold Carr wrote: > > Well, I agree to begin with (although I did not say it) - I was just > > pointing out a potential conflict. Perhaps we could at least add an > > example such as: > > > > A.receive_request_service_contexts is called; > > B.receive_request_service_contexts is called; > > C.receive_request_service_contexts is called; > > D.receive_request_service_contexts is called; > > A.receive_request is called; > > B.receive_request is called; > > C.receive_request is called and raises a SystemException; > > D.send_expeption is called; > > B.send_exception is called; > > A.send_exception is called; > > > > I think this would be useful since the strict FIFO behavior in all the > > other examples is not exhibited in this instance. > > Your example is wrong since send_exception is not called for interceptor > C. Since receive_request_service_contexts ran to completion then no > matter what happens a "terminating" intercpetion point must be called > for interceptor C. The correct sequence reads: > > A.receive_request_service_contexts is called; > B.receive_request_service_contexts is called; > C.receive_request_service_contexts is called; > D.receive_request_service_contexts is called; > A.receive_request is called; > B.receive_request is called; > C.receive_request is called and raises a SystemException; > D.send_expeption is called; > C.send_expeption is called; > B.send_exception is called; > A.send_exception is called; > > > Cheers, > > Harold > > Regards, Matthew > -- > Matthew Newhook E-Mail: mailto:matthew@ooc.com > Software Designer WWW: http://www.ooc.com > Object Oriented Concepts, Inc. Phone: (709) 738-3725