CIM イベントのインジケーションを生成するには、次の処理が行われます。
EventProvider インタフェースのメソッドを使って、CIM イベントインジケーションの送信をいつ開始および停止するかを検出する。
CIM_Indication クラスの 1 つまたは複数のサブクラスのインスタンスを作成して、発生した CIM イベントの情報を格納する。
ProviderCIMOMHandle インタフェースの deliverEvent メソッドを使って、インジケーションを CIM Object Manager に送信する。
イベントプロバイダは、EventProvider インタフェースを実装する必要があります。CIM Object Manager は、このインタフェースのメソッドを使って、クライアントが CIM イベントのインジケーションを予約したり、CIM イベントの予約を取り消したことをプロバイダに知らせます。さらにこれらのメソッドによって、プロバイダは、CIM Object Manager が特定のイベントインジケーションのポーリングを行うべきかどうか、インジケーションをハンドラに返すことを承認するかどうかを指定します。
次の表に、イベントプロバイダが実行しなければならない EventProvider インタフェースのメソッドを示します。
表 6–3 EventProvider インタフェースのメソッド
メソッド |
説明 |
---|---|
activateFilter |
クライアントが予約を登録すると、CIM Object Manager は、このメソッドを呼び出して CIM イベントの検査をプロバイダに依頼する。 |
authorizeFilter |
クライアントが予約を登録すると、CIM Object Manager は、このメソッドを呼び出して指定されたフィルタ式が許可されているかを検査する。 |
deActivateFilter |
クライアントが予約を削除すると、CIM Object Manager は、このメソッドを呼び出して指定されたイベントフィルタの停止をプロバイダに依頼する。 |
mustPoll |
クライアントが予約を削除すると、CIM Object Manager は、このメソッドを呼び出して、指定されたフィルタ式をプロバイダが許可するかどうか、そのフィルタ式のポーリングが必要かどうかを検査する。 |
CIM Object Manager は、すべてのメソッドに次の引数の値を渡します。
filter — インジケーションを生成する必要がある CIM イベントを指定する SelectExp 型。
eventType — CIM イベントの型を指定する String 型。これは、select 式の FROM 節から抽出することもできます。
classPath — このイベントを必要とするクラスの名前を指定する CIMObjectPath 型。
さらに、activateFilter メソッドは、これがこのイベント型の最初のフィルタであることを示すブール値 firstActivation を受け取ります。deActivateFilter メソッドは、これが最後のフィルタであることを示すブール値 lastActivation を受け取ります。
クライアントアプリケーションが CIM_IndicationSubscription クラスのインスタンスを作成して CIM イベントのインジケーションを予約すると、CIM Object Manager はこの要求を適切なプロバイダに転送します。プロバイダが EventProvider インタフェースを実装していれば、CIM Object Manager は、プロバイダの activateFilter メソッド/deActivateFilter メソッドを呼び出して、指定するイベントのインジケーションの送信をいつ開始/停止するかをプロバイダに通知します。
プロバイダは、インスタンスを作成、変更、削除するたびに、インジケーションを作成、送信して、CIM Object Manager の要求に応答します。通常プロバイダは、CIM Object Manager が activateFilter メソッド/deActivateFilter メソッドを呼び出した時に設定/クリアされるフラグ変数を定義します。そして、インスタンスを作成、変更、または削除するメソッドの中で、アクティブなフラグのステータスを検査します。フラグが設定されている場合、プロバイダは、作成した CIM インスタンスオブジェクトを含むインジケーションを作成し、deliverEvent メソッドを使ってこのインジケーションを CIM Object Manager に返します。フラグが設定されていない場合、プロバイダは、イベントインジケーションの作成や送信を行いません。
機密データを扱うプロバイダは、インジケーションの要求に対する承認を検査することができます。その場合、プロバイダは Authorizable インタフェースを実装して、そのプロバイダが承認を検査することを示す必要があります。さらに、プロバイダは authorizeFilter メソッドを実装する必要があります。CIM Object Manager は、このメソッドを呼び出して、イベントハンドラの所有者 (UID) がフィルタ式の評価に基づいて送信されるインジケーションを受信することを承認されているかどうかを検査します。イベントの宛先の所有者 (イベントハンドラ) の UID は、フィルタをアクティブにすることを要求するクライアントアプリケーションの所有者と同じである必要はありません。
プロバイダは、CIM_Indication クラスのサブクラスのインスタンスを作成することによって、CIM イベントのインジケーションを生成します。
次の表に、プロバイダが生成すべき内部 CIM イベントを示します。
表 6–4 CIM イベントインジケーションクラス
イベントクラス |
説明 |
---|---|
CIM_InstCreation |
新しいインスタンスが作成されたことを知らせる。 |
CIM_InstDeletion |
既存のインスタンスが削除されたことを知らせる。 |
CIM_InstModification |
インスタンスが変更されたことを知らせる。インジケーションには、変更される前のインスタンスのコピーが含まれていなければならない。 |
EventProvider インタフェースを実装します。以下に例を示します。
public class sampleEventProvider implements InstanceProvider EventProvider{ // プロバイダが CIM Object Manager に接続するための参照 private ProviderCIMOMHandle cimom; }
プロバイダが処理するインスタンスインジケーションに対して、表 6–3 に示すそれぞれのメソッドを実行します。
作成、変更、削除のインスタンスのイベント型ごとに、表 6–4 に示すインジケーションを作成します。以下に createInstance メソッドの例を示します。
public CIMObjectPath createInstance(CIMObjectPath op, CIMInstance ci) throws CIMException { CIMObjectpath newop = ip.createInstance(op, ci); CIMInstance indication = new CIMInstance(); indication.setClassName("CIM_InstCreation"); CIMProperty cp = new CIMProperty(); cp.setName("SourceInstance"); cp.setValue(new CIMValue(ci)); Vector v = new Vector(); v.addElement(cp); indication.setProperties(v); ... }
イベントインジケーションを CIM Object Manager に送信します。以下に例を示します。
cimom.deliverEvent(op.getNameSpace(), indication); return newop;