ヘッダをスキップ
Oracle® WebLogic Communication Services 開発者ガイド
11g リリース 1 (11.1.1)
B55506-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

12 プロファイル サービス API の使用

この章では、アプリケーション開発時に OWLCS の Diameter プロトコル実装に基づいて Diameter Sh プロファイル サービスおよびプロファイル サービス API を使用する方法について説明します。以下の節で構成されています。

12.1 プロファイル サービス API および 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 プロファイル サービスは、OWLCS の Diameter ベース プロトコルをサポートするためのプロバイダとして実装されています。このプロバイダは、Sh アプリケーション仕様で定義されている Diameter コマンド コードの透過的な生成と応答を行います。より高レベルのプロファイル サービス API を使用すると、SIP サーブレットで XML ドキュメント オブジェクト モデル (DOM) を使ってユーザ プロファイル データを XML ドキュメントとして管理できます。変更されたプロファイル データに関するサブスクリプションと通知を管理するには、SIP サーブレット内でプロファイル リスナ インタフェースを実装します。

図 12-1 プロファイル サービス API と Sh プロバイダの実装

プロバイダの実装
「図 12-1 プロファイル サービス API と Sh プロバイダの実装」の説明

OWLCS には、Diameter Sh プロファイル サービスのプロバイダが含まれます。IMS 仕様で定義した追加のインタフェースをサポートするプロバイダーは今後のリリースに提供するかもしれません。このプロファイル サービス API を使用するアプリケーションは、新しいプロバイダが使用可能になったときに、そのプロバイダを使用することができます。

12.2 Sh インタフェース プロバイダの有効化

Diameter サポートの設定方法については、『ネットワーク リソースのコンフィグレーション』の「Diameter Sh クライアント ノードとリレー エージェントのコンフィグレーション」を参照してください。

12.3 プロファイル サービス API の概要

OWLCS には、SIP サーブレットからサブスクライバのプロファイル データをクエリまたは変更したり、変更されたプロファイル データについての通知を受信するようサブスクリプションを管理したりするときに使用できる単純なプロファイル サービス API が用意されています。この API を使用すると、SIP サーブレットから Sh プロバイダ アプリケーションを通じて明示的にユーザ プロファイル ドキュメントをリクエストできます。Sh プロバイダは XML ドキュメントを返し、SIP サーブレットは標準的な DOM テクニックを使って、このローカル ドキュメント内のプロファイル データを読み取ったり変更したりできます。ローカル ドキュメントに加えた変更は、「put」操作後に HSS に反映されます。

12.4 アプリケーション管理下のプロファイル データに関するドキュメント セレクタ キーの作成

ドキュメント セレクタ キーは、Diameter インタフェースを通じて取得する XML ドキュメントを識別するためのものであり、protocol://uri/reference_type[/access_key] という形式になっています。プロファイル データを管理するサーブレットは、ドキュメント セレクタ キーを使用して Sh XML ドキュメントをプロファイル サービスから明示的に取得した後で、DOM を使用してこのドキュメントを処理します。

セレクタの protocol の部分は、ドキュメントの取得に使用する Diameter インタフェース プロバイダを表します。Sh XML ドキュメントは sh:// プロトコルの指定を必要です。

Sh ドキュメント セレクタの場合、2 番目の要素 uri は、通常はプロファイル データが取得されるユーザの User-Identity または Public-Identity に対応しています。LocationInformation または UserState タイプの Sh データ参照をリクエストする場合は、目的のユーザの User-Identity または MSISDN を URI 値に指定します。

表 12-2 に、リクエストできる Sh データ参照のタイプと、その際に指定する URI 値を示します。使用可能なデータ参照と関連する参照タイプの詳細については、3GPP TS 29.328 を参照してください。

表 12-1 Sh データ参照で使用できる URI 値

Sh データ参照番号 データ参照タイプ ドキュメント セレクタに指定する URI 値

0

RepositoryData

User-Identity または Public-Identity

10

IMSPublicIdentity


11

IMSUserState


12

S-CSCFName


13

InitialFilterCriteria


14

LocationInformation

User-Identity または MSISDN

15

UserState


17

Charging information

User-Identity または Public-Identity

17

MSISDN



ドキュメント セレクタ キーの最後の要素 reference_type は、リクエストするデータ参照のタイプを表します。一部のデータ参照リクエストでは、urireference_type だけを指定します。その他に、アクセス キーを使用する Sh リクエストもあります。その場合は、ドキュメント セレクタ キーの 3 番目の要素として、ドキュメント セレクタ キー内で定義されている Attribute-Value Pair (AVP) の値を指定します。

表 12-2 に、各タイプの Sh データ参照リクエストで必要とされるドキュメント セレクタ要素を示します。

表 12-2 Sh データ参照リクエストで使用するドキュメント セレクタ要素のまとめ

データ参照タイプ 必要なドキュメント セレクタ要素 ドキュメント セレクタの例

RepositoryData

sh://uri/reference_type/Service-Indication

sh://sip:user@oracle.com/RepositoryData/Call Screening/

IMSPublicIdentity

sh://uri/reference_type/[Identity-Set]

