[dais-wg] DAIS mapping and WSRF embodiments

Simon Laws simon_laws at uk.ibm.com
Tue Nov 23 09:56:47 CST 2004


I've been thinking about the WS Resource document [1] embodiments and 
their impact on the mapping of the DAIS interfaces. Five embodiments are 
described;

1 ? WS Addressing using reference properties embodiment
2 ? WS Addressing without using reference properties embodiment
3 ? WSDL 1.1 service element embodiment
4 ? WSDL 1.1 binding element embodiment
5 ? WS Message Delivery embodiment

The focus of these embodiments is on how the information required to 
discriminate a resource is relayed from the service consumer to the 
service itself. The underlying assumption of WSRF is that resource 
discrimination information is separate from the application message being 
transferred. 

This assumption is evident in the messages defined by WS Resource 
Properties as they don't explicitly include resource discrimination 
information. For example, GetResourceProperty includes just the name of 
the resource property being retrieved; the resource discriminator is 
expected to flow in accordance with one of the embodiments. 

The DAIS mappings document [2] discusses different approaches that the 
DAIS working group could take in mapping its interfaces to WSDL. One of 
these approaches is WSRF. The other significant approach promotes the 
inclusion of resource discriminator information within application 
messages. 

We are in a position where we must decide whether to include resource 
discriminator information within DAIS defined messages or not. Or else 
define two sets of messages that satisfy the two mapping approaches. The 
definition of two sets of messages is not an attractive option. 

Currently the DAIS specifications present a mapping to WSDL which takes 
the WSRF approach. Following the GGF12 session we had on this subject I 
have been pondering if the WSRF embodiments provide a mechanism for 
satisfying both approaches. 

Using WS Resource Properties as an example the WSDL says (this may be 
little out of date)... 

... 
<xsd:element name="GetResourceProperty" type="xsd:QName" /> 

<xsd:element name="GetResourcePropertyResponse" > 
   <xsd:complexType> 
      <xsd:sequence> 
         <xsd:any minOccurs="0" maxOccurs="unbounded" /> 
      </xsd:sequence> 
   </xsd:complexType> 
</xsd:element> 
... 
<wsdl:message name="GetResourcePropertyRequest"> 
   <wsdl:part name="GetResourcePropertyRequest" 
element="wsrp:GetResourceProperty" /> 
</wsdl:message> 

<wsdl:message name="GetResourcePropertyResponse"> 
   <wsdl:part name="GetResourcePropertyResponse" 
element="wsrp:GetResourcePropertyResponse" /> 
</wsdl:message> 
... 
<wsdl:portType name="GetResourceProperty"> 
    <wsdl:operation name="GetResourceProperty"> 
       <wsdl:input name="GetResourcePropertyRequest" 
                             message="wsrpw:GetResourcePropertyRequest" /> 

       <wsdl:output name="GetResourcePropertyResponse" 
                             message="wsrpw:GetResourcePropertyResponse" 
/> 
       ?
     </wsdl:operation> 
</wsdl:portType> 

As already discussed these messages do not define how the resource, for 
which properties are being requested, is identified. Embodiment 1 [1] 
relies on the WS Addressing specification and says that the information 
required to discriminate the resource will be included in the reference 
property of an EPR that references the service and resource in question. 

Embodiments 3 and 4 rely only on existing WSDL 1.1 features. In particular 
embodiment 4, WSDL 1.1 binding element embodiment, uses the binding 
element to associate resource discriminator information with the message 
header. For example, the information required is specified as an extra 
message 

<wsdl:message name="CustomHeader"> 
        <wsdl:part name="ResourceIdentifier" element="dais:ResourceId"/> 
</wsdl:message> 

The following binding associates the new message with the existing message 
header

<wsdl:binding name="DaisEmbodiment4Binding" type=
"dais:DatabaseDataService"> 
            <wsdlsoap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http"/> 
            <wsdl:operation name="GetResourceProperty"> 
              <wsdlsoap:operation soapAction=""/> 
              <wsdl:input name="GetResourcePropertyRequestRequest"> 
                <wsdlsoap:header message="dais:CustomHeader" part=
"ResourceId" use="literal"/>               
                <wsdlsoap:body use="literal"/> 
              </wsdl:input> 
              <wsdl:output name="GetResourcePropertyResponse"> 
                <wsdlsoap:body use="literal"/> 
              </wsdl:output> 
                ... 
            </wsdl:operation> 
</wsdl:binding> 

How tooling interprets this may vary but it indicates that it is the 
responsibility of the client (either the application or infrastructure 
code) of the service to introduce the specified resource discriminator 
information into the header of the message. 

This example can be extended to include a DAIS specified message.

<wsdl:operation name="SQLExecute"> 
        <wsdl:input name="SQLExecuteRequest" message=
"wsdair:SQLExecuteRequestMessage" /> 
        <wsdl:output name="SQLExecuteResponse" message=
"wsdair:SQLExecuteResponseMessage" /> 
</wsdl:operation> 
.. 
 
<wsdl:binding name="DaisEmbodiment4Binding" type=
"dais:DatabaseDataService"> 
            <wsdlsoap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http"/> 
            <wsdl:operation name="GetResourceProperty"> 
              <wsdlsoap:operation soapAction=""/> 
              <wsdl:input name="GetResourcePropertyRequestRequest"> 
                <wsdlsoap:header message="dais:CustomHeader" part=
"ResourceId" use="literal"/>               
                <wsdlsoap:body use="literal"/> 
              </wsdl:input> 
              <wsdl:output name="GetResourcePropertyResponse"> 
                <wsdlsoap:body use="literal"/> 
              </wsdl:output> 
                ... 
            </wsdl:operation> 
            <wsdl:operation name="SQLExecute"> 
              <wsdlsoap:operation soapAction=""/> 
              <wsdl:input name="SQLExecuteRequest"> 
                <wsdlsoap:header message="dais:CustomHeader" part=
"ResourceId" use="literal"/>               
                <wsdlsoap:body use="literal"/> 
              </wsdl:input> 
              <wsdl:output name="SQLExecuteResponse"> 
                <wsdlsoap:body use="literal"/> 
              </wsdl:output> 
            </wsdl:operation> 
</wsdl:binding> 

This approach allows the DAIS working group to build one set of messages 
without regard for the resource discriminator and then introduce the 
resource discriminator at bind time. I can also support other embodiments, 
for example, "3.1 WS Addressing Using Reference Properties" without 
changing the messages that we have designed in DAIS. 

Thoughts?

Simon Laws
IBM Hursley - Emerging Technology Services

[1]  Web Services Resource 1.2 - 
http://www.oasis-open.org/committees/download.php/9547/wsrf-WS-Resource-1.2-draft-01.doc

[2] Scenarios for mapping DAIS concepts - 
http://forge.gridforum.org/projects/dais-wg/document/Scenarios_for_Mapping_DAIS_Concepts/en/3

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.ogf.org/pipermail/dais-wg/attachments/20041123/0f94a863/attachment.html 


More information about the dais-wg mailing list