|
以下の節では、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 仕様の内容を簡潔にまとめると、次のようになります。
WEB-INF サブディレクトリの下に配置します。これにより、HTTP Servlet がこれらのファイルを静的ファイルとして提供することはなくなります。sip.xml と web.xml の両方のデプロイメント記述子が必要になります。Oracle Communications Converged Application Server コンテナ内での Servlet 機能をコンフィグレーションするために、weblogic.xml デプロイメント記述子を用意することもあります。
図 6-1 に示すように、Oracle Communications Converged Application Server コンテナにデプロイされるコンバージド アプリケーションは必ずユニークな SipApplicationSession を持ち、その中に 1 つまたは複数の SipSession オブジェクトと HttpSession オブジェクトを含めることができます。

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」を参照してください。
| 注意 : | 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」を参照してください。 |
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 インスタンスのロックされたコピーに対して確実に適用されます。
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 ファイルを参照してください。
|