ナビゲーションをスキップ

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

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

WebLogic Web サービスの設計

この章では、WebLogic Web サービスを実装するための設計上の検討事項について説明します。

 


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

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

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

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

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

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

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

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

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

 


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

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

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

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

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

 


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

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

WebLogic Server は、標準ドキュメントとドキュメント ラップという 2 種類のドキュメント指向 Web サービス オペレーションをサポートします。

標準ドキュメント指向 Web サービス オペレーションは、パラメータを 1 つしか取りません (通常 XML ドキュメント)。このため、このオペレーションを実装するメソッドのパラメータも 1 つしか必要ありません。一方、ドキュメント ラップ Web サービス オペレーションは、パラメータをいくつでも取ることができます。これらのパラメータの値は、SOAP メッセージの中に 1 つの複合データ型としてラップされます。Web サービスを実装するステートレス セッション EJB または Java クラスの複数のメソッドが同じパラメータ数とデータ型を取り、オペレーションをドキュメント指向にしたい場合、そららをドキュメント ラップとして指定する必要があります。

RPC 指向のオペレーションでは、パラメータの数に制限はありません。

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

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

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

ドキュメント指向の 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 JDBC ドライバ』を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次