次の表は、Provider パッケージ (com.sun.wbem.provider) に含まれるインスタンスプロバイダインタフェースのメソッドについて説明しています。
これらの各メソッドは引数 op を取ります。op は、指定された CIM クラスまたは CIM インスタンスの CIM オブジェクトパスです。オブジェクトパスには、ネームスペース、クラス名、およびキー (オブジェクトがインスタンスの場合) が含まれます。ネームスペースは、ほかのネームスペース、クラス、インスタンス、および修飾子のデータ型を格納できるディレクトリです。キーは、クラスインスタンスを個別に識別するプロパティです。キープロパティには、キー修飾子が含まれます
たとえば、次のオブジェクトパスは 2 つの部分から構成されます。
¥¥myserver¥root¥cimv2¥Solaris_ComputerSystem:Name=mycomputer: CreationClassName=Solaris_ComputerSystem
¥¥myserver¥root¥cimv2
これは、ホスト myserver 上のデフォルトの CIM ネームスペースです。
Solaris_ComputerSystem:Name=mycomputer: CreationClassName=Solaris_ComputerSystem
これは、ホスト myserver 上のデフォルトネームスペースに存在する特定の Solaris Computer System オブジェクトです。この Solaris コンピュータシステムは、(プロパティ=値) という書式で示される 2 つのキー修飾子値によって個別に識別されます。
Name=mycomputer
CreationClassName=Solaris_ComputerSystem
| メソッド | 説明 | 
|---|---|
| enumInstances | オブジェクトパスに指定されたクラスのすべてのインスタンスを列挙する。ディープ (deep) または シャロー (shallow) 列挙が可能だが、現在 CIM Object Manager はシャロー列挙だけを要求する | 
| getInstance | オブジェクトパス (op) に指定されたインスタンスを返す | 
| setInstance | オブジェクトパス (op) に指定されたインスタンスを設定する。そのインスタンスが存在しない場合は、追加する必要がある | 
| deleteInstance | オブジェクトパス (op) に指定されたインスタンスを削除する | 
例 7-1 のコードセグメントは、CIM Object Manager からのインスタンスデータ要求を 1 つ以上の特化されたプロバイダに送る Solaris インスタンスプロバイダクラスを作成します。これらの特化されたプロバイダは、特定の Solaris オブジェクトの動的データの要求に対するサービスを提供します。たとえば、Solaris_Package プロバイダは、Solaris_Package クラスのインスタンスの要求に対応します。
インスタンスプロバイダは、InstanceProvider インタフェースのすべてのメソッドを実装する必要があります。例 7-1 のコードセグメントは、次の 2 つのメソッドだけを示しています。
enumInstances - Solaris パッケージとパッチを列挙する適切なプロバイダを呼び出す。このメソッドは、クラスおよびそのサブクラスのすべてのインスタンスを返すディープ列挙を行う
getInstances - Solaris パッケージとパッチのインスタンスを取得する適切なプロバイダを呼び出す
| public class Solaris implements InstanceProvider
{
   /**
    * 最上位レベルのプロバイダクラスが、CIM Object Manager
    * からの要求を適切なプロバイダに送る。
    */
 
    public void initialize(CIMONHandle, ch) 
    throws CIMException {
    }
 
    public void cleanup() 
    throws CIMException {
    }
 
    /* このクラスは、指定されたクラス内の指定されたオブジェクトの
    列挙済みインスタンスが入ったベクトルを返す。オブジェクトが Solaris
    パッケージの場合、このクラスは Solaris_Package プロバイダを呼び
    出し、システム上の Solaris パッケージのリストを返す。
    オブジェクトが Solaris パッチの場合、Solaris_Patch プロバイダを
    呼び出し、システム上の Solaris パッチのリストを返す。*/
 
    public Vector enumInstances(CIMObjectPath op, CIMClient.DEEP, CIMClass cc)
    throws CIMException {
        if (op.getObjectName().equalsIgnoreCase("solaris_package")) {
            Solaris_Package sp = new Solaris_Package();
            return sp.enumerateInstances(op);
        }
        if (op.getObjectName().equalsIgnoreCase("solaris_patch")) {
            Solaris_Patch sp = new Solaris_Patch();
            return sp.enumerateInstances(op);
        }
       return new Vector();
    }
 
 
    /* このクラスは、指定されたクラス内の指定されたオブジェクトの
    インスタンスを返す。オブジェクトが Solaris パッケージの場合、
    このクラスは Solaris_Package プロバイダを呼び出し、指定された
    Solaris パッケージのデータを返す。オブジェクトが Solaris
    パッチの場合、Solaris_Patch プロバイダを呼び出し、指定された
    Solaris パッチのデータを返す。*/
 
    public CIMInstance getInstance(CIMObjectPath op, CIMClass cc) 
    throws CIMException {
        if (op.getObjectName().equalsIgnoreCase("solaris_package")) {
            Solaris_Package sp = new Solaris_Package();     
            return sp.getInstance(op,cc);
        }
        if (op.getObjectName().equalsIgnoreCase("solaris_patch")) {
            Solaris_Patch sp = new Solaris_Patch();         
            return sp.getInstance(op,cc);
        } 
}
  | 
特化された Solaris インスタンスプロバイダは、API を使用してオブジェクトインスタンスの取得と設定を行います。これらのプロバイダは、C 関数を呼び出して Solaris 固有の値 (ホスト名、シリアル番号、リリース、マシン、アーキテクチャ、メーカーなど) を取得するネイティブメソッドの宣言も行います。
例 7-2 のコードセグメントは、例 7-1 で呼び出される solaris_package クラスを示します。このコードセグメントは、getInstance メソッドを実装します。このメソッドは、指定されたクラスの新しいインスタンスを作成し、ネイティブ C 関数 (GetPkgArchitecture() など) が返すプロパティをそれらのインスタンスに割り当てます。
| public class Solaris_Package 
{
    public CIMInstance getInstance(CIMObjectPath op, CIMClass cc) {
        String pkgName = "";
 
        for (Enumeration e = op.getKeys().elements(); e.hasMoreElements();) {
            CIMProperty cp = (CIMProperty)e.nextElement();
            if (cp.getName().equalsIgnoreCase("name")) {
                pkgName = (String) ((CIMValue)(cp.getValue())).getValue();
            }
        }
 
 
        CIMInstance ci = cc.newInstance();
        ci.setProperty("Name", new CIMValue(pkgName));
        ci.setProperty("TargetOperatingSystem", 
                          new CIMValue(new UnsignedInt16(29)));
 
        ci.setProperty("Status", 
                     new CIMValue(GetPkgStatus(pkgName)));
  			 ci.setProperty("Architecture", 
                          new CIMValue(GetPkgArchitecture(pkgName)));
        ci.setProperty("Description", new CIMValue(GetPkgDescription(pkgName)));
        ci.setProperty("Caption", new CIMValue(GetPkgDescription(pkgName)));
        ci.setProperty("Manufacturer", new CIMValue(GetPkgVendor(pkgName)));
        ci.setProperty("Category", new CIMValue(GetPkgCategory(pkgName)));
        ci.setProperty("Basedir", new CIMValue(GetPkgBasedir(pkgName)));
       return ci;
    }
 
    native String GetPkgDescription(String pkgName);
    native String GetPkgArchitecture(String pkgName);
    native String GetPkgVersion(String pkgName);
    native String GetPkgVendor(String pkgName);
    native String GetPkgBasedir(String pkgName);
    native String GetPkgCategory(String pkgName);
    native String GetPkgStatus(String pkgName);
 
 
   static {
       System.loadLibrary("NativeUnix");
   
    }
 
}
  |