|
以下の節では、アプリケーション開発時に Oracle Communications Converged Application Server の Diameter プロトコル実装に基づいて Diameter Sh インタフェース アプリケーションを使用する方法について説明します。
IMS 仕様では、Sh インタフェースを、アプリケーション サーバ (AS) の機能と Home Subscriber Server (HSS) の間、または複数の IMS アプリケーション サーバの間の通信手段として定義しています。アプリケーション サーバは基本的に Sh インタフェースを次の 2 つの目的で使用します。
アプリケーション サーバから使用できるユーザ データには、アプリケーション サーバ上のサービスによって定義されるもの (リポジトリ データ) と、HSS 上で管理されているユーザの IMS プロファイル データのサブセットがあります。Sh インタフェースの仕様 3GPP TS 29.328 は、Sh を通じてクエリの実行や更新ができる IMS プロファイル データを定義します。Sh インタフェースからアクセス可能なすべてのユーザ データは、3GPP TS 29.328 で定義されたスキーマのある XML ドキュメントとして掲示されます。
IMS の Sh インタフェースは、Oracle Communications Converged Application Server の Diameter ベース プロトコルをサポートするプロバイダとして実装されています。このプロバイダは、Sh アプリケーション仕様で定義されている Diameter コマンド コードの透過的な生成と応答を行います。より高レベルのプロファイル サービス API を使用すると、SIP サーブレットで XML ドキュメント オブジェクト モデル (DOM) を使ってユーザ プロファイル データを XML ドキュメントとして管理できます。変更されたプロファイル データに関するサブスクリプションと通知を管理するには、SIP サーブレット内でプロファイル リスナ インタフェースを実装します。

