この章では、SIPサーブレットv1.0仕様に基づく既存のアプリケーションのOracle WebLogic Server SIP Containerへの移植に関するガイドラインと問題点、およびSIPサーブレット仕様について説明します。内容は次のとおりです。
SIPサーブレットv1.1仕様では、正式なアプリケーションの選択および構成処理が説明されており、これはOracle WebLogic Server SIP Containerに完全に実装されています。新規の開発についてはすべて、SIPサーブレットv1.1の手法を使用します。前のバージョンで説明されているアプリケーション構成手法は、非推奨になっています。
Oracle WebLogic Server SIP Containerでは、次の場合にかぎって、SIPサーブレット・バージョン1.0の構成手法を使用してアプリケーションに下位互換性を提供します。
カスタム・アプリケーション・ルーターを構成しない場合、および
デフォルトのアプリケーション・ルーター・プロパティを構成しない場合。
SIPサーブレットv1.1仕様では、SipSessionおよびSipApplicationSessionインタフェースをシリアライズできません。Oracle WebLogic Server SIP Containerは、旧v1.0仕様のバイナリ互換性を維持します。したがって、これらのインタフェースをシリアライズ可能なオブジェクトとして扱うコンパイルされたアプリケーションも操作できます。ただし、このアプリケーションをOracle WebLogic Server SIP Containerで再コンパイルする前に、アプリケーションのソース・コードを変更する必要があります。
TimerService.createTimer APIを使用して、SipSessionをシリアライズ可能なInfoオブジェクトとして保存するバージョン1.0サーブレットでは、SipSession IDをシリアライズ可能なinfoオブジェクトとして保存することによって同様な機能を実現できます。タイマー有効期限のコールバックを受け取ったら、アプリケーションがSipApplicationSessionおよびServletTimerによって返されたシリアライズされたIDオブジェクトを使用してSipApplicationSession内に、取得されたIDでSipSessionを検索する必要があります。詳細は、SIP Servlet v1.1 API JavaDocを参照してください。
SipServletResponse.setCharacterEncoding()はUnsupportedEncodingExceptionをスローしなくなりました。このメソッドでUnsupportedEncodingExceptionを明示的に捕捉するアプリケーションがある場合、既存のコンパイルされたアプリケーションを変更せずにそのままOracle WebLogic Server SIP Containerにデプロイできます。ただし、再コンパイルする前に例外を捕捉しないように、ソース・コードを変更する必要があります。
SIPサーブレットv1.1はSipServletRequestおよびSipServletResponseオブジェクトがSIPトランザクションに属することを認証します。仕様では、メッセージのコミットの条件も定義されます。これをした後、どのアプリケーションもメッセージを変更または再送信できません。SIPメッセージをコミットする条件のリストについては、SIPサーブレット仕様v1.1の(http://jcp.org/en/jsr/detail?id=289)暗黙的なトランザクション状態に関する項を参照してください。
この変更により、コミットされたメッセージを変更(ヘッダーの設定、追加または削除)、または送信しようとする場合、IllegalStateExceptionが発生します。既存のコードによって、SipServletMessage.isCommitted()を使用して、メッセージを変更または送信する前に、メッセージがコミットされていることを確認する必要があります。
SIPサーブレットv1.1は、様々なSIPヘッダーのパラメータをアクセス、作成、および変更するために新しいjavax.servlet.sip.Parameterableインタフェースを導入しています。表C-1に示したシステム・ヘッダー・パラメータは不変であり、この新しいインタフェースを使用して変更できないことに注意してください。
表C-1 不変システム・ヘッダー・パラメータ
|
ヘッダー |
不変パラメータ |
|
From |
タグ |
|
To |
タグ |
|
Via |
branch、received、rport、wlsslport、wlssladdr、maddr、ttl |
|
Record-Route |
すべてのパラメータは不変です。 |
|
Route |
初期リクエストの場合、Routeヘッダーをプッシュするアプリケーションは、ヘッダーのパラメータを変更できます。他の場合、Routeヘッダーのパラメータは不変です。 |
|
Path |
登録リクエストの場合、Pathヘッダーをプッシュするアプリケーションは、ヘッダーのパラメータを変更できます。他の場合、Pathヘッダーのパラメータは不変です。 |
Oracle WebLogic Server SIP Container内のアプリケーションは、プロキシが常にトランザクション・ステートフルである必要があり、プロキシ・オブジェクトをステートレスに設定しても効果はありません。
Proxy.setStateful()およびProxy.getStateful()メソッドは冗長です。Proxy.getStateful()は常にtrueを返し、Proxy.setStateful()は操作を実行しません。
Oracle WebLogic Server SIP Containerは、プリコンパイル済のv1.0デプロイメントを自動的に検出し、下位互換性を保持するために、SIPコンテナの動作を変更します。次の項では、v1.0 SIPサーブレットをOracle WebLogic Server SIP Containerにデプロイするときに発生する動作の違いについて説明します。
SIPサーブレットv1.1仕様では、サーブレットのデプロイメントについて、前の仕様よりも厳密な検証が必要です。次の場合、v1.0 SIPサーブレットはOracle WebLogic Server SIP Containerに正常にデプロイされますが、デプロイ時に警告メッセージが表示されます。
v1.0のデプロイメント記述子のlistener-class要素でリスナーが宣言されているが、対応するクラスがEventListenerインタフェースを実装していない場合、デプロイ時に警告が表示されます。(リスナーを宣言するバージョン1.1 SIPサーブレットはEventListenerを実装している必要があり、そうでなければアプリケーションをデプロイできません)。
v1.0のデプロイメント記述子のservlet-class要素でSIPサーブレットが宣言されているが、対応するクラスがSipServlet抽象クラスを拡張していない場合、警告が表示されます。(バージョン1.1 SIPサーブレットはSipServletを拡張している必要があり、そうでなければアプリケーションをデプロイできません)。
SIPサーブレットv1.1仕様では、アプリケーションがコミット・メッセージを変更しようとした場合、SIPコンテナがIllegalStateExceptionをスローすることを推奨しています。下位互換性を保つために、Oracle WebLogic Server SIP Containerは、バージョン1.1 SIPサーブレット・デプロイメントによりコミット・メッセージが変更される場合のみ、IllegalStateExceptionをスローします。
SIPサーブレットv1.1仕様では、Pathヘッダーはシステム・ヘッダーとして定義されており、アプリケーションによって変更できなくなりました。バージョン1.0 SIPサーブレットではPathヘッダーを変更できますが、警告メッセージが生成されます。バージョン1.0 SIPサーブレットでPathヘッダーの変更を試行すると、IllegalArgumentExceptionで失敗します。
Oracle WebLogic Server SIP Containerでは、SipServletResponse.createPrack()によってバージョン1.1 SIPサーブレットの場合のみ、Rel100Exceptionがスローされます。下位互換性を保つするために、createPrack()はバージョン1.0 SIPサーブレットの場合、例外をスローしません。
バージョン1.1 SIPサーブレットによってProxy.proxyTo(uri)またはProxy.proxyTo(uris)で重複するブランチURIが指定された場合、Oracle WebLogic Server SIP ContainerによってIllegalStateExceptionがスローされます。下位互換性を保つするために、バージョン1.0 SIPサーブレットがこれらのメソッドで重複するURIを指定された場合、Oracle WebLogic Server SIP Containerによって無視されます(例外がスローされません)。
SIPサーブレットv1.1では、シーケンシャルやパラレルの両方のプロキシ処理のプロキシ分岐の行動に影響をもたらすいくつかのプロトコルの変更があります。
v1.1仕様では、シーケンシャル・プロキシ処理については、Oracle WebLogic Server SIP Containerによって、sip.xmlまたはSIPプロトコルTimer C(3分以上)に構成されたsequential-search-timeoutの最大値を使用してブランチ・タイマーを起動することを必要とします。Oracle WebLogic Server SIP Containerの旧バージョンでは、常にsequential-search-timeoutの値を使用してシーケンシャル・ブランチ・プロキシ・タイムアウトが設定されます。この動作はv1.0デプロイメントに対して維持されます。
パラレル・プロキシ処理について、v1.1仕様は、プロキシ処理をコントロールする新しいproxyTimeout値を提供します。この仕様は、Oracle WebLogic Server SIP Containerが、SIPサーブレットv1.0仕様が必要とするTimer C値ではなく、構成したproxyTimeout値を使用してブランチ・タイマーをリセットすることを必要とします。Timer C値はv1.0デプロイメントのためにまだ使用されます。
WebLogic SIP Serverの以前のバージョンは、SIPサーブレットv1.0仕様でサポートされない機能およびRFCをサポートするため、独自のAPIを提供します。SIPサーブレットv1.1仕様により、新しいRFCサポートおよび機能が追加され、独自のAPIが冗長になります。表C-2には、非推奨となったWebLogic SIP Serverのメソッドのかわりに使用できる新しいSIPサーブレットv1.1メソッドを示します。v1.0アプリケーションに下位互換性を提供するため、非推奨のメソッドはまだこのリリースで利用可能です。
表C-2 非推奨となったAPI
|
非推奨のメソッド(WebLogic SIP Server独自) |
置換えメソッド(SIPサーブレットv1.1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表6–1「コンバージド・アプリケーションのセッション」を参照。 |
Oracle WebLogic Server SIP Containerの前のバージョンのSNMP MIB定義はWebLogic MIBのネーミング規則に準拠していませんでした。特に、MIB表列名のラベルは表名から始まっていません。Oracle WebLogic Server SIP Containerは、WebLogicのネーミング規則に準拠し、メタデータ・ファイルを生成するWebLogicツールとの互換性を提供するために、ラベルの先頭にsipServerを付加します。
たとえば、バージョン3.xでのSipServerEntry MIB定義を次に示します。
SipServerEntry ::= SEQUENCE {
sipServerIndex DisplayString,
t1TimeoutInterval INTEGER,
t2TimeoutInterval INTEGER,
t4TimeoutInterval INTEGER,
....
}
Oracle WebLogic Server SIP Containerでの定義は次のようになります。
SipServerEntry ::= SEQUENCE {
sipServerIndex DisplayString,
sipServerT1TimeoutInterval Counter64,
sipServerT2TimeoutInterval INTEGER,
sipServerT4TimeoutInterval INTEGER,
.....
}
アプリケーションまたはスクリプトが直接にMIB表列名のラベルを使用している場合は、このMIBの変更により下位互換性の問題が生じる場合があります。表名を先頭にするように、iso.org.dod.internet.private.enterprises.bea.wlss.sipServerTable.t1TimeoutIntervalのようなハード・コード化されたラベルをすべて変更する必要があります(iso.org.dod.internet.private.enterprises.bea.wlss.sipServerTable.sipServerT1TimeoutInterval)。
|
注意: 常に、クライアント側のSNMPツールによってMIBがロードされ、MIBのロードされたラベルに基づく値を取得するコマンドが発行されます。これらのツールは上記の変更に影響を受けません。Oracle WebLogic Server SIP Containerの完全なMIBファイルは、$WLSS_HOME/server/lib/wlss/BEA-WLSS-MIB.asn1としてインストールされます。 |
Oracle WebLogic Server SIP Containerで提供される診断モニターと診断アクションの先頭に、occas/が付加されるようになりました。たとえば、SIP Server 3.1 Sip_Servlet_Before_Serviceモニターはoccas/Sip_Servlet_Before_Serviceと名付けられます。接頭辞が付いていない既存の診断構成ファイルまたはアプリケーションは、Oracle WebLogic Server SIP Containerで使用する前に更新する必要があります。