第3章 |
|
この章では、CIM プロセスインジケーションの概要、CIM プロセスインジケーションをイベント発生時の通信に使用する方法、および CIM プロセスインジケーションの受信をクライアントで申請できるようにするクラスについて説明します。この章は、以下のトピックで構成されています。
プロセスインジケーションクラスについての詳細は、第 4 章「WDR のクラス、ドメイン、関連、および指示」を参照してください。
注 - CIM イベントモデルについての詳細は、http://www.dmtf.org/education/whitepapers.php から入手可能の Distributed Management Task Force 白書を参照してください。 |
参考 - 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 イベントのインジケーションに関する登録を行うときは、CIMListener インタフェースのインスタンスを追加します。CIM Object Manager では、クライアントサブスクリプションが作成されたときに、イベントフィルタで指定された CIM イベントのインジケーションを生成します。
CIMListener インタフェースでは、引数 CIMEvent をとる indicationOccured メソッドを実装している必要があります。このメソッドは、インジケーションが配信できるようになったときに呼び出されます。
CIM リスナーを追加する |
以下のようなコードを使用して、CIM リスナーを追加します。
// Connect to the CIM Object Manager
cc.addCIMListener(new CIMListener() {
public void indicationOccured(CIMEvent e) {
イベントフィルタには、配信されるイベントのタイプと、配信される条件が記述されます。アプリケーションでは、CIM_IndicationFilter クラスのインスタンスを作成し、そのプロパティーの値を定義することにより、イベントフィルタを作成します。イベントフィルタは、ネームスペースに含まれます。各イベントフィルタは、そのフィルタと同じネームスペースに含まれているイベントに対してのみ動作します。
CIM_IndicationFilter クラスには文字列プロパティーがあります。アプリケーションは、このプロパティーで、一意にフィルタを特定するよう設定し、照会文字列を指定し、照会文字列の構文解析に使用する照会言語を設定することができます。現在、照会言語でサポートされているのは、WBEM Query Language のみです。
イベントフィルタを作成する |
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イベントを選択するフィルタ文字列、および照会文字列の構文解析に使用する照会言語を指定します。
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 を特定します。
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
CIMObjectPath delivery = cc.createInstance(new
CIMObjectPath(), ci);
アプリケーションは、CIM_IndicationSubscription クラスのインスタンスを作成することにより、イベントフィルタとイベントハンドラをバインドします。CIM_IndicationSubscription が作成されると、イベントフィルタによって指定されたイベントのインジケーションが配信されます。
イベントフィルタとイベントハンドラをバインドする |
以下のコード例では、サブスクリプション (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);
Copyright© 2002, Sun Microsystems, Inc. All rights reserved.