Oracle Communications Converged Application Server には、Diameter Sh インタフェースのプロバイダが含まれます。今後のリリースでは、IMS 仕様で定義された追加のインタフェースをサポートするために、いくつかのプロバイダーが提供される可能性があります。このプロファイル サービス API を使用するアプリケーションは、新しいプロバイダが使用可能になったときに、そのプロバイダを使用することができます。
Diameter サポートの設定方法については、『ネットワーク リソースのコンフィグレーション』の「Diameter Sh クライアント ノードとリレー エージェントのコンフィグレーション」を参照してください。
Oracle Communications Converged Application Server には、SIP サーブレットからサブスクライバのプロファイル データをクエリまたは変更したり、変更されたプロファイル データについて通知を受信するようにサブスクリプションを管理したりするときに使用できる、単純なプロファイル サービス API が用意されています。この API を使用すると、SIP サーブレットから Sh プロバイダ アプリケーションを通じて明示的にユーザ プロファイル ドキュメントをリクエストできます。Sh プロバイダは XML ドキュメントを返し、SIP サーブレットは標準的な DOM テクニックを使って、このローカル ドキュメント内のプロファイル データを読み取ったり変更したりできます。ローカル ドキュメントに加えた変更は、「put」操作後に HSS に反映されます。
プロファイル データを管理するサーブレットは、キーを使用して Sh XML ドキュメントをファクトリから明示的に取得した後で、DOM を使用してこのドキュメントを処理します。
ドキュメント セレクタ キーは、Diameter インタフェースを通じて取得する XML ドキュメントを識別し、protocol://uri/reference_type[/access_key] という形式を使用します。
セレクタの protocol の部分は、ドキュメントの取得に使用する Diameter インタフェース プロバイダを識別します。Sh XML ドキュメントには、sh:// プロトコルの指定が必要です。
Sh ドキュメント セレクタの場合、2 番目の要素 uri は、通常はプロファイル データが取得されるユーザの User-Identity または Public-Identity に対応します。LocationInformation または UserState タイプの Sh データ参照をリクエストする場合は、目的のユーザの User-Identity または MSISDN を URI 値に指定できます。
表 2-1 に、リクエストできる Sh データ参照のタイプと、その際に指定する URI 値を示します。使用可能なデータ参照と関連する参照タイプの詳細については、3GPP TS 29.328 を参照してください。
ドキュメント セレクタの最後の要素 reference_type は、リクエストするデータ参照のタイプを指定します。一部のデータ参照リクエストでは、uri と reference_type だけを指定します。その他に、アクセス キーを使用する Sh リクエストもあります。その場合は、ドキュメント セレクタの 3 番目の要素として、キー内で定義されている Attribute-Value Pair (AVP) の値を指定します。
表 2-2 は、各タイプの Sh データ参照リクエストで必要なドキュメント セレクタ要素を示しています。
Oracle Communications Converged Application Server には、プロファイル データ ドキュメントを簡単に取得するための com.bea.wcp.profile.ProfileService というヘルパー クラスがあります。getDocument() メソッドは、作成されたドキュメント キーを受け取り、読み取り専用の org.w3c.dom.Document オブジェクトを返します。ドキュメントを変更するには、コピーを作成して編集した後で、変更後のドキュメントとキーを引数として putDocument() メソッドに渡します。
| 注意 : | getDocument() の実行時に Oracle Communications Converged Application Server インスタンス上で Diameter Sh クライアント ノード サービスが使用可能になっていないと、プロファイル サービスから「No registered provider for protocol」という例外が送出されます。 |
Oracle Communications Converged Application Server は、サービス メソッドの呼び出しの間、プロファイル サービスから返されたドキュメントをキャッシュします (たとえば、doRequest() メソッドを呼び出した場合)。サービス メソッドが同じプロファイル ドキュメントを何度もリクエストする場合は、後続のリクエストはキャッシュから提供され、HSS を再度クエリしません。
コード リスト 2-1 は、プロファイル データを取得して変更する SIP サーブレットのサンプルを示しています。
package demo;
import com.bea.wcp.profile.*;
import javax.servlet.sip.SipServletRequest;
import javax.servlet.sip.SipServlet;
import org.w3c.dom.Document;
import java.io.IOException;
public class MyServlet extends SipServlet {private ProfileService psvc;
public void init() {psvc = (ProfileService) getServletContext().getAttribute(ProfileService.PROFILE_SERVICE);
}
protected void doInvite(SipServletRequest req) throws IOException {String docSel = "sh://" + req.getTo() + "/IMSUserState/";
// プロファイル ドキュメントを取得して変更
Document doc = psvc.getDocument(docSel); // ドキュメントは読み取り専用
Document docCopy = (Document) doc.cloneNode(true);
// DOM を使用してコピーを変更
psvc.putDocument(docSel, docCopy); // 変更を反映
}
}
IMS Sh インタフェースにより、アプリケーションはサブスクライバのプロファイル データが変更されたときに通知を自動的に受信することができます。Oracle Communications Converged Application Server には、プロファイル データのサブスクリプションを管理するための便利な API が用意されています。SIP サーブレットで通知を受信するには、com.bea.wcp.profile.ProfileListener インタフェースを実装します。このインタフェースは 1 つの update メソッドから成り、サーブレットをサブスクライブしているプロファイルに変更が生じると、このメソッドが自動的に呼び出されます。同じサーブレットからプロファイル情報を変更した場合には、通知は送信されません (たとえばユーザが自分でプロファイル データを変更した場合など)。
| 注意 : | レプリケートされた環境では、Diameter リレー ノードは、プロファイルの更新がサブスクライブされているエンジン層サーバに通知を直接プッシュしようとします。そのエンジン層サーバが使用可能でない場合は、エンジン層クラスタの別のサーバが選択されて通知を受信します。このモデルが機能するのは、セッション情報がエンジン層ではなく SIP データ層に格納されているからです。 |
サブスクライブしたプロファイル データのコールバックを受信するには、SIP サーブレットは以下の手順に従う必要があります。
「ProfileListener の実装」は、ProfileListener を実施して susbscribe メソッドを使用する方法を示しています。有効なリスナーの実装があることに加えて、Servlet は sip.xml デプロイメントの記述子ファイルでそれ自体をリスナーとして宣言しなければなりません。たとえば、以下と同様の listener 要素の宣言を追加する必要があります。
<listener>
<lisener-class>com.mycompany.MyLisenerServlet</listener-class>
</listener>
実際のサブスクリプションは、com.bea.wcp.profile.ProfileService ヘルパー クラスの subscribe メソッドを使って管理されます。subscribe メソッドには、現在の SipApplicationSession と、モニタ対象となるプロファイル データ ドキュメントのキーを指定します。ドキュメント キーについては、「アプリケーション管理下のプロファイル データに関するドキュメント キーの作成」を参照してください。
サブスクリプションを取り消すには、ProfileSubscription.cancel() を呼び出します。保留状態のサブスクリプションは、アプリケーション セッションの終了時に自動的に取り消されます。
コード リスト 2-2 は、ProfileListener インタフェースを実装したサーブレットのサンプル コードを示しています。
package demo;
import com.bea.wcp.profile.*;
import javax.servlet.sip.SipServletRequest;
import javax.servlet.sip.SipServlet;
import org.w3c.dom.Document;
import java.io.IOException;
public class MyServlet extends SipServlet implements ProfileListener {private ProfileService psvc;
public void init() {psvc = (ProfileService) getServletContext().getAttribute(ProfileService.PROFILE_SERVICE);
}
protected void doInvite(SipServletRequest req) throws IOException {String docSel = "sh://" + req.getTo() + "/IMSUserState/";
// プロファイル データをサブスクライブ
psvc.subscribe(req.getApplicationSession(), docSel, null);
}
public void update(ProfileSubscription ps, Document document) { System.out.println("IMSUserState updated: " + ps.getDocumentSelector());}
}
|