非同期呼び出し API を使用するアプリケーションの開発

非同期呼び出し API を使用して、 Session Initiation Protocol (SIP) アプリケーション・セッションのコンテキストで処理する必要があるイベントを、 関連するアプリケーション・セッション ID に基づいてクラスター内の任意のサーバーに転送できます。 非同期呼び出し API は、イベント・タスクを適切なサーバーに転送します。

始める前に

以下の非同期作業クラスについては、 API の資料をお読みください。
  • com.ibm.websphere.sip.AsynchronousWork
  • com.ibm.websphere.sip.AsynchronousWorkListener

API クラスについて詳しくは、 インフォメーション・センターの「参照」セクションを参照し、 「API - アプリケーション・プログラミング・インターフェース」をクリックして、 製品の API 仕様のリストを表示してください。

このタスクについて

アプリケーション開発者は、 SIP スレッドの外部でコードを実行中に、非同期呼び出し API を使用して、オブジェクトを作成し、 そのオブジェクトを同じコンテナー内の別のスレッド、 または別のサーバー (そこにセッションがある場合) で実行するようにサーバーを構成できます。

次の例は、API の使用時に拡張される基本抽象クラスである、 AsynchronousWork クラスのクラス構造を示しています。
		public abstract class AsynchronousWork implements Serializable
	{
		private String sessionId;
		public AsynchronousWork(String sessionId)
	{
		this.sessionId = sessionId;
	....
	}
		public void dispatch (AsynchronousWorkListener listener)
	{
	....
	}
		public abstract Serializable doAsyncTask();
	}

手順

  1. 抽象クラス AsynchronousWork を SIP 関連コードで拡張します。 doAsyncTask() メソッドを拡張した実装は、SipApplicationSession を含み、 かつ AsynchronousWork クラスを実装するコンストラクターに ID が設定された ターゲット・サーバーで呼び出されます。実装クラスは、 コンストラクターでスーパークラスを呼び出すことによって、 セッション ID を基本クラスに渡す必要があります。
    public class MyClass extends AsynchronousWork
    {
    String _sessionId;
    
    public MyClass(String sessionId) {
    super(sessionId);
    _sessionId = sessionId;
    }
    
    // This code is invoked on the target machine or thread
    public Serializable doAsyncTask() {
    // Application code goes here; for instance:
    appSession = sessionUtils.getApplicationSession(_sessionId);
    appSession.createRequest().....
    
    Serializable myResponse = new MyResponse();
    myResponse.setStatus(200);
    return (myResponse);
    }
    }
  2. タスクの完了についての情報を受け取るには、 次の例に示すように AsynchronousWorkListener クラスを実装します。 これらのメソッド内のコードは、ソース・サーバーで呼び出されます。
    public class MyListener implements AsynchronousWorkListener
    {
    public void workCompleted(Serializeable myResponse)
    {
    ....
    }
    public void workFailed(int reasonCode, String reason)
    {
    }
    }
  3. 非同期呼び出しを行うには、 例えば、独自のメッセージを受け取る場合などには、例としてこのサンプル・コードを使用してください。
    public void onMyMessage()
    {
    // Obtain the session ID from the message or
    // somewhere else
    String sessionId = obtainIdFromMessage();
    
    // Create the runnable
    MyClass myClass = new MyClass(sessionId);
    
    // Create the listener
    MyListener myListener = new MyListener();
    
    // Dispatch it
    myClass.dispatch(myListener);
    }

タスクの結果

アプリケーションがセッション・レベルで同期しないようにするために、 SIP コンテナーによって、 タスクが正しいサーバーおよび正しいスレッドで呼び出されるようにします。

トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tcea_asynch_invocation_api
ファイル名:tcea_asynch_invocation_api.html