Creación de servicios web con estado utilizando la infraestructura de recursos de servicios web

Puede implementar un servicio web con estado como un WS-Resource y hacer referencia a éste utilizando una referencia de punto final de WS-Addressing. Puede desarrollar WS-Resources de la misma forma que los servicios web normales, utilizando las mismas herramientas. Sin embargo, debe completar algunas tareas adicionales, como se describe en este tema.

Acerca de esta tarea

Complete esta tarea cuando desee crear un WS-Resource, que es una combinación de un recurso con estado y un servicio web a través del cual se accede al recurso. Para completar esta tarea debe tener conocimientos de las tareas estándar de desarrollo de servicios web y las especificaciones de WSRF (infraestructura de recursos de servicios web). Si desea una introducción a la especificación WSRF, consulte el documento de OASIS WSRF Primer.

Procedimiento

  1. Identifique o cree el componente del recurso al que WS-Resource proporciona el acceso. Este componente de recurso puede ser una entidad o sistema existente o bien un componente nuevo. No existen limitaciones en cuanto a cómo implementar el recurso; puede ser una clase Java™ sencilla, un enterprise bean de sesión sin estado, un bean de entidad respaldado por una base de datos relacional, un SDO (Service Data Object), un conector Java o cualquier otro componente.
  2. Identifique o cree un documento de esquema de propiedades de recurso para WS-Resource. Utilice IBM® Rational Application Developer for WebSphere o cualquier herramienta de creación de esquemas XML para crear un esquema XML. El esquema define el elemento XML complexType para el elemento raíz del documento de propiedades de recurso.
  3. Cree o genere un documento WSDL para el componente de servicio web del WS-Resource. Consulte Desarrollo de un archivo WSDL para aplicaciones JAX-RPC, si desea más información sobre cómo crear archivos WSDL.
  4. Edite el archivo WSDL para añadir un atributo ResourceProperties al elemento portType. Este atributo identifica el elemento raíz del documento de propiedades de recurso que ha creado anteriormente. Por ejemplo, si un servicio de impresora tiene un documento de propiedades de recurso con un elemento raíz <printer_properties> en el espacio de nombres http://example.org/printer, el elemento wsdl:portType tendría un aspecto parecido al siguiente:
    <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. Proporcione una forma para obtener una EndpointReference que indique el WS-Resource. Podría definir un elemento wsdl:operation llamado Create que devuelva un mensaje wsdl:output del tipo EndpointReferenceType. Consulte , si desea un ejemplo de la operación CreatePrinter que devuelva un objeto EndpointReference a un WS-Resource de Impresora. .
  6. Defina cada operación definida por WSRF que el WS-Resource soporta como un elemento hijo del elemento wsdl:portType. Para cada operación definida por WSRF soportada por el tipo de puerto, especifique el atributo WS-Addressing action en cada elemento wsdl:message. Por ejemplo, la operación GetResourceProperty se define en WSDL del modo siguiente:
    <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>
    El atributo wsaw:Action garantiza que los URI wsaw:Action definidos por WSRF se utilicen para los mensajes definidos por WSRF, en lugar de los valores de URI predeterminados.
    Nota: La especificación WS-ResourceProperties requiere la presencia de la operación GetResourceProperty si el atributo ResourceProperties está presente en el elemento PortType.
  7. Siga las instrucciones del paso 2 incluidas en Creación de una aplicación de servicio web JAX-RPC que utiliza el direccionamiento de servicios web para crear la implementación del WS-Resource, habilite al cliente para acceder al WS-Resource utilizando una referencia de punto final, y despliegue la aplicación.

Creación de un documento de esquema de propiedades de recurso para el WS-Resource

Los ejemplos siguientes corresponden a los pasos 2 a 4 del procedimiento. Los ejemplos muestran cómo una organización de TI podría utilizar una instancia de WS-Resource para gestionar una red de impresoras. Un WS-Resource es una combinación de un recurso y un servicio web a través del cual se accede al recurso. Los ejemplos presuponen que la organización está utilizando actualmente servicios web para gestionar su red de impresoras, como se describe en los ejemplos de Creación de una aplicación de servicio web JAX-RPC que utiliza el direccionamiento de servicios web.

Como se describe en la especificación de WS-Resource, que forma parte de la especificación de WSRF (Web Services Resource Framework - Infraestructura de recurso de servicios web), se accede a un WS-Resource mediante una referencia de punto final de WS-Addressing y se mantiene una vista sobre el estado del recurso en un documento XML de propiedades de recursos. El uso de un WS-Resource para representar recursos con estado proporciona un medio interoperativo para interactuar con la representación de estado de recursos utilizando mensajes de servicio web estandarizados.

Un WS-Resource debe tener un documento XML de propiedades de recurso, descrito por el esquema XML, que describe una vista determinada del estado del WS-Resource. El documento de esquema WS-Resource de impresora se muestra en el ejemplo siguiente.
<?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 definición WSDL para el servidor WS-Resource de impresora es la misma que la del ejemplo WS-Addressing, con la adición de un atributo ResourceProperties en el elemento wsdlPortType. Este atributo declara que el tipo de puerto se implementa mediante un WS-Resource en lugar de un servicio web genérico. Dado que la interfaz contiene una declaración de tipo de documento de propiedades de recurso, la interfaz también debe contener la operación GetResourceProperty definida por WSRF; la especificación WS-ResourceProperties requiere esta operación.
<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>

    <!-- Importar definiciones de WSDL para 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>

  <!-- El tipo de puerto tiene un atributo ResourceProperties que hace referencia al 
  documento de propiedades -->
  <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>

    <!-- La especificación WS-ResourceProperties necesita la operación GetResourceProperty -->
    <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>

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_wsrf
File name: twbs_wsrf.html