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

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

始める前に

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

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 が設定されたターゲット・サーバーで呼び出されます。実装クラスは、コンストラクターで super を呼び出すことにより、セッション 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 コンテナーは、正しいサーバーおよび正しいスレッドでタスクが呼び出されるようにします。

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

ファイル名: twlp_sip_asynchinvo_api.html