Exemple : Mise en cache des services Web

Vous pouvez créer un ensemble de règles de cache et de messages SOAP pour une application de services Web.

Voici un exemple de création d'un ensemble de règles de cache pour une simple application de services Web. L'application indiquée dans cet exemple stocke des cotations boursières et comporte des opérations de lecture, de mise à jour du prix d'un symbole boursier donné et d'acquisition de ce dernier.

Voici deux exemples de messages SOAP pouvant être reçus par l'application, ainsi que des en-têtes de requête HTTP associés :

Le premier exemple de message contient un message SOAP (Simple Object Access Protocol) pour une opération GetQuote demandant une cotation pour IBM®. Il s'agit d'une opération en lecture seule qui extrait ses données du système dorsal un bon candidat pour la mise en cache. Dans cet exemple, le message SOAP est mis en cache et un délai d'expiration est appliqué à ses entrées afin de garantir que les cotations qu'il renvoie ne sont pas périmées.

Exemple de message 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>     
L'en-tête HTTP SOAPAction de la requête est défini dans la spécification SOAP et est utilisé par les serveurs proxy HTTP pour envoyer des requêtes à des serveurs HTTP particuliers. La mémoire cache dynamique de WebSphere Application Server peut utiliser cet en-tête dans ses règles de cache afin de créer des ID sans avoir à analyser le message SOAP.

L'exemple de message 2 illustre un message SOAP pour une opération BuyQuote. Alors que le message 1 est mémorisable en cache, ce message-là ne l'est pas parce qu'il met à jour la base de données dorsale.

Exemple de message 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>  

Le graphique ci-après illustre la procédure d'appel des méthodes à l'aide des messages SOAP. Dans la terminologie des services Web, notamment WSDL (Web Services Description Language), un service est une collection d'opérations, telles que getQuote et buyStock. Un espace de nom d'élément de corps (urn:stockquote dans l'exemple) définit un service, et le nom du premier élément de corps indique l'opération.

Appel des méthodes avec SOAPmessages:caching

Voici un exemple de WSDL pour l'opération 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>

Pour créer un ensemble de règles de cache pour une application de services Web, configurez la mémoire cache dynamique de WebSphere Application Server de sorte qu'elle reconnaisse le service mémorisable de l'opération.

WebSphere Application Server inspecte la requête HTTP pour déterminer si un message entrant peut être mis en cache, en fonction des règles de cache définies pour une application. Dans cet exemple, les opérations buyStock et stock-update (mise à jour d'actions) ne sont pas mises en cache, contrairement à stockquote-lookup (consultation de cotation boursière). Dans le fichier cachespec.xml de cette application Web, les règles de cache doivent être définies pour ces services de sorte que la mémoire cache dynamique puisse traiter SOAPAction et l'opération de maintenance.

WebSphere Application Server utilise l'opération et le corps de message des ID cache de services Web, chacun étant associé à un composant. Par conséquent, chaque règle <cache-id> des services Web ne peut contenir que deux composants. Le premier est réservé à l'opération. Dans la mesure où vous pouvez effectuer l'opération de consultation de cotation boursière à l'aide d'un en-tête SOAPAction ou d'une opération de service dans le corps, vous devez définir deux éléments <cache-id> différents, un pour chaque méthode. Le second composant est de type "corps" et définit la façon dont WebSphere Application Server doit incorporer le corps de message dans l'ID cache. Vous pouvez utiliser un hachage du corps, même s'il est admis d'utiliser le message entrant littéral dans l'ID.

La requête HTTP entrante est analysée par WebSphere Application Server pour déterminer la règle <cache-id> qui correspond. Les règles sont ensuite appliquées pour former des ID de cache ou d'invalidation.

Voici un exemple de code d'un fichier cachespec.xml définissant des règles SOAPAction et 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>

Icône indiquant le type de rubrique Rubrique de référence



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=rdyn_webservicescaching
Nom du fichier : rdyn_webservicescaching.html