Création de services Web avec état à l'aide des spécifications WSRF (Web Services Resource Framework)

Vous pouvez implémenter un service Web avec état en tant que ressource WS-Resource, et le référencer à l'aide d'une référence de noeud final WS-Addressing. Les ressources WS-Resources peuvent être développées de la même manière que les services Web habituels et à l'aide des même outils. Cependant certaines tâches supplémentaires sont nécessaires, comme l'explique cette rubrique.

Pourquoi et quand exécuter cette tâche

Effectuez cette tâche lorsque vous souhaitez créer une ressource WS-Resource, qui constitue une combinaison d'une ressource avec état et d'un service Web permettant d'accéder à la ressource. Pour effectuer cette tâche, il est nécessaire de connaître les bases du développement de services Web, ainsi que les spécifications WSRF (Web Services Resource Framework). Le document OASIS WSRF Primer présente les spécifications WSRF.

Procédure

  1. Identifiez ou créez le composant de ressource auquel la ressource WS-Resource permet d'accéder. Ce composant de ressource peut être une entité ou un système existant, ou bien un nouveau composant. Vous pouvez choisir librement la méthode d'implémentation de la ressource : il peut s'agir d'une simple classe Java™, d'un bean enterprise session sans état, d'un bean entity associé à une base de données relationnelle, d'un objet SDO (Service Data Object), d'un connecteur Java ou de tout autre composant.
  2. Identifiez ou créez un document de schéma de propriétés de ressources pour WS-Resource. Pour créer un schéma XML, utiliez IBM® Rational Application Developer for WebSphere ou n'importe quel outil de création de schéma XML. Le schéma définit l'élément XML complexType de l'élément racine du document de propriétés de ressource.
  3. Créez ou générez un document WSDL pour le composant de service Web de WS-Resource. Pour plus d'informations sur la création de fichier WSDL, voir Développement d'un fichier WSDL pour les applications JAX-RPC.
  4. Editez le fichier WSDL afin d'ajouter un attribut ResourceProperties à l'élément portType. Cet attribut identifie l'élément racine du document de propriétés de ressource que vous avez créé précédemment. Par exemple, si un service d'impression nommé "Printer" est associé à un document de propriétés de ressource avec un élément racine <printer_properties> dans l'espace de nom http://example.org/printer, alors l'élément wsdl:portType sera du type suivant :
    <wsdl:portType xmlns:pr="http://example.org/printer"  
                   xmlns:wsrf-rp="http://docs.oasis-open.org/wsrf/rp-2"
                   name="Printer" wsrf-rp:ResourceProperties="pr:printer_properties">
  5. Fournissez un moyen d'obtenir une référence de noeud final (EndpointReference) qui pointe sur WS-Resource. Vous pouvez définir un élément wsdl:operation appelé Create, qui renvoie un message wsdl:output de type EndpointReferenceType. La section contient un exemple de l'opération CreatePrinter qui renvoie un objet EndpointReference pour une ressource WS-Resource "Printer".
  6. Définissez chaque opération définie par WSRF que WS-Resource prend en charge en tant qu'élément enfant de l'élément wsdl:portType. Pour chaque opération définie par WSRF prise en charge par le type de port, définissez l'attribut WS-Addressing action sur chaque élément wsdl:message. Par exemple, l'opération GetResourceProperty est définie dans WSDL comme suit :
    <wsdl:operation name="GetResourceProperty" 
                    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
                    xmlns:wsrf-rpw="http://docs.oasis-open.org/wsrf/rpw-2">
      <wsdl:input name="GetResourcePropertyRequest" message="wsrf-rpw:GetResourcePropertyRequest"
        wsaw:Action="http://docs.oasis-open.org/wsrf/rpw-2/GetResourceProperty/GetResourcePropertyRequest"/>
      <wsdl:output name="GetResourcePropertyResponse" message="wsrf-rpw:GetResourcePropertyResponse"
        wsaw:Action="http://docs.oasis-open.org/wsrf/rpw-2/GetResourceProperty/GetResourcePropertyResponse"/>
      ...
    </wsdl:operation>
    L'attribut wsaw:Action garantit que les URI wsaw:Action définis par WSRF sont utilisés pour les messages définis par WSRF, au lieu des valeurs URI par défaut.
    Remarque : La spécification WS-ResourceProperties requiert la présence de l'opération GetResourceProperty si l'attribut ResourceProperties est présent sur l'élément PortType.
  7. Suivez les instructions à partir de l'étape 2 dans Création d'une application de service Web JAX-RPC qui utilise WS-Addressing pour créer l'implémentation de WS-Resource, activez l'accès du client à WS-Resource à l'aide d'une référence de noeud final et déployez l'application.

Création d'un document de schéma de propriétés de ressources pour la ressource WS-Resource

Les exemples suivants correspondent aux étapes 2 à 4 de la procédure. Les exemples montrent comment une organisation informatique peut utiliser une instance WS-Resource pour gérer un réseau d'imprimantes. Une WS-Resource représente la combinaison d'une ressource et d'un service web par lequel la ressource est accessible. Les exemples supposent que l'organisation utilise actuellement les services Web pour gérer son réseau d'imprimantes, comme dans les exemples de Création d'une application de service Web JAX-RPC qui utilise WS-Addressing.

