サービス コントロールをカスタマイズする : メソッドとコールバックをバッファリングする

このトピックでは、サービス コントロールのデフォルト動作を変更するための CTRL ファイルのカスタマイズについて説明します。

コントロールに関する詳細については、コントロール : Web サービスからリソースを使用するを参照してください。

サービス コントロールの詳細については、サービス コントロール : 他の Web サービスを使用するを参照してください。

サービス コントロールのカスタマイズの詳細については、サービス コントロールをカスタマイズする : 概要を参照してください。

サービス コントロールのメソッドにバッファを追加する

メッセージ バッファの詳細については、非同期メソッドを使用するを参照してください。

メッセージ バッファは、戻り値の型が void であるメソッドおよびコールバックにのみ追加できます。

メッセージ バッファは、サービス コントロールのメソッドおよびコールバック ハンドラに追加できます。メッセージ バッファをサービス コントロールに追加すると、何が起こるかを理解しておく必要があります。サービス コントロールは別の Web サービス(対象のサービス)のプロキシです。多くの場合、対象のサービスはリモート サーバ上に配置されています。メッセージ バッファをサービス コントロールに追加すると、バッファリングは必ずローカル サーバ上の処理となります。

次に示すように、デザイン ビューでは、メッセージ バッファはメソッドまたはコールバック上の「バネ」アイコンとして描かれます。

メッセージ バッファは、線上の(サービスに)近い方に描かれます。一般に、リモート Web サービスの実行環境またはコンフィグレーションを管理することはできません。つまり、線上の(サービスから)遠い方で行われる処理を変更することはできません。

メッセージ バッファをメソッドに追加すると、メソッドは非同期となります。つまり、そのメソッドの呼び出し側は応答を待機しません。

サービス コントロールでは、自分の Web サービスから他のサービスに出力メッセージ(サービス コントロール メソッドの呼び出し)を送信する場合、自分のサービスがクライアントとなり、他のサービスが自分のサービスに入力メッセージ(サービス コントロールのコールバック)を送信する場合、他のサービスがクライアントとなります。

サービス コントロールのメソッドのバッファ動作

メッセージ バッファをサービス コントロールのメソッドに追加すると、出力メッセージ(メソッドの呼び出し)はローカル マシン上にバッファリングされます。メソッドの呼び出しは直ちに復帰します。これにより、メッセージをリモート サーバに送信してから void 応答を受信するまでサービスが待機する必要がなくなります。つまり、サービスはネットワーク通信が往復するまで待機する必要がありません。

サービス コントロールのコールバック ハンドラのバッファ動作

メッセージ バッファをサービス コントロールのコールバックに追加すると、入力メッセージ(コールバックの呼び出し)はローカル マシン上にバッファリングされます。コールバックの呼び出しは直ちに他の Web サービスに復帰します。これにより、自分のサービスがリクエストを処理するまで他のサービスを待機させずに済みます。ただし、バッファリングは線上の(サービスに)近い方で行われるので、void 型の戻り値が返される場合でも、呼び出し側サービスはネットワーク通信が往復するまで待機しなければなりません。しかし、自分のサービスがメッセージを処理するまで、呼び出し側サービスを待機させる必要はありません

WebLogic Workshop でサービス コントロールにメッセージ バッファを追加する

サービス コントロールのメソッドおよびコールバック ハンドラがメッセージ バッファを使用するように指定するには、2 通りの方法があります。

これらの操作により、サービス コントロールの CTRL ファイルに適切なコメントが付けられます。次の節では、追加されるコメントについて説明します。

メッセージ バッファをコードで指定する

メッセージ バッファをコードで指定するには、@jws:message-buffer Javadoc タグを使用します。サービス コントロールの CTRL ファイルでは、@jws:message-buffer タグをメソッドまたはコールバックに配置できます。

@jws:message-buffer タグの詳細については、@jws:message-buffer タグを参照してください。

次の例では、@jws:message-buffer タグがサービス コントロールのメソッドに含めています。

public interface QuoteServiceControl extends ServiceControl
{
...
   /**
     * @jws:message-buffer enable="true"
     */
    public void getQuote (int customerID, java.lang.String tickerSymbol);
...
}

次の例では、@jws:message-buffer タグがサービス コントロールのコールバックに含めています。

public interface QuoteServiceControl extends ServiceControl
{
...
    public interface Callback
    {
        /**
         * @jws:message-buffer enable="true"
         */
        public void onQuoteReady (java.lang.String tickerSymbol, double dQuote);
    }
...
}

関連トピック

非同期性を利用して長期間の処理を実現する

非同期メソッドを使用する