Sun WBEM SDK 開発ガイド

予約の作成

予約を作成するには、CIMListener インタフェースを追加し、次のクラスのインスタンスを作成します。

アプリケーションは、1 つまたは複数のイベントフィルタと 1 つまたは複数のイベントハンドラを作成できます。イベントインジケーションは、アプリケーションがイベントの予約を作成するまで送信されません。

CIM リスナーの追加

クライアントアプリケーションは、CIMListener インタフェースを追加することによって、CIM イベントインジケーションの予約を登録する必要があります。CIM Object Manager は、クライアント予約が作成されたときにイベントフィルタに指定された CIM イベントのインジケーションを生成します。

CIMListener インタフェースには、indicationOccured メソッドを実装する必要があります。このメソッドは、引数として CIMEvent (CIMListener から返される CIM イベント) を受け取ります。


例 6–1 CIM リスナーの追加

// CIM Object Manager に接続する
cc = new CIMClient();

// CIM リスナーを登録する
cc.addCIMListener(
new CIMListener() {
    public void indicationOccured(CIMEvent e) {
    }
});


イベントフィルタの作成

イベントフィルタでは、送信するイベントのタイプと、どのような条件の下で送信するかを指定しますす。アプリケーションでは、CIM_IndicationFilter クラスのインスタンスを作成し、そのプロパティの値を定義することによって、イベントフィルタを作成します。イベントフィルタは特定のネームスペースに属します。個々のイベントフィルタは、そのフィルタが属するネームスペースに属するイベントに対してのみ有効です。

CIM_IndicationFilter クラスには、フィルタを特定して照会文字列を指定するためにアプリケーションが設定できる文字列プロパティ、およびこの文字列を解析するための照会言語があります。現在は、WQL (WBEM Query Language) だけがサポートされます。

表 6–1 CIM_IndicationFilter クラスのプロパティ

プロパティ 

説明 

必須/任意 

SystemCreationClassName

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

任意。このキープロパティのデフォルトは CIM_System.CreationClassName

SystemName

このフィルタがあるシステムの名前、またはこのフィルタが適用されるシステムの名前。 

任意。このキープロパティのデフォルトは、CIM Object Manager が動作しているシステムの名前。 

CreationClassName

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

任意。CIM Object Manager は、このキープロパティのデフォルトとして CIM_IndicationFilter を割り当てる。

Name

このフィルタの固有名。 

必須。クライアントアプリケーションは固有名を指定する必要がある。 

SourceNamespace

CIM インジケーション生成元であるローカルネームスペースへのパス。 

任意。デフォルトは \root\cimv2

Query

インジケーションをどのような条件のときに生成するかを定義する照会式。現在は、Level 1 の WQL 式だけがサポートされる。WQL 照会式の作成方法については、照会を参照。

必須。 

QueryLanguage

照会を表現する言語。 

必須。デフォルト WQL (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 イベントを選択するフィルタ文字列、照会文字列を解析する照会言語を設定します。

    現在、照会文字列の解析に使用できるのは WQL だけです。以下に例を示します。

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

  5. cimfilter インスタンスから filter というインスタンスを作成し、それを CIM Object Manager Repository に格納します。以下に例を示します。

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

イベントハンドラの作成

イベントハンドラは、CIM_IndicationHandler クラスのインスタンスです。CIM イベント MOF には、HTTP プロトコルを使ってクライアントアプリケーションに送信されるインジケーションの宛先を指定する CIM_IndicationHandlerXMLHTTP クラスが定義されています。イベントの HTTP 送信はまだ定義されていないため、HTTP クライアントへのイベントの送信はサポートされていません。

Solaris イベント MOF は、Solaris_RMIDelivery クラスを作成して CIM_IndicationHandler クラスを拡張し、RMI プロトコルを使用して CIM イベントインジケーションのクライアントアプリケーションへの送信を処理します。RMI クライアントは、Solaris_RMIDelivery クラスのインスタンスを作成して、RMI 送信の場所を設定する必要があります。

アプリケーションでは、CIM_IndicationHandler クラスのプロパティにハンドラの固有名とその所有者の UID を指定します。

表 6–2 CIM_IndicationHandler クラスのプロパティ

プロパティ 

説明 

必須/任意 

SystemCreationClassName 

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

任意。このキープロパティのデフォルトは CIM_System クラスを作成するクラス

SystemName 

このハンドラがあるシステムの名前、またはこのハンドラが適用されるシステムの名前。 

任意。このキープロパティのデフォルト値は、CIM Object Manager が動作しているシステムの名前。 

CreationClassName 

このハンドラの作成に使用するクラスまたはサブクラス。 

任意。CIM Object Manager は、このキープロパティのデフォルトとして CIM_IndicationFilter を割り当てる。

Name 

このハンドラの固有名。 

必須。クライアントアプリケーションは固有名を指定する必要がある。 

Owner 

このハンドラを作成した、または保持するエンティティの名前。プロバイダは、この値を検査して、インジケーションの受信をハンドラに承認するかどうかを確認できる。 

任意。デフォルトは、このインスタンスを作成するユーザーの Solaris ユーザー名。 

次のコード例は、CIM イベントハンドラの作成方法を示したものです。


例 6–2 CIM イベントハンドラの作成

// Solaris_RMIDelivery クラスのインスタンスを作成する
CIMClass rmidelivery = cc.getClass(new CIMObjectPath
        (“Solaris_RMIDelivery”), false, true, true, null);

CIMInstance ci = rmidelivery.newInstance();

// rmidelivery インスタンスから新しい
// インスタンス (delivery) を作成する
CIMObjectPath delivery = cc.createInstance(new CIMObjectPath(), ci);


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

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

次の例では、予約 (filterdelivery) を作成し、次に イベントフィルタを作成する方法で作成した filter オブジェクトに filter プロパティを定義し、例 6–2 で作成した delivery オブジェクトに handler プロパティを設定します。


例 6–3 イベントフィルタとイベントハンドラのバインド

CIMClass filterdelivery = cc.getClass(new 
        CIMObjectPath(“CIM_IndicationSubscription”), 
        true, true, true, null);
ci = filterdelivery.newInstance():

// filter インスタンスを参照する filter というプロパティを作成する
ci.setProperty("filter", new CIMValue(filter));

// delivery インスタンスを参照する handler というプロパティを作成する
ci.setProperty("handler", new CIMValue(delivery));