ステップ 2: 非同期通信のサポートを追加する

このステップでは、Web を介した通信に固有のネットワーク レイテンシの問題を解決します。ネットワーク レイテンシとは、ネットワークを介してデータを転送する場合によく発生する時間遅延です。

これはインターネットの特殊な問題です。インターネットにはパフォーマンスが非常に予測しにくいという特徴があり、信頼性が安定していません。Web サービスでリクエストの処理に時間がかかると、レイテンシがさらに大きくなることがあります(たとえば、サービスの「裏側」にいる人が申込者のクレジットを見直してからでないと応答が返されない場合など)。

Investigate Web サービスのこれまでの設計では、requestCreditReport メソッドを呼び出すクライアントは自身のプロセスを中断して、Web サービスからの応答を待機しなければなりません。これは同期関係と呼ばれるもので、クライアント ソフトウェアは Web サービスのメソッドを呼び出すと、Web サービスから戻り値を受け取るまで、自身のプロセスを続行できなくなります。ご想像のとおり、クライアントが応答を受け取るまでにかかる時間を予測するのが難しい場合、これではうまく機能しません。

Web サービスがクライアントと非同期的に通信できるようにすると、レイテンシの問題は解決されます。非同期通信では、Web サービスが応答を作成する間、クライアントは自身のプロセスを中断しなくてもよい方法で Web サービス と通信します。特に、クライアントへ簡単な確認応答をすぐに返すためのメソッドを Web サービスに追加すると、クライアントは自身のプロセスを継続することができます。完全な結果を後でクライアントに返すコールバックを追加することもできます。さらに、会話のサポートを実装して、コールバックによる完全な応答の送信先クライアントを Web サービスで記憶できるようにします。

このステップでのタスクは次のとおりです。

Web サービスにクラスとメンバー変数を追加するには

以下で追加するコードには、Applicant というクラスと m_currentApplicant というメンバー変数の 2 つの部分があります。この変数は Applicant クラスのインスタンスで、クレジット申込者の情報を記録するためのデータ構造として機能します。そのフィールドには、申込者の名前や現在の利用限度額などの情報が格納されます。メンバー変数 m_currentApplicant が特定の申込者の情報を格納すると、Web サービスはその特定の申込者に関するプロファイルを作成します。

  1. [ソース ビュー] タブをクリックします。このタブから Web サービスの Java コードを参照できます。

  2. public class Investigate の内部に以下のコードを配置します。  

    public static class Applicant implements java.io.Serializable
    {
        public String taxID;
        public String firstName;
        public String lastName;
        public boolean currentlyBankrupt;
        public int availableCCCredit;
        public int creditScore;
        public String approvalLevel;
        public Applicant(String taxID)
        {
            this.taxID = taxID;
        }
        public Applicant() {}
    }
    Applicant m_currentApplicant = new Applicant();

Web サービスに requestCreditReportAsynch メソッドを追加するには

次に、クライアント ソフトウェアによって呼び出されるメソッドを追加します。クライアントでは申込者の信用価値に関するレポートを受け取ります。このメソッド自体は呼び出し側クライアントに確認応答を返すだけで、申込者についての実質的な情報は返しません。申込者の信用価値に関する完全なレポートは、後で追加する onCreditReportDone コールバックで返されます。

  1. [デザイン ビュー] タブをクリックします。

  2. [処理の追加] ドロップダウン リストから [メソッドの追加] を選択します。

  3. 表示される入力ボックスに、メソッド名 requestCreditReportAsynch を入力して、〔Enter〕を押します。

  4. 次のようにメソッド名をクリックします。

ソース ビューにメソッドのコードが表示されます。

  1. requestCreditReportAsynch メソッドのコードを次のように編集します。

/** * @jws:operation */ public void requestCreditReportAsynch(String taxID)    {        m_currentApplicant.taxID = taxID;    }

Web サービスに onCreditReportDone コールバックを追加するには

Web サービスでクレジット申込者のクレジット プロファイルが作成されたら、クライアント アプリケーションにクレジット レポートを返送するためのコールバックを追加します。以下で追加するコールバックは、申込者の信用価値に関する完全なレポートを返します。

  1. [デザイン ビュー] タブをクリックして、デザイン ビューに戻ります。

  2. [処理の追加] ドロップダウン リストから [コールバックの追加] を選択します。

  3. 表示される入力フィールドに、コールバック名 onCreditReportDone を入力して、〔Enter〕を押します。

  4. onCreditReportDone コールバックに関連付けられた矢印をダブルクリックします。[マップおよびインタフェースの編集] ダイアログ ボックスが表示されます。

  1. [Java] ペインで、テキストを次のように編集します。

public void onCreditReportDone(Applicant currentApplicant, String responseMessage)

  1. [OK] をクリックします。[マップおよびインタフェースの編集] ダイアログが閉じられます。

 

クライアントにデータを返送するコードを追加するには

次に、requestCreditReportAsynch メソッドが onCreditReportDone コールバックを開始するように編集できます。

  1. ソース ビューを表示していない場合は、[ソース ビュー] タブをクリックします。

  2. requestCreditReportAsynch メソッドを次のように変更します。

/** * @jws:operation */ public void requestCreditReportAsynch(String taxID) {        m_currentApplicant.taxID = taxID;         callback.onCreditReportDone(m_currentApplicant, null); }

Web サービスにバッファと会話のサポートを追加するには

