BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic Web サービス プログラマーズ ガイド

 Previous Next Contents PDF で侮ヲ  

WebLogic Web サービスの設計

この章では、WebLogic Web サービスの実装に先立って検討すべき設計の問題について説明します。

 


同期オペレーション、非同期オペレーションのいずれかの選択

WebLogic Web サービス オペレーションは、同期要求応答方式または非同期一方向方式をとります。

同期要求応答方式 (デフォルトの動作) では、クライアント アプリケーションは、Web サービスを呼び出すたびに SOAP 応答を受け取ります。そのオペレーションを実装するメソッドが void を返す場合も同様です。非同期一方向方式では、障害や例外が発生した場合も含め、クライアントが SOAP 応答を受け取ることはありません。

このタイプの動作は、web-services.xml ファイルにある <operation>invocation-style 属性を使用して指定します。

Web サービス オペレーションは一般的には同期要求応答方式で、典型的な RPC 方式の動作をミラーリングします。クライアントアプリケーションが、エラー発生時も含めて応答を受け取る必要がない場合は、非同期動作を実装した方がいい場合があります。非同期一方向 Web サービス オペレーションは、次の事項を念頭において設計してください。

 


Web サービスのバックエンド コンポーネントの選択

WebLogic Web サービス オペレーションは、次のいずれかのタイプのバックエンド コンポーネントを使用して実装します。

EJB バックエンド コンポーネント

ステートレス セッション EJB のメソッドを使用して実装された Web サービス オペレーションは、インタフェース駆動です。つまり、オペレーションが依拠しているステートレス セッション EJB のビジネス メソッドによって Web サービス オペレーションの動作が決定されます。クライアントが Web サービス オペレーションを呼び出すと、パラメータ値がメソッドに送信され、そのメソッドが実行されて戻り値が送り返されます。

ステートレス セッション EJB バックエンド コンポーネントは、アプリケーションが以下の特徴を備えている場合に使用してください。

このタイプの Web サービス オペレーションの実装例には、特定の地域の現在の天気情報の提供、指定株の現在の株価の表示、またはビジネス トランザクションが完了する前の取引先の信用状態のチェックなどがあります。

Java クラスのバックエンド コンポーネント

Java クラスを使用して実装された Web サービス オペレーションは、EJB メソッドを使用して実装されたオペレーションと類似しています。多くの場合、Java クラスの作成の方が EJB の作成より簡素であり、より短時間で作成できます。永続性、セキュリティ、トランザクション、同時実行性といった EJB 機能のオーバーヘッドが不要な場合は、Java クラスをバックエンド コンポーネントとして使用します。

ただし、Java クラスをバックエンド コンポーネントとして使用するには制限があります。詳細については、Java クラスを記述して Web サービスを実装するを参照してください。

 


RPC 指向またはドキュメント指向の Web サービス

WebLogic Web サービスのオペレーションは、RPC 指向またはドキュメント指向のいずれかです。WSDL 1.1 仕様で説明されているように、RPC 指向のオペレーションでは SOAP メッセージにパラメータと戻り値が格納され、ドキュメント指向のオペレーションでは SOAP メッセージに XML ドキュメントが格納されます。

ドキュメント指向の WebLogic Web サービス オペレーションを実装するメソッドは、パラメータを 1 つだけ持つことができます (データ型はサポートされているものであればどれでもかまわない)。RPC 指向のオペレーションでは、パラメータの数に制限はありません。

RPC 指向の WebLogic Web サービス オペレーションでは、SOAP エンコーディングを使用します。ドキュメント指向の WebLogic Web サービス オペレーションでは、リテラル エンコーディングを使用します。

1 つの WebLogic Web サービスのすべてのオペレーションは、RPC 指向かドキュメント指向のいずれかでなければなりません。WebLogic Server では、同じ Web サービスで 2 つのスタイルをミックスすることはできません。

デフォルトでは、WebLogic Web サービスのオペレーションは RPC 指向です。オペレーションをドキュメント指向にするには、servicegen Ant タスクを使用して Web サービスをアセンブルするときに <service> 要素の style="document" 属性を使用します。生成される web-services.xml デプロイメント記述子では、適切な <web-service> 要素に、対応する style="document" 属性が設定されます。

ドキュメント指向の WebLogic Web サービスの実装については、ドキュメント指向の Web サービスの実装を参照してください。servicegen Ant タスクを使用してドキュメント指向の Web サービスをアセンブルする方法の詳細については、servicegen Ant タスクを使用した WebLogic Web サービスのアセンブルservicegenを参照してください。

 


データ型

WebLogic Web サービスは、Web サービス オペレーションのパラメータと戻り値として組み込みデータ型および非組み込みデータ型をサポートします。つまり、WebLogic Web サービスは、XML スキーマを使用して表現できるあらゆるデータ型を扱えます。

