このトピックには、Web サービス・アプリケーション用のキャッシュ・ポリシーの集合と SOAP メッセージを作成する例が含まれています。
以下に示すのは、簡単な Web サービス・アプリケーション用にキャッシュ・ポリシーの集合を作成する例です。 この例におけるアプリケーションは、 株価情報を保管し、指定された株式銘柄の価格を読み取って更新したり、 その銘柄の株式を買ったりするオペレーションを行います。
以下に示すのは、付随する HTTP 要求ヘッダーを使用してアプリケーションが受信できる 2 つの SOAP メッセージ例です。
最初のメッセージ・サンプルには、GetQuote オペレーションの SOAP メッセージが含まれ、 IBM の株価を要求しています。 これは、データをバックエンドから取得する読み取り専用オペレーシ ョンであり、キャッシュの良い候補です。 この例では、SOAP メッセージがキャッシュに入れられ、タイムアウトがエントリーに配置されて、 それによって戻される株価が現行のものであるようにしています。
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 がキャッシュ可能なのに対して、このメッセージは、バックエンド・データベースを更新するので、 キャッシュ可能ではありません。
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 Service Definition Language (WSDL) では、
サービスとは、getQuote や buyStock などのオペレーションの集合のことです。
本文エレメントのネーム・スペース (例では urn:stockquote) はサービスを定義し、最初の本文エレメントの名前はオペレーションを示しています。
<?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 を作成するためにこれらのルールが適用されます。
<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>