これで、Web サービスにバッファと会話のサポートを追加する準備が整いました。  

requestCreditReportAsynch メソッドに追加するバッファには、2 つの目的があります。まず、クライアントのリクエストをメッセージ キューに保存して、サーバが停止してもリクエストが失われないようにします。また、要求側クライアントに確認応答をすぐに返して、クライアントが Web サービスからの完全な応答を待機せずにプロセスを継続できるようにします。

Web サービスに会話のサポートを追加すると、クライアントでは、サービスが onCreditReportDone コールバックで返信する結果が、クライアントによる元のリクエストに関連付けられていることを確実に把握できます。同じクライアントが同じ納税者 ID で 2 つの独立した呼び出しを行う場合(たとえば、同じ申込者からの別々のローン申し込みなど)、クライアントでは返された結果がどちらのリクエストに対応するのかをどのように知るのでしょうか。クライアントと Web サービスの間を往復するすべての対話に関して、サービスでは一貫性を保つ方法が必要になります。

また、m_currentApplicant メンバー変数を格納したサーバに障害が発生した場合、クライアントがパラメータとして送信したデータは失われます。サービスではクライアントのリクエストを追跡できないだけでなく、クライアントの主体そのものがわからなくなります。

これらの問題は、情報の交換(リクエスト、応答、および二者間で必要なすべての対話)のそれぞれにユニークな識別子を関連付けることで解決できます。この識別子はクライアントとサービスの両方で認識されるものです。

そのために、WebLogic Workshop で構築する Web サービスでは会話のサポートを追加します。サービスが会話に参加する場合、WebLogic Server ではステート関連のデータ(上記で追加したメンバー変数など)をコンピュータのハード ディスクに格納します。また、データや、どの応答がどのリクエストに属しているのかを追跡するために、ユニークな識別子を生成します。このインフラストラクチャは、会話が進行中の間はそのまま格納されます。会話が終了すると、インフラストラクチャに割り当てられていたリソースが解放されます。

会話をサポートする Web サービスにメソッドを追加する場合、各メソッドが会話の開始、継続、または終了のどれを行うのかを指定できます。会話のサポートの追加は非常に簡単です。トランザクションの最初のステップを表すメソッド(requestCreditReportAsync)と最後のステップを表すメソッド(onCreditReportDone)の両方で、会話の開始または終了を指定します。Web サービスにバッファと会話のサポートを追加するには、以下の手順に従います。

  1. [デザイン ビュー] タブをクリックして、デザイン ビューに戻ります。

  2. requestCreditReportAsynch メソッドに関連付けられたプロパティ ペインを編集します。 このメソッドのプロパティ ペインを編集するには、メソッド名 requestCreditReportAsynch の隣にある矢印をクリックします。 注意 : メソッド名 requestCreditReportAsynch をクリックしないで、メソッドに関連付けられた矢印を次のようにクリックします。

  1. プロパティ ペインで、[phase] ドロップダウン リストから次のように [start] を選択します。

  1. [message-buffer] セクションで、[enable] ドロップダウン リストから次のように [true] を選択します。

  1. onCreditReportDone コールバックの隣の矢印をクリックします。

  2. プロパティ ペインで、[phase] ドロップダウン リストから次のように [finish] を選択します。

  1. [message-buffer] セクションで、[enable] ドロップダウン リストから次のように [true] を選択します。

  2. 〔Ctrl〕+〔S〕を押してサービスを保存します。

Web サービスをテストするには

これで、サービスをコンパイルおよびテストする準備が整いました。  

  1. 次のような [開始] ボタンをクリックして、Web サービスをコンパイルおよびテストします。

Web サービスがコンパイルされて、テスト ページ表示するブラウザ ウィンドウが起動します。

  1. 次のように、[taxID] フィールドに数値を入力します。

注意 : このチュートリアルでは、以下の 9 桁の taxID のいずれかを使用して Web サービスをテストします。

123456789111111111222222222333333333444444444、および 555555555

  1. [requestCreditReportAsynch] をクリックします。テスト ページが更新されて、次のように、クライアントによって送信されるリクエスト パラメータとサービスの応答の概要が表示されます。

注意 : 概要の [Service Request] の下には、クライアントが requestCreditReportAsynch メソッドを呼び出すために Web サービスに送信した内容が表示されます。Web サービスに送信した taxID の他に、会話 ID 番号が表示されています。サービスはこの ID を使用して、最初のクライアント リクエストと後でクライアントに返信されるコールバック応答を関連付けます。

  1. 概要の [Service Response] の下には、Web サービスがクライアントに返信した内容が表示されます。この場合、Web サービスは、リクエストを受信したという確認応答として、XML ファイルをクライアントに返信しています。

  2. ブラウザを更新します。[Message Log] には、callback.onCreditReportDone という新しいエントリがあります。

  3. [callback.onCreditReportDone] をクリックすると、Web サービスからクライアントへ送信されるコールバックの内容が次のように表示されます。

内容はクライアントが受信する SOAP メッセージで、現在の申込者についての情報が含まれています。もちろん、この Web サービスにはクレジット申込者について知る方法がないので、クライアントに返信される情報は、最初に入力した taxID と他のフィールドのデフォルト値で構成されています。

 

チュートリアルの次のステップでは、Web サービスにデータベース コントロールを追加します。Web サービスではクレジット申込者の実質的なデータを取得できるようになります。

関連トピック

ユーザ インタフェース リファレンス

概要 : 会話