組み込みデータ型は、JAX-RPC 仕様で指定されているデータ型です。Web サービスが組み込みデータ型のみを使用する場合は、XML 表現と Java 表現間の変換は WebLogic Server によって自動的に処理されます。組み込みデータ型の詳細なリストは、組み込みデータ型の使用法を参照してください。

より複雑で、非組み込みデータ型にパラメータや戻り値を使用する Web サービス オペレーションの場合は、以下を実行する必要があります。

    1. XML 表現と Java 表現間のデータ変換を行うシリアライゼーション クラスを作成する

    2. web-services.xml ファイルにあるデータ型の XML 表現を記述する (XML スキーマの表記法で)

    3. そのデータ型の Java クラスファイルを作成する

    4. web-services.xml ファイルにあるデータ型マッピングを記述する

WebLogic Server には、広く使用されているさまざまな XML および Java データ型でこれらのタスクを実行する Ant タスクが組み込まれています。この機能は、オートタイピングと呼ばれます。サポートされている非組み込みデータ型のリストは、servicegen および autotype Ant タスクでサポートされる非組み込みデータ型を参照してください。Ant タスクの実行については、Ant タスクを使用した WebLogic Web サービスのアセンブルを参照してください。

注意: オートタイピング Ant タスクを使用して Java クラスのデータ型情報を生成する場合、クラスは非組み込みデータ型を実装するのガイドラインに準拠している必要があります。

データ型が組み込みデータ型でもサポートされている非組み込みデータ型でもない場合は、シリアライゼーション クラスの作成などを手作業で行う必要があります。詳細については、非組み込みデータ型の使用法を参照してください。

 


SOAP メッセージをインターセプトする SOAP メッセージ ハンドラの使用

Web サービスの中には、SOAP メッセージへのアクセスを必要とするものがあり、SOAP メッセージに対して SOAP メッセージ ハンドラを作成できます。

SOAP メッセージ ハンドラは、Web サービスの要求と応答の両方で SOAP メッセージをインターセプトするメカニズムです。ハンドラは、Web サービスそのものと Web サービスを呼び出すクライアント アプリケーションの両方で作成することができます。

簡単なハンドラ使用例としては、SOAP メッセージの本文でセキュアなデータを暗号化、復号化する場合があります。クライアント アプリケーションは、ハンドラを使用してデータを暗号化してから、Web サービスに SOAP 要求メッセージを送信します。Web サービスは、要求を受け取るとハンドラを使用してデータを復号化してから、そのデータを Web サービスを実装するバックエンド コンポーネントに送信します。SOAP 応答メッセージの場合は、同じ手順が逆の順序で実行されます。

別の例には、SOAP メッセージのヘッダー部分にある情報へのアクセスがあります。SOAP のヘッダーを使用して Web サービス固有の情報を格納しておいて、ハンドラを使用してその情報を操作することができます。

SOAP メッセージ ハンドラは、Web サービスのパフォーマンスを向上させるために使用することもできます。Web サービスがデプロイされてしばらくすると、同じパラメータを使用して Web サービスを呼び出すコンシューマが多いことに気付く場合があります。よく使用される Web サービス呼び出しの結果 (静的な結果を前提として) をキャッシュしておき、Web サービスを実装するバックエンド コンポーネントを呼び出すことなく、適宜、キャッシュしておいた結果をただちに返すことによって、Web サービスのパフォーマンスを向上させることができます。このパフォーマンスの向上は、ハンドラを使用して、SOAP 要求メッセージに頻繁に使用されるパラメータが含まれていないかチェックすることで達成されます。

 


ステートフル WebLogic Web サービス

WebLogic Web サービス オペレーションは、ステートレス セッション EJB または Java クラスを使用して実装するので、WebLogic Web サービス オペレーションはステートフルではありません。また、標準の要求応答モデルの範疇を超えて対話ができるサービスでもありません。

ただし、JDBC またはエンティティ Bean を使用して、対話が可能な Web サービスを模倣することはできます。たとえば、サービスを呼び出したクライアント アプリケーションが、自らを識別する一意の ID をステートレス セッション EJB のエントリ ポイントに渡すように、Web サービスを設計することができます。この EJB は、ID を使用して、何らかのタイプの永続ストレージで、エンティティ Bean または JDBC を使用して対話を続行します。このクライアント アプリケーションが再び同じ Web サービスを呼び出すと、ステートレス セッション EJB は、この一意の ID を使用して永続データを選択することによって、対話の前回のステートを復元することができます。

エンティティ Bean のプログラミングについては、『WebLogic エンタープライズ JavaBeans プログラマーズ ガイド』を参照してください。JDBC については、「WebLogic jDrivers」を参照してください。

 

Back to Top Previous Next