3


プロセスインジケーションの使用

この章では、CIM プロセスインジケーションの概要、CIM プロセスインジケーションをイベント発生時の通信に使用する方法、および CIM プロセスインジケーションの受信をクライアントで申請できるようにするクラスについて説明します。この章は、以下のトピックで構成されています。

プロセスインジケーションクラスについての詳細は、第 4 章「WDR のクラス、ドメイン、関連、および指示」を参照してください。



注 - CIM イベントモデルについての詳細は、http://www.dmtf.org/education/whitepapers.php から入手可能の Distributed Management Task Force 白書を参照してください。




CIM イベントモデル



参考 - CIM Event API は、/usr/sadm/lib/wbem/doc/javax/wbem/client/CIMEvent.html にあります。



イベントとは、実世界でのできごとのことです。プロセスインジケーションとは、イベントが発生した結果として作成されるオブジェクトです。プロセスインジケーションはイベントの通知であり、イベントとプロセスインジケーションを区別することが重要です。CIM ではイベントが発行されるのではなく、プロセスインジケーションが発行されます。

プロセスインジケーションは、ゼロ個以上のトリガー (イベントにより生成されたデータ変更の記述) と関連を持っているクラスのサブタイプであり、Indication クラスのインスタンスを作成できるのがこのトリガーです。WBEM の実装には、トリガーを表す明示的に定義されたオブジェクトはありません。トリガーは、システムの基本オブジェクトでの操作 (クラス、インスタンス、およびネームスペースでの create、delete、および modify)、または管理対象環境でのイベントのいずれかによって、暗黙的に定義されます。イベントが発生すると、WBEM プロバイダでは、システムで何かが起こったことを示すプロセスインジケーションを生成します。

たとえば Service クラスでは、サービスが停止してトリガーが開始されると、サービス停止の通知としての役割を果たすプロセスインジケーションが発行されます。

Solaris WBEM Services スキーマの関連 CIM クラスは、/usr/sadm/lib/wbem/doc/mofhtml/index.html をご覧ください。クラスは以下のように構成されています。

CIM_ProcessIndication スーパークラスは、WDR インジケーションクラス階層図の最上位に位置しています。


インジケーションの生成方法

CIM イベントは、ライフサイクルイベントプロセスイベントのいずれかに分類できます。ライフサイクルイベントは組み込み (固有の) CIM イベントで、クラスやクラスのインスタンスの作成、変更、削除といった、データへの変更に応答して発生します。プロセスイベントは、ライフサイクルイベントでは表されない、ユーザーが定義した (固有でない) イベントです。

管理者は cimom.properties ファイルのプロパティーを編集することにより、CIM Object Manager のイベントポーリング間隔とデフォルトのポーリング動作を変更できます。cimom.properties ファイルの編集方法については、『Solaris WBEM Services の管理』(Part No. 806-7119-10) を参照してください。

CIM Object Manager からの要求に応じてインジケーションを生成するのは、イベントプロバイダです。CIM Object Manager では、サブスクリプション要求を分析し、EventProvider インタフェースを介して該当するプロバイダに連絡し、適切なインジケーションを生成するよう要求します。プロバイダでインジケーションが生成されると、CIM Object Manager は、CIM_IndicationHandler インスタンスで指定されている送信先にそのインジケーションを送信します。このインスタンスは、サブスクライバ (申請元) によって作成されます。


サブスクリプションの作成方法

クライアントアプリケーションでは、CIM イベントが通知されるように申請できます。サブスクリプションは、1 つまたは複数のインジケーションストリームに対する宣言です。

CIM イベントが通知されるように申請するアプリケーションでは、以下について記述します。

イベントの発生は、CIM_Indication クラスのいずれかのサブクラスのインスタンスとして表されます。インジケーションが生成されるのは、クライアントがイベントについて申請をしている場合のみです。

サブスクリプションを作成するには、CIMListener インタフェースのインスタンスを指定して、以下の CIM_Indication クラスのサブクラスのインスタンスを作成します。

CIM_IndicationFilter -- インジケーションを生成する基準と、そのインジケーションで返されるようにするデータを定義します。

