- From: David Hull <dmh@tibco.com>
- Date: Wed, 30 Aug 2006 16:57:06 -0400
- To: "xml-dist-app@w3.org" <xml-dist-app@w3.org>
- Message-id: <44F5FBA2.9020206@tibco.com>
Re-reading Noah's changes, I noticed something I'd missed the first couple of times around: In the absence of failure in the underlying protocol, this MEP consists of zero or more SOAP messages. The scope of a one-way MEP is limited to transmission of (nearly) identical messages from one sending node to zero or more receiving SOAP node(s); typically, in the case of multiple receivers, the messages differ only in their destinations. First, note that this re-writing of destination can also happen in any unicast protocol that forwards, and that it need not happen at all in a multicast protocol. As always the root cause is decoupling, not multicast. Decoupled messaging may be broken down into two interactions: Sender gives a message to the transport ("into the ether"), and transport gives message to receiver ("out of the ether"), with the second part happening zero or more times in general. Each of these, however, is a simple one-way interaction with a single sender and a single receiver. The transport may thus be seen as a pseudo-intermediary that participates in a unicast one-way MEP instance with the sender and with each receiver separately. It may also choose to re-write the destination of the message sent. I say "pseudo-intermediary" because this scheme is probably not kosher with respect to the SOAP model of a single path from sender to receiver. Strictly speaking we (probably) have N+1 SOAP messages sent: One from sender to transport, N from transport to receiver. (Alternatively we could define N message paths, each originating at the sender and terminating at a receiver and all going through a single intermediary which may rewrite the destination, but I'm leery of this. The sender should see only one path. I'm particularly uneasy with the case of zero receivers.) As I've said, I'm not sure that this solution fits well with the SOAP messaging model (frankly, that's been a recurring concern), and in particular how it interacts with intermediaries. It would seem to require that all intermediaries come between the sender and the transport or the transport and the receiver. This might not be a problem. E.g., an encrypting intermediary would always go between sender and transport, and conversely for decryption. I suppose it all depends on what we're doing with intermediaries. If there's a solid case for sending /to/ an intermediary /through/ a decoupled transport, we may need to re-think. Other than that, how does it fit the basic constraints I mentioned earlier? 1. Actual implementations do it. If I publish a message, or send it to a mailing list, or send a broadcast or IP multicast packet, multicast will happen. 2. Multicast looks like a single operation to the sender. 3. Multicast looks like a single operation to /each/ receiver. 4. The sender and all receivers are participating in the same operation, particularly for the purposes of logging and error reporting. We account for (1) by treating the transport as a forwarding agent. This seems quite natural. In many cases (e.g. email, IM) the connection between sender and receiver and a forwarding agent is explicit. In others one can at least make a plausible case for it. We account for (2) by treating the act of sending as a MEP instance between the sender and the transport. We account for (3) by treating the act of receiving as a MEP instance between the transport and the receiver. We don't seem to account for (4) directly, but (4) might not be a valid constraint anyway. In a decoupled world, senders and receivers may know nothing about each other. If they do, it's either because the transport provides means for them to do so, or because there's something in the messages themselves. Either one is compatible with the model given. For that matter, I don't think the current text really addresses this explicitly either, nor should it. What we've done here is to give up on modeling the sender/receiver interaction as a single MEP. I hasten to point out that this is inherent in decoupling and not peculiar to multicast. If I send you (and you only) email, I don't wait until you receive it. I send it and I'm done. Later, you pick it up. AFAICT, it makes much more sense to model this as two interactions than as one two-part interaction with an indefinite (and possibly infinite) wait between parts. How does this affect bindings? I'm not sure it does, at least not much. The core of a binding is the mapping between bundles of properties and transport-level messages, and that remains intact. Separating sending and receiving into different MEPs leaves room for the binding to describe things like the re-writing of the destination in some (but not all) transports. Since this is transport dependent, it has to be the binding that discusses this. Note that bindings to the existing text can talk about this, with or without Noah's amendment, since the sender and receiver have separate copies of the properties. The alternate I've proposed above just seems to provide a more natural place to do so.
Received on Wednesday, 30 August 2006 20:57:22 UTC