- From: Francis McCabe <fgm@fla.fujitsu.com>
- Date: Sun, 16 Mar 2003 21:25:47 -0800
- To: www-ws-arch@w3.org, public-ws-chor@w3.org
According to the WS-choreography charter, and according to the WSA requirements, it is stated that Web services should be recursively composable. Let me first of all state that I am personally extremely sympathetic with this point of view; as it represents a well-trodden route to large scale systems. However, I have to say that this goal appears to conflict with another goal/property of Web services: that a Web service is identified using a URI. (The URI part is not relevant to the following discussion, but the identification bit is.) The issue does revolve around names, and please forgive me on two counts: if I am wrong then let me know and I will be grateful and this is a little technical. 1. Consider what it means for a Web service to be composed. From the outside a composed Web service should be indistinguishable from a `primitive' Web service -- agent interacting with it should be able to do so in essentially the same way that they interact with directly implemented Web services. Yet internally, looking at how the composite Web service is realized one should be able to see the `parts' -- presumably as Web services also. 1.a. If this assumption is not correct, then we can stop now. However, think about it: we abandon the explicit goal of Web service compositionality. We can still describe the choreography of a set of Web services interacting together; but we do not attempt to make that choreography have the same essential properties of a Web service -- that it has a name, for example. 1.b One may `compose' a Web service by constructing a new primitive Web service that engages in the composite choreography and acts as a (de-)multiplexor for the component Web services. However, this is not really composition in the normal sense as this `front end' is simply another primitive Web service; in particular, significant code writing is required, not to mention resource management. 2. Suppose that we wish to compose Web services; i.e., that a choreographed set of Web services may be considered as a bona-fide Web service in its own right. We interact with Web services by exchanging messages; in particular by sending a message to the service as identified by its URI. However, composite Web services cannot directly send or receive messages; so to actually send a message to a composite Web service requires sending it to one of its component services -- ultimately a primitive component. But that primitive Web service is a service in its own right and has its own identifier; which is not the same as the identifier of the composite Web service: so, which identifier should the outside agent use, and where might it get them from? Since we are not presuming an intermediary we have a fundamental ambiguity: a Web service agent interacting with a composite Web service may be sending and receiving messages from any of the component Web services; each of which has its own identifier; and each of which is almost certainly ignorant of the identifier of the composite Web service itself. This results in a scenario where a composite Web service has potentially n+1 names associated with it; and any agent interacting with it has to be aware of all of them. 3. There are a number of ways of resolving this: 3a. Associating the identifier of a Web service with its description rather than the computational resource. This would allow the n+1 names to be `hidden' behind 1 name: the URI of the composite Web service description; with the `low-level' function of associating particular messages' destinations and sources being effectively masked by the description. Note that this would mean that descriptions become a MUST have aspect of Web services. 3b. Not associating an identifier with a Web service at all: Web services would become epiphenomena of the interaction of Web service agents. I.e., the WSDL description would identify the identity of the providing agent for each message exchange pattern, rather than any Web service itself. 3c. Abandoning the explicit goal of Web service compositionality. 4. This is all about names: non-structural names are inherently non-composable. And names are pretty fundamental to the Web. (A non-structural name is one which cannot reflect the structure of the resource it is identified with. URIs are non-structural in this sense, LISP meta-structures that denote programs are structural; as might be a Web service choreography description.) Again, if I have missed something obvious, please forgive me, and enlighten me. Frank McCabe From WordNet (r) 1.7: epiphenomenon n : a secondary phenomenon that is a by-product of another phenomenon
Received on Monday, 17 March 2003 11:41:16 UTC