Identity-Set には次のいずれかを指定します。

  • All-Identities

  • Registered-Identities

  • Implicit-Identities

sh://sip:user@oracle.com/IMSPublicIdentity/Registered-Identities

IMSUserState

sh://uri/reference_type

sh://sip:user@oracle.com/IMSUserState/

S-CSCFName

sh://uri/reference_type

sh://sip:user@oracle.com/S-CSCFName/

InitialFilterCriteria

sh://uri/reference_type/Server-Name

sh://sip:user@oracle.com/InitialFilterCriteria/www.oracle.com/

LocationInformation

sh://uri/reference_type/(CS-Domain | PS-Domain)

sh://sip:user@oracle.com/LocationInformation/CS-Domain/

UserState

sh://uri/reference_type/(CS-Domain | PS-Domain)

sh://sip:user@oracle.com/UserState/PS-Domain/

Charging information

sh://uri/reference_type

sh://sip:user@oracle.com/Charging information/

MSISDN

sh://uri/reference_type

sh://sip:user@oracle.com/MSISDN/


12.5 作成されたドキュメント キーによるプロファイル データ管理

OWLCS には、プロファイル データ ドキュメントを簡単に取得するための com.bea.wcp.profile.ProfileService というヘルパー クラスがあります。getDocument() メソッドは、作成されたドキュメント キーを受け取り、読み取り専用の org.w3c.dom.Document オブジェクトを返します。返されたドキュメントを変更するには、コピーを作成して編集した後で、変更後のドキュメントとキーを引数として putDocument() メソッドに渡します。


注意 :

getDocument() の実行時に OWLCS インスタンス上で Diameter Sh クライアント ノード サービスが使用可能になっていない場合は、プロファイル サービスから「No registered provider for protocol」という例外が送出されます。

OWLCS は、サービス メソッドの呼び出しの間、プロファイル サービスから返されたドキュメントをキャッシュします (たとえば、doRequest() メソッドを呼び出した場合)。サービス メソッドは、同じプロファイル ドキュメントを何度もリクエストする場合は、後続のリクエストは、HSS の再クエリではなくキャッシュから提供されます。

例 12-1 に、プロファイル データを取得して変更する SIP サーブレットのサンプルを示します。

例 12-1 Profileservice を使用してユーザ プロファイル データの取得と書き込みを行うサンプル サーブレット

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); // 変更を反映。
      }
}

12.6 ProfileListener によるプロファイル データのモニタ

IMS の Sh インタフェースを使用すると、サブスクライバのプロファイル データが変更されたときに自動通知を受信するアプリケーションを実現できます。OWLCS には、プロファイル データのサブスクリプションを管理するための便利な API が用意されています。SIP サーブレットで通知を受信するには、com.bea.wcp.profile.ProfileListener インタフェースを実装します。このインタフェースは 1 つの update メソッドから成り、サーブレットをサブスクライブしているプロファイルに変更が生じると、このメソッドが自動的に呼び出されます。同じサーブレットからプロファイル情報を変更した場合には、通知は送信されません (たとえばユーザが自分でプロファイル データを変更した場合など)。


注意 :

レプリケートされた環境では、Diameter リレー ノードは、プロファイルの更新がサブスクライブされているエンジン層サーバに通知を直接プッシュしようとします。そのエンジン層サーバが使用可能でない場合は、エンジン層クラスタの別のサーバが選択されて通知を受信します。このモデルが機能するのは、セッション情報がエンジン層ではなく SIP データ層に格納されているからです。

12.6.1 リスナ実装の前提条件

サブスクライブしたプロファイル データのコールバックを受信するには、SIP サーブレットは以下の手順に従う必要があります。

  • com.bea.wcp.profile.ProfileListener を実行する。

  • com.bea.wcp.profile.ProfileService ヘルパー クラスで subscribe メソッドを使用して 1 つ以上のサブスクリプションを作成する。

  • sip.xmlリスナ要素を使用して、それ自体をリスナーとして登録する。

「ProfileListener の実装」ProfileListener を実装して susbscribe メソッドを使用する方法を示します。有効なリスナーの実装があることに加えて、Servlet は sip.xml デプロイメントの記述子ファイルでそれ自体をリスナーとして宣言しなければなりません。たとえば、以下と同様の listener 要素の宣言を追加する必要があります。

<listener>
   <lisener-class>com.mycompany.MyLisenerServlet</listener-class>
</listener>

12.6.2 ProfileListener の実装

実際のサブスクリプションは、com.bea.wcp.profile.ProfileService ヘルパー クラスの subscribe メソッドを使って管理されます。subscribe メソッドには、現在の SipApplicationSession と、モニタ対象となるプロファイル データ ドキュメントのキーを指定します。「アプリケーション管理下のプロファイル データに関するドキュメント セレクタ キーの作成」を参照してください。

サブスクリプションをキャンセルするには、ProfileSubscription.cancel() を呼び出します。保留状態のサブスクリプションは、アプリケーション セッションの終了時に自動的にキャンセルされます。

例 12-2 に、ProfileListener インタフェースを実装したサーブレットのサンプル コードを示します。

例 12-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());
      }
    }