SIP アプリケーションの開発

     前  次    新しいウインドウで目次を開く     
コンテンツの開始位置

コンバージド アプリケーションの開発

以下の節では、Oracle Communications Converged Application Server を使用して HTTP と SIP のコンバージド アプリケーションを開発する方法について説明します。

 


コンバージド アプリケーションの概要

コンバージド アプリケーション」では、SIP プロトコルの機能と HTTP または Java EE のコンポーネントを組み合わせることで、統合的な通信サービスを実現します。たとえば、オンラインの Push-to-Talk アプリケーションで、ユーザがショッピング カート内の商品について質問するために音声コールを開始するという機能を実現できます。この音声コールのために開始される SIP セッションは、ユーザの HTTP セッションに関連付けられています。そのため、音声コールに答える従業員は、ユーザのショッピング カートの中身や購入履歴を見ることができます。

アプリケーション アーカイブ (..EAR file) へ Java EE コンポーネントを利用するコンバージド アプリケーションをパッケージ化する必要があります。SIP および HTTP プロトコルを利用するコンバージド アプリケーションは、sip.xml および web.xml 両方のデプロイメント記述子ファイルを含む 1 つの SAR または WAR ファイルでパッケージする必要があります。オプションで、1 つの EAR ファイル内で別々の SAR および WAR コンポーネントにコンバージド アプリケーションの SIP および HTTP Servlet をパッケージできます。

コンバージド アプリケーションで使用される HTTP セッションと SIP セッションには、共通のアプリケーション セッション オブジェクトを通じてプログラム的にアクセスできます。HTTP セッションをアプリケーション セッションに関連付けるための SIP Servlet API が用意されています。

 


コンバージド アプリケーションのアセンブルとパッケージ化

SIP Servlet 仕様では、コンバージド アプリケーションのアセンブルに関する要件と制約が詳しく規定されています。SIP Servlet 仕様の内容を簡潔にまとめると、次のようになります。

 


SIP セッションと HTTP セッションの設定

図 6-1 に示すように、Oracle Communications Converged Application Server コンテナにデプロイされるコンバージド アプリケーションは必ずユニークな SipApplicationSession を持ち、その中に 1 つまたは複数の SipSession オブジェクトと HttpSession オブジェクトを含めることができます。

図 6-1 コンバージド アプリケーションのセッション

コンバージド アプリケーションのセッション

javax.servlet.SipApplicationSession の API により、そのアプリケーションの SipApplicationSession 内のすべての使用可能セッションを反復処理することができます。コンバージド アプリケーションを開発する場合、ユニーク アプリケーション セッションで URL をエンコーディングするメソッドも用意されています。

以前のリリースでは、Oracle Communications Converged Application Server は、以下の処理を行うためのメソッドを提供するように基本 SIP Servlet API を拡張します。

この機能は、SIP Servlet API バージョン 1.1 の一部として直接提供され、独自の API (com.bea.wcp.util.Sessions) は、非推奨になりました。表 6-1 は、非推奨になったメソッドの代わりに使用する SIP Servlet API を示します。詳細については、「SIP Servlet v1.1 API JavaDoc」を参照してください。

表 6-1 非推奨 com.bea.wcp.util.Sessions のメソッド
非推奨になったメソッド (com.bea.wcp.util.Sessions)
置き換えメソッド
説明
getApplicationSession
javax.servlet.sip.SipSessionsUtil.
getApplicationSession
指定したセッション ID に基づいて SipApplicationSession オブジェクトを取得します。
getApplicationSessionsByCallId
なし。
指定した呼び出し ID に関連付けられている SipApplicationSession オブジェクト群のイテレータを取得します。
createHttpSession
なし。
代わりに、HttpSession をConvergedHttpSession に キャストできます。
setApplicationSession
javax.servlet.sip.ConvergedHttpSession.
getApplicationSession
HTTP セッションを既存の SipApplicationSession に関連付けます。
removeApplicationSession
なし。
既存の SipApplicationSession から HTTP セッションを削除します。
getEncodeURL
javax.servlet.sip.ConvergedHttpSession.
encodeURL
既存の HTTP セッション オブジェクトの jsessionid を使用して HTTP URL をエンコードします。

注意 : com.bea.wcp.util.Sessions API は、下位互換性のためにのみ提供されています。すべての新しい開発に対して SIP Servlet API を使用します。Oracle Communications Converged Application Server は com.bea.wcp.util.Sessions API および JSR 289 コンバージェンス API を混在するコンバージド アプリケーションをサポートしません。
注意 : 具体的には、非推奨 Sessions.getApplicationSessionsByCallId(String callId) メソッドは、既存の SipApplicationSession オブジェクトに初期リクエストを関連付けられるためにセッション キーに基づくの対象メソッドを使用する v1.1 SIP Servlet で使用できません。対象メカニズムの詳細については、「SIP Servlet Specification v1.1」を参照してください。

SipApplicationSession の変更

replicated ドメインを使用している場合は、SIP Servlet から SipApplicationSession オブジェクトを変更するときに、Oracle Communications Converged Application Server によって自動的に同時実行制御が行われます。つまり、SIP Servlet から SipApplicationSession オブジェクトを変更するときに、そのオブジェクトが他のアプリケーションによって同時に変更されるのを防ぐために、SIP コンテナによって自動的にオブジェクトがロックされます。

HTTP Servlet などの非 SIP アプリケーションでは、レプリケートされた環境でアプリケーションの呼状態を変更する前に、その呼状態を明示的にロックする必要があります。また、単一の SIP サーブレットが他の呼状態オブジェクトを変更する必要がある場合 (会議開催サブレットは複数の呼を結合する場合など) にも必要です。

アプリケーション セッション オブジェクトへの同時アクセスの管理を容易にするために、Oracle Communications Converged Application Server では、標準の SipApplicationSession オブジェクトを拡張した com.bea.wcp.sip.WlssSipApplicationSession が用意されています。さらに、セッションへの変更をカプセル化するために、新しいインタフェース com.bea.wcp.sip.WlssAction が追加されています。これらの API を使用すると、SIP コンテナの働きにより、WlssAction オブジェクト内に含まれているすべてのビジネス ロジックが、関連付けられている SipApplicationSession インスタンスのロックされたコピーに対して確実に適用されます。

コード リスト 6-1 WlssSipApplicationSession および WlssAction API を使用したコードの例
SipApplicationSession appSession = ...;
WlssSipApplicationSession wlssAppSession = (WlssSipApplicationSession) appSession;
wlssAppSession.doAction(new WlssAction() {
       public Object run() throws Exception {
         // すべてのビジネス ロジックをここに追加
         appSession.setAttribute("counter", latestCounterValue);
         sipSession.setAttribute("currentState", latestAppState);
         // SIP コンテナにより、アプリケーション セッションがロックされている間に
         // run メソッドが呼び出される
         return null;
       }
     });

 


コンバージド アプリケーションのサンプルの使用

Oracle Communications Converged Application Server には、com.bea.wcp.util.Sessions API を使用したサンプルのコンバージド アプリケーションが含まれています。すべてのソース コード、デプロイメント記述子、およびサンプルのビルド ファイルは、WLSS_HOME\samples\sipserver\examples\src\convergence にインストールされています。サンプルをビルドして実行する方法については、サンプル ディレクトリの readme.html ファイルを参照してください。


  ページの先頭       前  次