CIM イベントのインジケーションを生成するには、次のタスクを実行する必要があります。
EventProvider インタフェースのメソッドを使用して、CIM イベントインジケーションの送信をいつ開始および停止するかを検出する
CIM_Indication クラスの 1 つまたは複数のサブクラスのインスタンスを作成し、発生した CIM イベントの情報を格納する
ProviderCIMOMHandle インタフェースの deliverEvent メソッドを使用して、インジケーションを CIMOM に配信する
EventProvider インタフェースを実装します。
次に例を示します。
public class sampleEventProvider implements InstanceProvider EventProvider{ // プロバイダが CIM オブジェクトマネージャに接続するための参照 private ProviderCIMOMHandle cimom; }
プロバイダが処理する各インスタンスインジケーションに対して、表 6–2 に示すそれぞれのメソッドを実行します。
作成、変更、および削除のインスタンスイベントに対してインジケーションを作成します。
以下に 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 オブジェクトマネージャに送信します。
cimom.deliverEvent(op.getNameSpace(), indication);
イベントプロバイダは、EventProvider インタフェースを実装します。クライアントが CIM イベントのインジケーションを予約した場合、CIMOM は、このインタフェースに含まれるメソッドを使ってプロバイダに通知します。このメソッドは、クライアントが CIM イベントの予約を取り消した場合にも使用されます。さらにこれらのメソッドにより、CIMOM が特定のイベントインジケーションのポーリングを行うかどうか、インジケーションをハンドラに返すことを承認するかどうかも指定します。
次の表に、イベントプロバイダで実装する必要のある EventProvider インタフェースのメソッドを示します。
表 6–2 EventProvider メソッド
ソート方法 |
説明 |
---|---|
activateFilter |
クライアントが予約を作成すると、CIMOM は、このメソッドを呼び出して、CIM イベントの検査をプロバイダに依頼する |
authorizeFilter |
クライアントが予約を作成すると、CIMOM は、このメソッドを呼び出して、指定されたフィルタ式が許可されているかを検査する |
deActivateFilter |
クライアントが予約を削除すると、CIMOM は、このメソッドを呼び出して、指定されたイベントフィルタの停止をプロバイダに依頼する |
mustPoll |
クライアントが予約を作成すると、CIMOM は、このメソッドを呼び出して、指定されたフィルタ式をプロバイダが許可するかどうか、そのフィルタ式のポーリングが必要かどうかを検査する |
CIMOM は、すべてのメソッドに次の引数の値を渡します。
filter – インジケーションを生成する必要がある CIM イベントを指定する SelectExp 型
eventType – CIM イベントの種類を指定する String 型。これは、select 式の FROM 句から抽出することもできる
classPath – このイベントを必要とするクラス名を指定する CIMObjectPath 型
さらに、activateFilter メソッドは、これがこのイベント型の最初のフィルタであることを示すブール値 firstActivation を受け取ります。deActivateFilter メソッドは、これが最後のフィルタであることを示すブール値 lastActivation を受け取ります。
クライアントアプリケーションが、 CIM_IndicationSubscription クラスのインスタンスを作成して CIM イベントのインジケーションを予約すると、CIMOM は、この要求を適切なプロバイダに転送します。プロバイダが EventProvider インタフェースを実装する場合、CIMOM は、指定するイベントのインジケーションの送信をいつ開始するかをプロバイダに通知します。プロバイダは、activateFilter メソッドを呼び出すことにより、この通知を行います。また、CIMOM は、プロバイダの deActivateFilter メソッドを呼び出して、指定するイベントのインジケーションの送信をいつ停止するかをプロバイダに通知します。
プロバイダは、インスタンスを作成、変更、削除するたびに、インジケーションを作成、配信して、CIMOM の要求に応答します。通常、プロバイダは、CIMOM が activateFilter メソッドを呼び出すときに設定されるフラグ変数を定義します。このフラグの設定は、CIMOM が deActivateFilter メソッドを呼び出すときにクリアされます。そのあと、プロバイダは、インスタンスを作成、変更、または削除するメソッドの中で、動作中のフラグの状態を検査します。フラグが設定されている場合、プロバイダは、作成された CIM インスタンスオブジェクトを含むインジケーションを作成します。プロバイダは、deliverEvent メソッドを使って、CIMOM にインジケーションを返します。フラグが設定されていない場合、プロバイダは、イベントインジケーションの作成や配信を行いません。
プロバイダは、activateFilter メソッドが呼び出されると、インジケーションの配信を開始します。プロバイダは、CIM_Indication の concrete (具象) サブクラスのインスタンスを作成し、ProviderCIMOMHandled.deliverIndication メソッドを起動します。CIMOM は、インジケーションを受信し、そのインジケーションを適切なインジケーションハンドラに配信します。プロバイダは、複数の種類のイベントを処理できます。たとえば、ライフサイクルインジケーションの場合、プロバイダは CIM_InstCreation、CIM_InstDeletion、および CIM_InstModification を処理できます。
予約者が設定した種類を監視する場合、プロバイダは activateFilter および deActivateFilter 呼び出しにそれぞれ渡された firstActivation および lastActivation フラグを使用できます。firstActivation フラグは、特定のイベントの種類をはじめて予約した場合には、true になります。同様に lastActivation は、特定のイベントの種類の最後の予約を削除すると、true になります。これらのフラグを検査すると、プロバイダは、指定したイベントの種類を監視するために簡単にリソースを割り当てたり、割り当てを解除したりすることができます。
機密データを扱うプロバイダは、インジケーションの要求に対する承認を検査することができます。その場合、プロバイダは Authorizable インタフェースを実装して、そのプロバイダが承認を検査することを示す必要があります。また、プロバイダは authorizeFilter メソッドを実装する必要があります。CIMOM は、このメソッドを呼び出して、イベントハンドラの所有者 (UID) がフィルタ式の評価に基づいて送信されるインジケーションを受信することを承認されているかどうかを検査します。イベントの宛先の所有者 (イベントハンドラ) の UID は、フィルタを動作中にするように要求するクライアントアプリケーションの所有者と同じである必要はありません。