Comme décrit dans la spécification WS-Resource, qui fait partie de la spécification WSRF (Services Resource Framework), une ressource WS-Resource est accessible via une référence de noeud final WS-Addressing et l'état de cette ressource est conservé dans un document XML de propriétés de ressources. L'utilisation d'une ressource WS-Resource pour représenter les ressources avec état fournit une interopérabilité pour interagir avec la représentation de l'état des ressources à l'aide de messages de service Web standardisés.

Une ressource WS-Resource doit être associée à un document XML de propriétés de ressource décrit par le schéma XML, lequel présente une vue particulière de l'état de la ressource WS-Resource. Le document du schéma WS-Resource d'imprimante est représenté ci-dessous.
<?xml version="1.0"?>
<xsd:schema ...
   xmlns:pr="http://example.org/printer.xsd" 
   targetNamespace="http://example.org/printer.xsd" >
 <xsd:element name="printer_properties">
   <xsd:complexType>
     <xsd:sequence>
        <xsd:element ref="pr:printer_reference" />
        <xsd:element ref="pr:printer_name" />
        <xsd:element ref="pr:printer_state" />
        <xsd:element ref="pr:printer_accepting_jobs" />
        <xsd:element ref="pr:queued_job_count" />
        <xsd:element ref="pr:operations_supported" />
        <xsd:element ref="pr:document_format_supported" />
        <xsd:element ref="pr:job_hold_until_default" 
                     minOccurs="0" />
        <xsd:element ref="pr:job_hold_until_supported" 
                     minOccurs="0" 
                     maxOccurs="unbounded" />
        <xsd:element ref="wsrf-rp:QueryExpressionDialect" 
                     maxOccurs="unbounded" />
        <xsd:element ref="pr:job_properties" minOccurs="0" 
                     maxOccurs="unbounded" />
     </xsd:sequence>
   </xsd:complexType>
 </xsd:element>
 ...
</schema>
La définition WSDL pour le serveur WS-Resource d'imprimante est la même que dans l'exemple WS-Addressing, mais contient en plus un attribut ResourceProperties sur l'élément wsdlPortType. Cet attribut déclare que le type de port est implémenté par une ressource WS-Resource et non par un service Web générique. Comme l'interface contient une déclaration de type de document de propriétés de ressources, l'interface doit également contenir l'opération GetResourceProperty définie par WSRF. Cette opération est exigée dans la spécification WS-ResourceProperties.
<wsdl:definitions targetNamespace="http://example.org/printer" ...
             xmlns:wsrf-rp="http://docs.oasis-open.org/wsrf/rp-2" 
             xmlns:wsrf-rpw="http://docs.oasis-open.org/wsrf/rpw-2"
             xmlns:wsa="http://www.w3.org/2005/08/addressing"
             xmlns:pr="http://example.org/printer">
  <wsdl:types>
    ...
    <xsd:schema...>
      <xsd:element name="CreatePrinterRequest"/>
      <xsd:element name="CreatePrinterResponse" 
                   type="wsa:EndpointReferenceType"/>
	    <xsd:import namespace="http://www.w3.org/2005/08/addressing" 
                  schemaLocation="http://www.w3.org/2005/08/addressing/ws-addr.xsd"/>
	    <xsd:import namespace=http://docs.oasis-open.org/wsrf/rp-2
                  schemaLocation="http://docs.oasis-open.org/wsrf/rp-2.xsd"/>
    </xsd:schema>

    <!-- Import WSDL definitions for GetResourceProperties -->
	  <wsdl:import namespace="http://docs.oasis-open.org/wsrf/rpw-2" 
                 location="http://docs.oasis-open.org/wsrf/rpw-2.wsdl" />

  </wsdl:types>
  <wsdl:message name="CreatePrinterRequest">
    <wsdl:part name="CreatePrinterRequest" 
               element="pr:CreatePrinterRequest" />
  </wsdl:message>
  <wsdl:message name="CreatePrinterResponse">
    <wsdl:part name="CreatePrinterResponse" 
               element="pr:CreatePrinterResponse" />
  </wsdl:message>

  <!-- The port type has a ResourceProperties attribute that references the resource 
  properties document -->
  <wsdl:portType name="Printer" wsrf-rp:ResourceProperties="pr:printer_properties">
    <wsdl:operation name="createPrinter">
      <wsdl:input name="CreatePrinterRequest" 
                  message="pr:CreatePrinterRequest" />
      <wsdl:output name="CreatePrinterResponse"
                   message="pr:CreatePrinterResponse" />
    </wsdl:operation>

    <!-- The GetResourceProperty operation is required by the WS-ResourceProperties specification -->
    <wsdl:operation name="GetResourceProperty" 
        <wsdl:input name="GetResourcePropertyRequest" 
                    message="wsrf-rpw:GetResourcePropertyRequest" 
                    wsa:Action="http://docs.oasis-open.org/wsrf/rpw-2/GetResourceProperty/
                                                                        GetResourcePropertyRequest"/>
        <wsdl:output name="GetResourcePropertyResponse"
                     message="wsrf-rpw:GetResourcePropertyResponse" 
                     wsa:Action="http://docs.oasis-open.org/wsrf/rpw-2/GetResourceProperty/
                                                                       GetResourcePropertyResponse"/>
        <wsdl:fault name="ResourceUnknownFault"
                    message="wsrf-rw:ResourceUnknownFault"/>
        <wsdl:fault name="InvalidResourcePropertyQNameFault"
                    message="wsrf-rpw:InvalidResourcePropertyQNameFault" />     
    </wsdl:operation>
  </wsdl:portType>
</wsdl:definitions>

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_wsrf
Nom du fichier : twbs_wsrf.html