Beispiel: Caching von Web-Services

In diesem Artikel wird beschrieben, wie Sie eine Gruppe von Cacherichtlinien und SOAP-Nachrichten für eine Web-Service-Anwendung erstellen können.

Es folgt ein Beispiel für die Erstellung einer Gruppe von Cacherichtlinien für eine einfache Web-Service-Anwendung. Die Anwendung in diesem Beispiel speichert Börsennotierungen und besitzt Operationen, mit denen sie ein bestimmtes Börsensymbol lesen, dessen Preis aktualisieren und einen Kaufvorgang ausführen kann.

Es folgen zwei Beispiele für SOAP-Nachrichten mit begleitenden HTTP-Anforderungsheadern, die die Anwendung empfangen kann.

Das erste Nachrichtenbeispiel enthält eine SOAP-Nachricht für eine GetQuote-Operation, mit der eine Notierung für IBM® angefordert wird. Das ist eine Read-Only-Operation, die ihre Daten vom Back-End-System abruft und problemlos zwischengespeichert werden kann. In diesem Beispiel wird die SOAP-Nachricht zwischengespeichert, es wird ein Zeitlimit für deren Einträge definiert, um sicherzustellen, dass die zurückgegebenen Notierungen aktuell sind.

Nachrichtenbeispiel 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>  
Der SOAPAction-HTTP-Header in der Anforderung ist in der SOAP-Spezifikation definiert und wird von HTTP-Proxy-Servern verwendet, um Anforderungen bestimmten HTTP-Anforderungen zuzuteilen. Der dynamische Cache von WebSphere Application Server kann diesen Header in seinen Cacherichtlinien für die Erstellung von IDs verwenden, ohne die SOAP-Nachricht syntaktisch analysieren zu müssen.

Nachricht 2 veranschaulicht eine Nachricht für eine BuyQuote-Operation. Diese Nachricht kann im Gegensatz zu Nachricht 1 nicht zwischengespeichert werden, da sie die Back-End-Datenbank aktualisiert.

Nachrichtenbeispiel 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>

Die folgende Abbildung veranschaulicht, wie Methoden mit den SOAP-Nachrichten aufgerufen werden. Im Kontext von Web-Services, insbesondere WSDL (Web Services Description Language), ist ein Service eine Sammlung von Operationen, wie z. B. getQuote und buyStock. Der Namespace eines Hauptteilelements (im Beispiel urn:stockquote) definiert einen Service, und der Name des ersten Hauptteilelements zeigt die Operation an.

Methoden aufrufen mit SOAPmessages:caching

Es folgt ein WSDL-Beispiel für die getQuote-Operation:

<?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>

Wenn Sie eine Gruppe von Cacherichtlinien für eine Web-Service-Anwendung erstellen möchten, müssen Sie den dynamischen Cache von WebSphere Application Server so konfigurieren, dass er die zwischenspeicherbare Serviceoperation der Operation erkennt.

WebSphere Application Server prüft die HTTP-Anforderung, um festzustellen, ob eine eingehende Nachricht basierend auf den Cacherichtlinien, die für eine Anwendung definiert sind, zwischengespeichert werden kann. In diesem Beispiel werden buyStock und stock-update zwar nicht zwischengespeichert, stockquote-lookup wird jedoch zwischengespeichert. In der Datei cachespec.xml dieser Webanwendung müssen die Cacherichtlinien für diese Services definiert werden, damit der dynamische Cache die SOAPAction und die Serviceoperation ausführen kann.

WebSphere Application Server verwendet die Operation und den Nachrichtenhauptteil (Body) aus den Cache-IDs der Web-Services, denen jeweils eine Komponente zugeordnet ist. Deshalb enthält die <cache-id>-Regel jedes Web-Service nur zwei Komponenten. Die erste Regel ist für den Betrieb bestimmt. Da Sie die Lookup-Operation für die Börsennotierung mit einem SOAPAction-Header oder einer Serviceoperation im Hauptteil ausführen können, müssen Sie zwei verschiedene <cache-id>-Elemente definieren, eines für jede Methode. Die zweite Komponente gehört zum Typ "body" und definiert, wie WebSphere Application Server den Nachrichtenhauptteil in die Cache-ID einbinden soll. Sie können zwar einen Hash des Hauptteils verwenden, es ist jedoch auch zulässig, die eingehende Nachricht wörtlich in der ID zu verwenden.

Die eingehende HTTP-Anforderung wird von WebSphere Application Server analysiert, um zu ermitteln, welche <cache-id>-Regeln übereinstimmen. Dann werden die Regeln angewendet, um Cache- oder Invalidierungs-IDs zu bilden.

Es folgt ein Beispielcode der Datei cachespec.xml, der die SOAPAction- und servicesOperation-Regeln definiert:

<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>

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_webservicescaching
Dateiname:rdyn_webservicescaching.html