例: Web サービスのキャッシュ

Web サービス・アプリケーション用のキャッシュ・ポリシーの集合と SOAP メッセージを作成できます。

以下に示すのは、簡単な Web サービス・アプリケーション用にキャッシュ・ポリシーの集合を作成する例です。この例におけるアプリケーションは、 株価情報を保管し、指定された株式銘柄の価格を読み取って更新したり、 その銘柄の株式を買ったりするオペレーションを行います。

以下に示すのは、付随する HTTP 要求ヘッダーを使用してアプリケーションが受信できる 2 つの SOAP メッセージ例です。

最初のメッセージ・サンプルには、GetQuote オペレーションの SOAP メッセージが 収められており、IBM® の株価を要求しています。 これは、データをバックエンドから取得する読み取り専用オペレーシ ョンであり、キャッシュの良い候補です。 この例では、SOAP メッセージがキャッシュに入れられ、タイムアウトがエントリーに配置されて、 それによって戻される株価が現行のものであるようにしています。

メッセージ例 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>     
要求の中の SOAPAction HTTP ヘッダーは、SOAP 仕様で定義され、 HTTP プロキシー・サーバーによって使用されて、要求を特定の HTTP サーバーにディスパッチします。 WebSphere® Application Server の動的キャッシュは、 このヘッダーをキャッシュ・ポリシーの中で使用して、SOAP メッセージの構文解析を行うこと なく ID を作成できます。

メッセージ例 2 は、BuyQuote オペレーションの SOAP メッセージを説明しています。 メッセージ 1 がキャッシュ可能なのに対して、このメッセージは、バックエンド・データベースを更新するので、 キャッシュ可能ではありません。

メッセージ例 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>  

次の図は、SOAP メッセージを使用してメソッドを呼び出す方法を示しています。 Web サービスの用語、特に Web サービス記述言語 (WSDL) では、サービスとは、getQuote や buyStock などのオペレーションの集合のことです。本文エレメントの名前空間 (例では urn:stockquote) はサービスを定義し、最初の本文エレメントの名前はオペレーションを示しています。

SOAPmessages:caching によるメソッドの呼び出し

以下に示すのは、getQuote オペレーションの WSDL の例です。

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

Web サービス・アプリケーション用にキャッシュ・ポリシーのセットを作成するには、オペレーション内のキャッシュ可能サービス・オペレーションを認識する WebSphere Application Server 動的キャッシュを構成します。

WebSphere Application Server は、HTTP 要求を検査して、アプリケーション用に定義されたキャッシュ・ポリシーに 基づいて着信メッセージをキャッシュできるかどうかを判別します。この例では、buyStock および stock-update はキャッシュされず、stockquote-lookup がキャッシュされます。 この Web アプリケーションの cachespec.xml ファイルでは、動的キャッシュが SOAPAction とサービス・オペレーションを両方とも処理できるように、キャッシュ・ポリシーはこれらのサービスに対する定義を必要とします。

WebSphere Application Server は、オペレーションおよびメッセージ本文を Web サービス・キャッシュ ID の中で使用します。これらのキャッシュ ID はそれぞれ、オペレーションおよびメッセージ本文と関連付けられたコンポーネントを持っています。したがって、個々の Web サービス <cache-id> ルールには、コンポーネントが 2 つだけ含まれています。最初のコンポーネントはオペレーション用です。 ユーザーは、SOAPAction ヘッダーまたはサービス・オペレーションを本文の中で使用することによって stockquote-lookup オペレーションを実行できるため、 2 つの異なる <cache-id> エレメント (それぞれの方法に 1 つずつ) を定義する必要があります。 2 番目のコンポーネントは、「本文」タイプであり、 どのように WebSphere Application Server がメッセージ本文をキャッシュ ID に取り込むかを定義します。 本文のハッシュを使用することができますが、リテラル着信メッセージを ID の中で使用してもかまいません。

着信 HTTP 要求は、どちらの <cache-id> ルールが適合するかを判別 するために、WebSphere Application Server によって解析されます。 次に、キャッシュまたは無効化 ID を作成するためにこれらのルールが適用されます。

以下に示すのは、 SOAPAction および servicesOperation ルールを定義する cachespec.xml ファイルのサンプル・コードです。

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

トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rdyn_webservicescaching
ファイル名:rdyn_webservicescaching.html