Exemplo: Armazenando em Cache Serviços da Web.

É possível construir um conjunto de políticas de cache e mensagens SOAP para um aplicativo de serviços da web.

A seguir há um exemplo de construção de um conjunto de políticas de cache para um aplicativo de serviços da Web simples. O aplicativo neste exemplo armazena cotações de ações e tem operações para ler, atualizar o preço e comprar um determinado símbolo de ação.

A seguir estão dois exemplos de mensagens SOAP que o aplicativo pode receber, com os cabeçalhos de Pedido HTTP acompanhantes.

A primeira amostra de mensagem contém uma mensagem SOAP para uma operação GetQuote, solicitando uma cotação à IBM®. Esta é uma operação de leitura que obtém seus dados do backend e é uma boa candidata para armazenamento em cache. Neste exemplo, a mensagem SOAP é armazenada em cache e um tempo limite é colocado em suas entradas para garantir que as cotas que ela retorna sejam atuais.

Exemplo de Mensagem 1
POST /soap/servlet/soaprouter  
HTTP/1.1  
Host: www.myhost.com  
Content-Type: text/xml; charset="utf-8"  
SOAPAction: urn:stockquote-lookup
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:getQuote xmlns:m="urn:stockquote">
<symbol>IBM</symbol>
</m:getQuote>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>     
O cabeçalho HTTP SOAPAction no pedido é definido na especificação de SOAP e é utilizado por servidores proxy HTTP para despachar pedidos para determinados servidores HTTP. O cache dinâmico do WebSphere Application Server pode utilizar esse cabeçalho em suas políticas de cache para criar IDs sem ter de analisar a mensagem SOAP.

O exemplo de mensagem 2 ilustra uma mensagem SOAP para uma operação BuyQuote. Embora a mensagem 1 seja armazenável em cache, esta mensagem não é, porque ela atualiza o banco de dados de backend.

Exemplo de Mensagem 2
POST /soap/servlet/soaprouter 
HTTP/1.1  
Host: www.myhost.com 
Content-Type: text/xml; charset="utf-8" 
SOAPAction: urn:stockquote-update
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:buyStock xmlns:m="urn:stockquote">
<symbol>IBM</symbol>
</m:buyStock>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>  

O gráfico a seguir ilustra como chamar métodos com as mensagens SOAP. Em termos de serviços da Web, especialmente o Web Services Description Language (WSDL), um serviço é uma coleção de operações, como getQuote e buyStock. Um espaço de nomes de elementos de corpo (urn:stockquote no exemplo) define um serviço, e o nome do primeiro elemento do corpo indica a operação.

Chamar métodos com SOAPmessages:caching

O exemplo a seguir mostra WSDL para a operação getQuote:

<?xml version="1.0"?>
<definitions name="StockQuoteService-interface"targetNamespace="http://www.getquote.com/StockQuoteService-interface"xmlns:tns="http://www.getquote.com/StockQuoteService-interface"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns=soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns="http://schemas.xmlsoap.org/wsdl/"<message name="SymbolRequest">
<part name="return" type="xsd:string"/>
</message>
<portType name="StockQuoteService">
<operation name="getQuote">
<input message="tns:SymbolRequest"/>
<output message="tns:QuoteResponse"/>
</operation>
</portType>
<binding name="StockQuoteServiceBinding"type="tns:StockQuoteService">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getQuote">
<soap:operation soapAction="urn:stockquote-lookup"/>
<input>
<soap:body use="encoded" namespace="urn:stockquote"encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:stockquotes"encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
</definition>

Para construir um conjunto de políticas de cache para aplicativo de serviços da Web, configure o cache dinâmico do WebSphere Application Server para reconhecer a operação de serviço armazenável em cache da operação.

O WebSphere Application Server examina o pedido HTTP para determinar se uma mensagem que chega pode ou não ser armazenada em cache, com base nas políticas de cache definidas para um aplicativo. Neste exemplo, buyStock e stock-update não são armazenados no cache, mas stockquote-lookup é armazenado no cache. No arquivo cachespec.xml para esse aplicativo da Web, as políticas de cache precisam de definição desses serviços para que o cache dinâmico possa manipular ambos SOAPAction e a operação de serviço.

O WebSphere Application Server usa a operação e o corpo da mensagem nos IDs de cache de serviços da Web, cada qual possuindo um componente associado a eles. Portanto, cada regra <cache-id> de serviços da Web contém apenas dois componentes. O primeiro é para a operação. Como é possível executar a operação stockquote-lookup utilizando um cabeçalho SOAPAction ou uma operação de serviço no corpo, é preciso definir dois elementos <cache-id> diferentes, um para cada método. O segundo componente é do tipo "corpo" e define como o WebSphere Application Server deve incorporar o corpo da mensagem no ID de cache. É possível utilizar um sinal numérico do corpo, embora seja válido utilizar a mensagem de entrada literal no ID.

O pedido HTTP de entrada é analisado pelo WebSphere Application Server para determinar quais regras <cache-id> correspondem. Em seguida, as regras são aplicadas para formar IDs de cache ou de invalidação.

O código de amostra a seguir é de um arquivo cachespec.xml que define regras de SOAPAction e de servicesOperation:

<cache>
<cache-entry>
	<class>webservice</class>
	<name>/soap/servlet/soaprouter</name>
	<sharing-policy>not-shared</sharing-policy>
	<cache-id>
		<component id="" type="SOAPAction">
			<value>urn:stockquote-lookup</value>
		</component>
		<component id="Hash" type="SOAPEnvelope"/>
			<timeout>3600</timeout>
			<priority>1<priority>
		</component>
	</cache-id>
	<cache-id>
		<component id="" type="serviceOperation">
			<value>urn:stockquote:getQuote</value>
		</component>
		<component id="Hash" type="SOAPEnvelope"/>
			<timeout>3600</timeout>
			<priority>1</priority>
		</component>
	</cache-id>
</cache-entry>
</cache>

Ícone que indica o tipo de tópico Tópico de Referência



Í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=rdyn_webservicescaching
Nome do arquivo: rdyn_webservicescaching.html