Criando Serviços da Web Stateful Usando o Web Services Resource Framework

É possível implementar um serviço da Web stateful como um WS-Resource, e referenciar esse serviço usando uma referência de terminal de WS-Addressing. Você desenvolve WS-Resources da mesma maneira que os serviços da Web comuns, e usando as mesmas ferramentas. Entretanto, é necessário concluir algumas tarefas adicionais conforme descrito neste tópico.

Sobre Esta Tarefa

Complete essa tarefa quando quiser criar um WS-Resource, que é uma combinação de recurso stateful e um serviço da Web por meio do qual o recurso é acessado. Para concluir essa tarefa você deve ter conhecimento das tarefas de desenvolvimento de serviços da Web padrão, e das especificações Web Services Resource Framework (WSRF). Para obter uma introdução para as especificações do WSRF, leia o documento OASIS WSRF Primer.

Procedimento

  1. Identifique ou crie o componente do recurso para o qual o WS-Resource fornece acesso. Esse componente do recurso pode ser um sistema ou entidade existente ou um novo componente. Não há restrições sobre como implementar o recurso; ele pode ser uma classe Java™ simples, um enterprise bean de sessão sem preservação de estado, um bean de entidade suportado por um banco de dados relacional, um SDO (Service Data Object), um conector Java ou qualquer outro componente.
  2. Identifique ou crie um documento de esquema de propriedades de recurso para o WS-Resource. Utilize o IBM® Rational Application Developer para WebSphere, ou qualquer ferramenta de autoria de esquema XML para criar um esquema XML. O esquema define o elemento complexType XML para o elemento raiz do documento de propriedades de recurso.
  3. Crie ou gere um documento WSDL para o componente de serviço da Web do WS-5Resource. Consulte Desenvolvendo um Arquivo WSDL para Aplicativos JAX-RPC para obter informações sobre como criar arquivos WSDL.
  4. Edite o arquivo WSDL para incluir um atributo ResourceProperties no elemento portType. Esse atributo identifica o elemento raiz do documento de propriedades de recurso criado anteriormente. Por exemplo, se um serviço Printer tiver um documento de propriedades do recurso com um elemento-raiz <printer_properties> no espaço de nomes http://example.org/printer, o elemento wsdl:portType poderá ser semelhante ao seguinte:
    <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. Forneça um meio para obter um EndpointReference que aponte para o WS-Resource. Você pode definir um elemento wsdl:operation chamado Create que retorna uma mensagem wsdl:output do tipo EndpointReferenceType. Consulte para obter um exemplo de uma operação CreatePrinter que retorna um objeto EndpointReference para um WS-Resource Printer.
  6. Defina cada operação definida pelo WSRF que o WS-Resource suporta como um elemento filho do elemento wsdl:portType. Para cada operação definida pelo WSRF suportada pelo tipo de porta, especifique o atributo action do WS-Addressing em cada elemento wsdl:message. Por exemplo, a operação GetResourceProperty é definida no WSDL como segue:
    <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>
    O atributo wsaw:Action garante que as URIs wsaw:Action definidas pelo WSRF sejam utilizadas para as mensagens definidas pelo WSRF em vez dos valores padrão da URI.
    Nota: A especificação WS-ResourceProperties exigirá a presença da operação GetResourceProperty se o atributo ResourceProperties estiver presente no elemento PortType.
  7. Siga as instruções da etapa 2 em Criando um Aplicativo de Serviço da Web JAX-RPC que Usa Endereçamento de Serviço da Web para criar a implementação do WS-Resource, permitir que o cliente acesse o WS-Resource utilizando uma referência de terminal e implementar o aplicativo.

Criando um Documento de Esquema de Propriedades de Recursos para o WS-Resource

Os seguintes exemplos correspondem às etapas 2 à 4 no procedimento. Os exemplos mostram como uma organização de TI pode usar uma instância WS-Resource para gerenciar uma rede de impressoras. Um WS-Resource é uma combinação de um recurso e de um serviço da Web por meio do qual o recurso é acessado. Os exemplos assumem que a organização está atualmente usando os serviços da Web para gerenciar sua rede de impressoras, conforme configurado nos exemplos no Criando um Aplicativo de Serviço da Web JAX-RPC que Usa Endereçamento de Serviço da Web.

Conforme descrito na especificação WS-Resource, que faz parte da especificação WSRF (Web Services Resource Framework), um WS-Resource é acessado por meio de uma referência de terminal do WS-Addressing e uma visualização no estado de seu recurso é mantida em um documento XML de propriedades de recursos. O uso de um WS-Resource, para representar recursos stateful, fornece um meio interoperável de se interagir com a representação de estado dos recursos utilizando mensagens de serviço da Web padronizadas.

Um WS-Resource deve ter um documento XML de propriedades de recursos, descrito pelo esquema XML, que descreve uma visualização particular do estado do WS-Resource. O documento de esquema WS-Resource da impressora é ilustrado no exemplo a seguir.
<?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>
A definição de WSDL para o servidor Printer WS-Resource é a mesma que no exemplo do WS-Addressing, com a adição de um atributo ResourceProperties no elemento wsdlPortType. Esse atributo declara que o tipo de porta é implementado por um WS-Resource e não por um serviço da Web genérico. Como a interface contém uma declaração de tipo de documento de propriedades de recursos, a interface também deve conter a operação GetResourceProperty definida pelo WSRF; essa operação é necessária pela especificação 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>

    <!-- Importação de definições 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>

  <!-- O tipo de porta tem um atributo ResourceProperties que referencia o 
  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>

    <!-- A operação GetResourceProperty é requerida pela especificação WS-ResourceProperties -->
    <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>

Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_wsrf
Nome do arquivo: twbs_wsrf.html