- From: <Noah_Mendelsohn@lotus.com>
- Date: Fri, 17 Nov 2000 16:25:38 -0500
- To: rayw@netscape.com (Ray Whitmer)
- Cc: xml-dist-app@w3.org
(long note warning) Ray Whitmer writes: >> I thought that binding to programming languages >> was the whole point of defining yet another >> way of serializing objects. Underlying this discussion is an important difference of opinion regarding the reasons for having an RPC model and associated data model. Let me briefly repeat the point of view that I expressed at our face to face meeting in Raleigh. Why I think we're confusing each other ====================================== A traditional application of earlier Remote Procedure Call or ORB systems might be explained informally as: "I've got these objects lying around, how can I access them remotely?" In this view, the objects and their interfaces are a given, and the detailed semantics of their correct use are wrapped up in particular programming languages (e.g. Java) or objects systems (e.g. COM or CORBA). When building an RPC system for this world, success is proving that you can remotely expose these interfaces in all their detail. If you subscribe to this view for XP (I don't), then it is clear why you would want to specify and verify language bindings. I believe that the interesting target for XP and SOAP is modeled very differently. Let's say that I want to offer a credit card validation service on the Web using XP RPC. I advertise (using WSDL, UDDI, talking to you on the phone or whatever) an XP interface which is a single method that takes as arguments a string credit card number and a decimal amount, and returns a Boolean to indicate whether the card is valid. Crucial point: in this scenario, I do not want to know anything about the programming technology used at one end of the line or another. Even if we have chosen a similar language (e.g. Java), it is none of my business whether you have bound the method call in the same way that I have. For example, I at the credit card company might very well be using a switch statement instead of a method invocation: switch(element.Name) { .... case checkCreditCard: ...validate credit card here... break; ... }; // yes I know Java doesn't // switch on strings, but // you get the idea Indeed, a second credit card company might implement the same XP interface in Java using methods after all. You as a client should be able to invoke either implementation transparently. Ray: perhaps now it is clearer why some of us are suggesting that language bindings should be beyond the scope of our specification, and why I argue for more emphasis on terminology like "service" than "method" or "procedure". What I think we need ==================== So let's think about what is necessary for success in the above scenarios (which I think should be included in our use cases). All parties involved need to understand that there are a set of abstractions provided by XP itself. These include: - the abstract notion of invoking a named procedure or service (checkCreditCard) - the abstract notion of supplying parameters, getting results, etc.. - a type system and data model usable for the parameters and results. This is what you can "see on the wire". Not coincidentally, SOAP 1.1 provides exactly these pieces in conjunction with its RPC. Making it easy to generate bindings to programming languages is a good thing, because many programmers will want automated tools to generate their XP skeletons. Still, we should not be generating or providing conformance rules for such mappings, except insofar as they follow directly from the contract "on the wire". I think the notion of data model needs a bit more emphasis. Everyone seems to agree on a more or less compatible notion of simple type as found in XML schemas (integer, string, etc.) To motivate the need for a data model, consider the following Java fragment: Employee e = new Employee(...); // register employee takes 2 arguments, // the employee to register and the // group manager, which may be the same // as they are in the example below. registerEmployee(e, e); .......... void registerEmployee(Employee newEmp, Employee manager) { // note == tests object identity if (newEmp == manager) System.out.println( "New employee is the group manager" ); } Java semantics make clear that the invoked method code (registerEmployee) can determine the identity of the two arguments. Question: can XP invocations carry such rich notions of identity? In SOAP they can, because the data model used by RPC supports a graph model; the two method arguments can be edges referring to the same (multiref) object, and the receiving code can unambiguously determine that a single object has been passed for both arguments. Again: I am not suggesting that there be a single unique mapping of a registerEmployee XP message to Java or to any other language; I am using the Java code above to illustrate the value of having a well specified and appropriate data model in conjunction with XP RPC. I can still use switch statements to process registerEmployee. I suspect this note will generate some discussion, but I should point out that I expect to be out of touch next week. Please take no offense if I am not there to respond to comments for awhile, and thanks for your patience with this long note. ------------------------------------------------------------------------ Noah Mendelsohn Voice: 1-617-693-4036 Lotus Development Corp. Fax: 1-617-693-8676 One Rogers Street Cambridge, MA 02142 ------------------------------------------------------------------------
Received on Friday, 17 November 2000 16:32:38 UTC