CIM_IndicationHandler -- インジケーションの処理と操作方法を示します。インジケーションを配信する宛先とプロトコルが含まれる場合もあります。

CIM_IndicationSubscription -- イベントフィルタとイベントハンドラをバインドして関連付けます。

アプリケーションでは、1 つまたは複数のイベントハンドラを使って、1 つまたは複数のイベントフィルタを作成することができます。アプリケーションがイベントサブスクリプションを作成するまで、イベントインジケーションは配信されません。


CIM リスナーの追加

CIM イベントのインジケーションに関する登録を行うときは、CIMListener インタフェースのインスタンスを追加します。CIM Object Manager では、クライアントサブスクリプションが作成されたときに、イベントフィルタで指定された CIM イベントのインジケーションを生成します。

CIMListener インタフェースでは、引数 CIMEvent をとる indicationOccured メソッドを実装している必要があります。このメソッドは、インジケーションが配信できるようになったときに呼び出されます。


procedure icon  CIM リスナーを追加する

以下のようなコードを使用して、CIM リスナーを追加します。

// Connect to the CIM Object Manager

cc = new CIMClient();

// Register the CIM Listener

cc.addCIMListener(new CIMListener() {

public void indicationOccured(CIMEvent e) {

}

});


イベントフィルタの作成

イベントフィルタには、配信されるイベントのタイプと、配信される条件が記述されます。アプリケーションでは、CIM_IndicationFilter クラスのインスタンスを作成し、そのプロパティーの値を定義することにより、イベントフィルタを作成します。イベントフィルタは、ネームスペースに含まれます。各イベントフィルタは、そのフィルタと同じネームスペースに含まれているイベントに対してのみ動作します。

CIM_IndicationFilter クラスには文字列プロパティーがあります。アプリケーションは、このプロパティーで、一意にフィルタを特定するよう設定し、照会文字列を指定し、照会文字列の構文解析に使用する照会言語を設定することができます。現在、照会言語でサポートされているのは、WBEM Query Language のみです。

表 3-1 CIM_IndicationFilter クラスのプロパティー

プロパティー

説明

必須・オプション

SystemCreationClassName

フィルタを作成するクラスが存在する、またはそのクラスが適用されるシステムの名前。

オプション。この基本プロパティーのデフォルトは CIMSystem.CreationClassName です。

SystemName

フィルタが存在する、またはそのフィルタが適用されるシステムの名前。

オプション。この基本プロパティーのデフォルトは、CIM Object Manager が実行されているシステムの名前です。

CreationClassName

フィルタの作成に使用されたクラスまたはサブクラスの名前。

オプション。この基本プロパティーのデフォルトとして、CIM Object Manager により CIM_IndicationFilter が割り当てられます。

Name

フィルタの一意の名前。

オプション。CIM Object Manager により一意の名前が割り当てられます。

SourceNamespace

CIM インジケーションが生成されるローカルのネームスペースへのパス。

オプション。デフォルトは NULL です。

Query

インジケーションが生成される条件を定義する照会式。現在、Level 1 WBEM Query Language 式のみサポートされています。WQL 照会式の作成方法については、『Sun WBEM SDK 開発ガイド』(Part No. 816-0093-10) の「照会」を参照してください。

必須。

QueryLanguage

照会式を記述する言語。

必須。デフォルトは WQL (WBEM Query Language) です。



procedure icon  イベントフィルタを作成する

1. 以下のコードを使用して、CIM_IndicationFilter クラスのインスタンスを作成します。

CIMClass cimfilter = cc.getClass

(new CIMObjectPath(``CIM_IndicationFilter''), true, true, true, null);CIMInstance ci = cimfilter.newInstance();

2. 以下のコードを使用して、イベントフィルタの名前を指定します。

Name = ``filter_all_new_solarisdiskdrives'';

3. 以下のコードを使用して、返されるイベントインジケーションを特定する WQL 文字列を作成します。

String filterString = ``SELECT *

FROM CIM_InstCreation WHERE sourceInstance is
ISA Solaris_DiskDrive''

