Sun WBEM SDK 開発ガイド

インスタンスプロバイダインタフェース (InstanceProvider)

次の表で、Provider パッケージ (com.sun.wbem.provider20) に含まれるインスタンスプロバイダインタフェースのメソッドについて説明します。

これらの各メソッドは引数 op を取ります。op は、指定された CIM クラスまたは CIM インスタンスの CIMObjectPath です。オブジェクトパスには、ネームスペース、クラス名、およびキー (オブジェクトがインスタンスの場合) が含まれます。ネームスペースは、ほかのネームスペース、クラス、インスタンス、および修飾子のデータ型を格納できるディレクトリです。キーは、クラスインスタンスを個別に識別するプロパティです。キープロパティには、キー修飾子が含まれます

たとえば、次のオブジェクトパスは 2 つの部分から構成されます。

\\myserver\root\cimv2\Solaris_ComputerSystem:Name=mycomputer:
   CreationClassName=Solaris_ComputerSystem

表 5–2 InstanceProvider インタフェースメソッド

メソッド 

説明 

CIMObjectPath createInstance(CIMObjectPath op, CIMInstance ci)

op によって指定されたインスタンス ci が存在しない場合は、それを作成する。この CIM インスタンスがすでにある場合は、ID が CIM_ERR_ALREADY_EXISTSCIMInstanceException をプロバイダがスローする必要がある。作成されたインスタンスの CIMObjectPath を返す。

void deleteInstance(CIMObjectPath op)

オブジェクトパス (op) に指定されたインスタンスを削除する。

Vector enumInstances(CIMObjectPath path, boolean deep, CIMClass cc)

path に指定されたクラスの各インスタンスの「名前」を返す。deeptrue の場合は、指定されたクラスとそのクラスから派生したすべてのクラスのすべてのインスタンスの名前を返す。deeptrue でない場合は、指定されたクラスに属するインスタンスの名前だけを返す。

プロバイダがインスタンスをゼロから作成したくない場合は、新しいインスタンスのテンプレートを作成できる。それには、そのインスタンスが属するクラス (cc) の newInstance() メソッドを呼び出す。

Vector enumInstances(CIMObjectPath path, boolean deep, CIMClass cc, boolean localOnly)

path に指定されたクラスのインスタンス (インスタンスの名前だけでなく、インスタンス全体) を返す。

プロバイダがインスタンスをゼロから作成したくない場合は、新しいインスタンスのテンプレートを作成できる。それには、そのインスタンスが属するクラス (cc) の newInstance() メソッドを呼び出す。

localOnly が true の場合は、列挙されたインスタンスのローカルプロパティ (継承されたプロパティではない) だけを返す。localOnly が true でない場合は、すべての継承されたプロパティとローカルプロパティを返す。

Vector execQuery (CIMObjectPath op, String query, int ql, CIMClass cc

照会を実行して CIM オブジェクトを検索する。このメソッドは、指定された照会文字列に一致する、指定された CIM クラス (cc) の CIM インスタンスのベクトルを返す。

CIMInstance getInstance(CIMObjectPath op, CIMClass cc, boolean localOnly)

オブジェクトパス (op) に指定されたインスタンスを返す。

プロバイダがインスタンスをゼロから作成したくない場合は、新しいインスタンスのテンプレートを作成できる。それには、そのインスタンスが属するクラス (cc) の newInstance() メソッドを呼び出す。

localOnly が true の場合は、列挙されたインスタンスのローカルプロパティ (継承されたプロパティではない) だけを返す。localOnly が true でない場合は、すべての継承されたプロパティとローカルプロパティを返す。

void setInstance(CIMInstance ci)

指定された CIM インスタンスが存在する場合は、それを更新する。このインスタンスが存在しない場合は、ID が CIM_ERR_NOT_FOUNDCIMInstanceException をスローする。

例 — インスタンスプロバイダの実装

次のコード例は、インスタンスプロバイダ SimpleInstanceProvider の Java ソースコードです。このインスタンスプロバイダは、Ex_SimpleInstanceProvider クラスの enumInstances インタフェースと getInstance インタフェースを実装しています。わかりやすくするために、この例では、CIMException をスローすることによって deleteInstancecreateInstancesetInstanceexecQuery の各インタフェースを実装します。実際には、インスタンスプロバイダがすべての InstanceProvider インスタンスを実装する必要があります。


例 5–1 SimpleInstanceProvider インスタンスプロバイダ

/*
 * "@(#)SimpleInstanceProvider.java"
 */
import com.sun.wbem.cim.*;
import com.sun.wbem.client.*;
import com.sun.wbem.provider.CIMProvider;
import com.sun.wbem.provider20.InstanceProvider;
import com.sun.wbem.provider.MethodProvider;
import java.util.*;
import java.io.*;

public class SimpleInstanceProvider implements InstanceProvider{
     static int loop = 0;
     public void initialize(CIMOMHandle cimom) throws CIMException {
     }
     public void cleanup() throws CIMException {
     }
     public Vector enumInstances(CIMObjectPath op, boolean deep, CIMClass cc,
            boolean localOnly) throws CIMException {
                return null;
     }
     /*
      * enumInstances:
      * 名前だけでなく、インスタンス全体が返される。
      * 詳細列挙または簡易列挙が可能だが、現在のところ
      * CIMOM は簡易列挙だけを要求する。
      */
     public Vector enumInstances(CIMObjectPath op, boolean deep, CIMClass cc)
             throws CIMException {
         if (op.getObjectName().equalsIgnoreCase("Ex_SimpleInstanceProvider")) 
             {
             Vector instances = new Vector();
             CIMObjectPath cop = new CIMObjectPath(op.getObjectName(),
                     op.getNameSpace());
                 if (loop == 0){
                     cop.addKey("First", new CIMValue("red"));
                     cop.addKey("Last", new CIMValue("apple"));
                     // このクラスを削除する場合は、この次の行を
	                    // コメントにしてコンパイルする。
                     instances.addElement(cop);
                     loop += 1;
                 } else {
                     cop.addKey("First", new CIMValue("red"));
                     cop.addKey("Last", new CIMValue("apple"));
                     // このクラスを削除する場合は、この次の行を
                     // コメントにしてコンパイルする。
                     instances.addElement(cop);
                     cop = new CIMObjectPath(op.getObjectName(),
                             op.getNameSpace());
                     cop.addKey("First", new CIMValue("green"));
                     cop.addKey("Last", new CIMValue("apple"));
                     // このクラスを削除する場合は、この次の行を
                     // コメントにしてコンパイルする。
                     instances.addElement(cop);
                 }
             return instances;
             }
         return new Vector();
     }

     public CIMInstance getInstance(CIMObjectPath op, 
             CIMClass cc, boolean localOnly) throws CIMException {
             if (op.getObjectName().equalsIgnoreCase("Ex_SimpleInstanceProvider"))
             {
                 CIMInstance ci = cc.newInstance();
                 ci.setProperty("First", new CIMValue("yellow"));
                 ci.setProperty("Last", new CIMValue("apple"));
                 return ci;
             }
            return new CIMInstance();
      }

     public Vector execQuery(CIMObjectPath op, String query, int ql, CIMClass cc)
             throws CIMException {
                 throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED));
    }

     public void setInstance(CIMObjectPath op, CIMInstance ci)
             throws CIMException {
                 throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED));
    }

     public CIMObjectPath createInstance(CIMObjectPath op, CIMInstance ci)
              throws CIMException {
                 throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED));
    }

     public void deleteInstance(CIMObjectPath cp) throws CIMException {
         throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED));
     }
 }