OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

ebxml-msg message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [ebxml-msg] general reliability of ebMS MEPs


Jacques,

As I remind myself of this proposal and think about today's meeting, two 
questions occur to me:

- Is everything in the 'Proposal for "Response reliability"' relevant only 
to option (2b) in your list near the top?

- (r1) is considerably weakened because, unlike ebXML 2.0, a Receiving RMP 
is not required to cache responses.  That is, "or else an error is notified 
to the request Producer (sender side)" will be an unfortunately common case 
for some Receiving RMP implementations.  What about imposing a requirement 
on the Receiving RMP that it must cache responses when the (2b) pattern and 
once-and-only-once are selected (for a particular incoming message)?

thanx,
	doug

On 10-Sep-04 00:43, Jacques Durand wrote:

> This is an outline on how different ebMS 3.0 MEPs would be handled by a 
> reliability component.
> This goes beyond the MEPs from Jeff that were related only to 
> asynchronous Request-response MEP.
> I do not detail here  how the RM-Reply is sent back, (Jeff did it for 
> the async Request-response), but instead focus on the
> 
> way the ebMS MEPs map to RMP operations, the reliability features 
> supported, and in particular, on the meaning of reliability for the 
> response leg of Request-response MEPs. Note in particular MEP #3.
> 
> Assuming three ebMS MEPs below, the following exchanges and reliability 
> support apply:
> 
> 1- ebMS One-way MEP (a SOAP One-way MEP with ebMS headers)
> 
> SOAP One-way MEP: Payload (PO BOD, etc.) ------> S-RMP.Submit -------> 
> R-RMP.Deliver -----> Payload(PO BOD, etc.)
> Reply patterns allowed: [callback, poll]
> 
> 2- ebMS Request-response MEP:
> 
> (a) asynchronous  (maps to two SOAP One-way MEPs)
> SOAP One-way MEP: Payload (PO BOD, etc.) ------> S-RMP.Submit ----> 
> R-RMP.Deliver ---> Payload(PO BOD, etc.)
> SOAP One-way MEP: Payload (PO Ack BOD, etc.) <--- S-RMP.Deliver <---- 
> (Payload + RM-Reply) R-RMP.Submit <--- Payload(PO Ack )
> 
> Reply patterns allowed in request: [callback, poll](also in response, if 
> it is a reliable message too)
> 
> (b) synchronous (maps to SOAP Request-response MEP, assuming binding to 
> a request-response transport)
> SOAP Request-response MEP [request]: Payload (PO BOD, etc.) ---> 
> S-RMP.Submit ----> R-RMP.Deliver --> Payload(PO BOD, etc.)
> 
> SOAP Request-response MEP [response]: Payload (POAck BOD, etc.) <--- 
> S-RMP.Notify <--- R-RMP.Respond <--- Payload(POAck BOD, etc.)
> 
> Reply patterns allowed in the request: [response, callback, poll]
> 
> 
> 3- ebMS Pull-Message MEP: (we assume here a signal is sent requesting 
> the message to be "pulled")
> 
> (a) asynchronous. (same pattern as for 2.a)
> (b) synchronous (actually maps to a SOAP Request-response MEP, not a 
> SOAP Response MEP as defined in SOAP 1.2 Part 2,
> because of an ebMS header in the request which is a "signal" - only 
> intended to MSH - to pull a message.)
> SOAP Request-response MEP [request]: ("pull" header element, no 
> payload.) ---> S-RMP.Submit ---> R-RMP.Deliver ---> pull signal to MSH
> 
> SOAP Request-response MEP [response]: Payload (PO BOD, etc.) <--- 
> S-RMP.Notify <--- R-RMP.Respond <--- Payload(PO BOD, etc.)
> 
> Reply patterns allowed in the *request*: [response, callback, poll] (see 
> explanation below)
> 
> 
> Comments on the above:
> ----------------------
> 
> - there is no consensus on the exact meaning of the term "synchronous", 
> which in the above case means
> a binding of SOAP Request-response to a "synchronous" underlying 
> protocol. For the lack of better term, I am using
> "synchronous" in this sense for now. (in some other definition - e.g. in 
> some RosettaNet literature, synchrony is not a transport property
> 
> but rather is a serialization of several request-response instances)
> 
> - All exchanges that map to SOAP One-way, can be subject to full 
> Reliability features as defined in WS-R.
> (except for for those features that don't apply to One-way, like 
> "response" reply pattern)
> 
> - If poll is used (synchronous ), that would require an additional SOAP 
> Request-response MEPs not mentioned here.
> 
> - finally, there has to be a way to indicate in an ebMS header which 
> type of MEP a message belongs to.
> The usage of RefToMessageId will help
> correlate a "response" to a "request", but there has to be a way to tell 
> if a request belongs to an ebMS One-way or Request-response.
> 
> 
> 
> Proposal for "Response reliability":
> ------------------------------------
> 
> There are two cases where reliability features as described in WS-R 
> would not apply
> to an ebMS business message : these are the cases above where the 
> message is submitted via "Respond" to the RMP (2.b and 3.b)
> 
> However, I propose that, *in ebMS* we refine the notion of reliability 
> of "ebMS Response messages"  (at least for the synchronous
> 
> case).
> Indeed it does not make sense to apply the same reliability definition 
> to Request messages and Response messages,
> as the mechanisms used for Requests don't apply (e.g. you can't just 
> "resend" a response if no Ack is obtained, due to
> tranport binding constraints, and duplicates simply won't occur unless 
> the Request was duplicated too, for the same reasons)
> 
> The Reliability of a Response (response leg of SOAP Request-response) is 
> defined as follows:
> 
> .(r1) the guaranteed delivery contract for an ebMS synchronous Response, 
> is that when a Request has been sent,
> a Response should be obtained by the Sender, or else an error is 
> notified to the request Producer (sender side).
> (so no Ack is used for the Response leg, and no independent automatic 
> resending of the response will be done.
> But guaranteed delivery of the Request would greatly ensure success for 
> the Response, so should be part of this contract.)
> 
> .(r2) the duplicate elimination contract for an ebMS synchronous 
> Response, simply includes the duplicate elimination of
> 
> the Request, combined with a Sender behavior that "once a response 
> received for a request has been delivered to the
> Request producer (sender side), then no other response correlating to 
> the same request will ever be delivered
> to the Request producer".
> 
> .(r3) the ordering contract for an ebMS synchronous Response, would be 
> based on the order of Request submission, NOT of
> Response submission: Response payloads would be delivered to Producer 
> (sender side) in the same order as the Requests
> have been submitted by this same Producer (to the MSH). A simple way to 
> enforce this, is to not send an ebMS Request message
> 
> before the previous Response was received.
> A second option, more efficient, would have the MSH enforce pipe-lining 
> on Sender side: Response messages would be
> delivered by MSH in same order as the requests have been submitted to 
> this MSH.
> 
> These definitions of Reliability for Responses can be enforced by the 
> Sender MSH with very little effort:
> they mostly leverage the reliability of the Request which is supported 
> by the RMP
> (even when the request is just a signal like in 3.b)
>  From an implementation viewpoint, (r1)(r2) and (r3simple option) all 
> can be implemented in MSH without duplicating
> RMP functionality. Even (r2) does not require persistence of IDs beyond 
> the ones of current on-going Request-responses
> which have by definition a short lifespan if synchronous.
> 
> The bottom line is a rather optimistic summary:
> - the definitions of reliability used for a Request message cannot be 
> applied to a Response message (in "synchronous"
> Request-response MEPs): they need be adjusted.
> - once adjusted, Response reliability appears to involve and leverage 
> the reliability of the Request leg. This makes
> it easy to implement Response reliability at MSH level, without 
> duplicating RMP functions.
> 
> 
> 


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]