4. 以下のコードを使用して、cimfilter インスタンスのプロパティー値を設定して、フィルタ名、CIMイベントを選択するフィルタ文字列、および照会文字列の構文解析に使用する照会言語を指定します。



注 - 現在、照会文字列の構文解析に使用できるのは WBEM Query Language のみです。



ci.setProperty(``Name'';, new CIMValue("filter_all_new_solarisdiskdrives”)); ci.setProperty("Query", new CIMValue(filterString)); ci.setProperty("QueryLanguage", new CIMValue("WQL");)

5. 以下のコードを使用して、cimfilter インスタンスから 1 つのインスタンスを作成し、そのインスタンスを CIM Object Manager Repository に格納します。

CIMObjectPath filter = cc.createInstance(new CIMObjectPath(), ci);


イベントハンドラの作成

Solaris Event MOF では、RMI プロトコルを使ってクライアントアプリケーションへの CIM イベントのインジケーションの配信を処理する Solaris_JAVARXMIDelivery クラスを作成することにより、CIM_IndicationHandler クラスを拡張しています。RMI クライアントは、Solaris_JAVAXRMIDelivery クラスをインスタンス化して、RMI による配信場所を設定する必要があります。クライアントがイベントの受信に使用できるのは RMI のみで、HTTP はサポートされていません。

アプリケーションでは、CIM_IndicationHandler クラスのプロパティーを設定し、ハンドラに一意の名前を付け、その所有者の UID を特定します。

表 3-2 CIM_IndicationHandler クラスのプロパティー

プロパティー

説明

必須・オプション

SystemCreationClassName

ハンドラを作成するクラスが存在する、またはそのクラスが適用されるシステムの名前。

オプション。CIM Object Manager により設定されます。

SystemName

ハンドラが存在する、またはそのハンドラが適用されるシステムの名前。

オプション。この基本プロパティーのデフォルトは、CIM Object Manager が実行されているシステムの名前です。

CreationClassName

ハンドラの作成に使用されるクラスまたはサブクラスの名前。

オプション。この基本プロパティーのデフォルトとして、CIM Object Manager により適切なクラスが割り当てられています。

Name

ハンドラの一意の名前。

必須。クライアントアプリケーションで一意の名前を割り当てる必要があります。

Owner

このハンドラを作成した、または保持しているエンティティーの名前。プロバイダがこの値をチェックし、ハンドラでのインジケーションの受け取りを承認するかどうかを判定します。

オプション。デフォルトの値は、このインスタンスを作成しているユーザーの Solaris ユーザー名です。



procedure icon  CIM イベントハンドラを作成する

CIM イベントハンドラを作成するときは、以下のコードを使用します。

 

// Create an instance of the Solaris_RMIDelivery class.

CIMClass rmidelivery = cc.getClass(new CIMObjectPath
(``Solaris_RMIDelivery'';), false, true, true, null);

 

CIMInstance ci = rmidelivery.newInstance();

 

//Create a new instance (delivery) from

//the rmidelivery instance.

CIMObjectPath delivery = cc.createInstance(new
CIMObjectPath(), ci);


イベントフィルタとイベントハンドラのバインド

アプリケーションは、CIM_IndicationSubscription クラスのインスタンスを作成することにより、イベントフィルタとイベントハンドラをバインドします。CIM_IndicationSubscription が作成されると、イベントフィルタによって指定されたイベントのインジケーションが配信されます。


procedure icon  イベントフィルタとイベントハンドラをバインドする

以下のコード例では、サブスクリプション (filterdelivery) を作成し、イベントフィルタの作成で作成した filter オブジェクトに filter プロパティーを定義し、CIM イベントハンドラを作成するで作成した delivery オブジェクトに handler プロパティーを定義しています。

CIMClass filterdelivery = cc.getClass(new
CIMObjectPath(`'CIM_IndicationSubscription''),
true, true, true, null);
ci = filterdelivery.newInstance();

//Create a property called "filter" that refers to the filter //instance.
ci.setProperty("filter", new CIMValue(filter));

//Create a property called handler that refers to the delivery //instance.
ci.setProperty("handler", new CIMValue(delivery));

CIMObjectPath indsub = cc.createInstance(new CIMObjectPath(), ci);