Solaris WBEM SDK 開発ガイド

インジケーションプロバイダの作成

CIM イベントのインジケーションを生成するには、次の処理を実行します。

イベントインジケーションを生成する方法
  1. EventProvider インタフェースを実装します。

    たとえば、次のようになります。

    public class sampleEventProvider implements 
            InstanceProvider EventProvider{
    
        // プロバイダが CIM Object Manager に接続するための参照
        private ProviderCIMOMHandle cimom;
       }

  2. プロバイダが処理するインスタンスインジケーションに対して、表 4–2 に示すそれぞれのメソッドを実行します。

  3. 作成、変更、および削除インスタンスイベントのそれぞれの種類に対してインジケーションを作成します。

    以下に 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);
            ...
        }

  4. イベントインジケーションを CIM Object Manager に配信します。

    cimom.deliverEvent(op.getNameSpace(), indication);

イベントプロバイダメソッド

イベントプロバイダは、EventProvider インタフェースを実装します。CIM Object Manager は、このインタフェースのメソッドを使って、クライアントが CIM イベントのインジケーションを予約したり、CIM イベントの予約を取り消したことをプロバイダに知らせます。さらにこれらのメソッドによって、プロバイダは、CIM Object Manager が特定のイベントインジケーションのポーリングを行うべきかどうか、インジケーションをハンドラに返すことを承認するかどうかを指定します。

次の表に、イベントプロバイダで実装する必要のある EventProvider インタフェースのメソッドを示します。

表 4-2 EventProvider メソッド

メソッド 

説明 

activateFilter

クライアントが予約を作成すると、CIM Object Manager は、このメソッドを呼び出して CIM イベントの検査をプロバイダに依頼する 

authorizeFilter

クライアントが予約を作成すると、CIM Object Manager は、このメソッドを呼び出して指定されたフィルタ式が許可されているかを検査する 

deActivateFilter

クライアントが予約を削除すると、CIM Object Manager は、このメソッドを呼び出して指定されたイベントフィルタの停止をプロバイダに依頼する 

mustPoll

クライアントが予約を作成すると、CIM Object Manager は、このメソッドを呼び出して、指定されたフィルタ式をプロバイダが許可するかどうか、そのフィルタ式のポーリングが必要かどうかを検査する 

CIM Object Manager は、すべてのメソッドに次の引数の値を渡します。

さらに、activateFilter メソッドは、これがこのイベントの種類の最初のフィルタであることを示すブール値 firstActivation を受け取ります。deActivateFilter メソッドは、これが最後のフィルタであることを示すブール値 lastActivation を受け取ります。

インジケーションの作成と配信

クライアントアプリケーションが CIM_IndicationSubscription クラスのインスタンスを作成して CIM イベントのインジケーションを予約すると、CIM Object Manager はこの要求を適切なプロバイダに転送します。プロバイダが EventProvider インタフェースを実装していれば、CIM Object Manager は、プロバイダの activateFilter メソッドを呼び出して、指定するイベントのインジケーションの送信をいつ開始するかをプロバイダに通知します。また、CIM Object Manager は、プロバイダの deActivateFilter メソッドを呼び出して、指定するイベントのインジケーションの送信をいつ停止するかをプロバイダに通知します。

プロバイダは、インスタンスを作成、変更、削除するたびに、インジケーションを作成、配信して、CIM Object Manager の要求に応答します。通常、プロバイダは、CIM Object Manager が activateFilter メソッドを呼び出した時に設定し、deActivateFilter メソッドを呼び出した時にクリアされるフラグ変数を定義します。そのあと、インスタンスを作成、変更、または削除するメソッドの中で、動作中のフラグの状態を検査します。フラグが設定されている場合、プロバイダは、作成した CIM インスタンスオブジェクトを含むインジケーションを作成し、deliverEvent メソッドを使用してこのインジケーションを CIM Object Manager に返します。フラグが設定されていない場合、プロバイダは、イベントインジケーションの作成や配信を行いません。

プロバイダは、activateFilter メソッドが呼び出されると、インジケーションの配信を開始します。プロバイダは、CIM_Indication の concrete (具象) サブクラスのインスタンスを作成し、ProviderCIMOMHandled.deliverIndication メソッドを起動します。CIM Object Manager は、インジケーションを受信し、そのインジケーションを適切なインジケーションハンドラに配信します。プロバイダは、複数の種類のイベントを処理できます。たとえば、サイクルインジケーションの場合、プロバイダは CIM_InstCreationCIM_InstDeletion、および CIM_InstModification を処理できます。

予約者が設定した種類を監視する場合、プロバイダは activateFilter および deActivateFilter 呼び出しにそれぞれ渡された firstActivation および lastActivation フラグを使用できます。firstActivation フラグは、特定のイベントの種類をはじめて予約した場合には、true になります。同様に lastActivation は、特定のイベントの種類の最後の予約を削除すると、true になります。これらのフラグを検査すると、プロバイダは、指定したイベントの種類を監視するために簡単にリソースを割り当てたり、割り当てを解除したりすることができます。

承認について

機密データを扱うプロバイダは、インジケーションの要求に対する承認を検査することができます。その場合、プロバイダは Authorizable インタフェースを実装して、そのプロバイダが承認を検査することを示す必要があります。また、プロバイダは authorizeFilter メソッドを実装する必要があります。CIM Object Manager は、authorizeFilter メソッドを呼び出して、イベントハンドラの所有者 (UID) がフィルタ式の評価に基づいて返されるインジケーションの受信を承認されているかどうかを検査します。イベントの宛先の所有者 (イベントハンドラ) の UID は、フィルタを動作中にするように要求するクライアントアプリケーションの所有者と同じである必要はありません。