オブジェクトの列挙とは、オブジェクト名のリストを取得することを意味します。オブジェクト名リストを取得すると、そのオブジェクトに関する情報 (オブジェクトのインスタンス、そのプロパティなど) を取得できます。Sun WBEM SDK には、ネームスペース、クラス、およびインスタンスを列挙する API が含まれています。
列挙 API は、2 つのブール型引数、deep と shallow を取ります。これらのパラメータの動作は、使用されるメソッドによって異なります。クラスインスタンスのディープ (deep) 列挙を行うと、クラスおよびそのサブクラスのすべてのインスタンスが返されます。クラスのディープ列挙では、クラスのサブクラスがすべて返されますが、クラス自体は返されません。クラスインスタンスのシャロー (shallow) 列挙では、そのクラスのインスタンスが返されます。クラスのシャロー列挙では、そのクラスのすぐ下のサブクラスが返されます。
次に、列挙 API を使用してネームスペースを列挙する例と、クラスを列挙する例を示します。
例 6-9 のプログラムは、CIM クライアントクラスの enumNameSpace メソッドを使用して、ネームスペースおよびその中に含まれるすべてのネームスペース名を出力します。
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import java.util.Enumeration; / ** * このプログラムは、CIMObjectPath で指定されるネームスペース、 * およびそのネームスペース内のすべてのネームスペースの * リストを取得するために CIMClient.DEEP を条件として、ネームスペース引数を取り、 * CIM クライアントの enumNameSpace インタフェースを呼び出す。 * 続いて、指定されたネームスペース名を * 出力する (CIMClient.SHALLOW)。 /** public class EnumNameSpace { // EnumNameSpace が、引数の文字列を取る。 public static void main (String args[ ]) { CIMClient cc = null; try { // 引数として渡されるネームスペースのネームスペースオブジェクトを作成 CIMNameSpace cns = new CIMNameSpace(args[0], ""); // 引数として渡されるネームスペース内の CIM Object Manager に接続 CIMClient cc = new CIMClient(cns); // 現在のホスト上のネームスペース名を保存するためにオブジェクトパスを作成 CIMObjectPath cop = new CIMObjectPath("",args[1]); // ネームスペースおよびその中に含まれるすべてのネームスペースを列挙 // (CIMClient.DEEP に deep が 設定される) Enumeration e = cc.enumNameSpace(cop, CIMClient.DEEP); // ネームスペースの表示を繰り返し、それぞれの名前を出力 for (; e.hasMoreElements(); System.out.println(e.nextElement())); System.out.println("++++++"); // CIMClient.SHALLOW でネームスペースの表示を繰り返し、 // それぞれの名前を出力 e = cc.enumNamesSpace(cop, CIMClient.SHALLOW); for (; e.hasMoreElements(); System.out.println(e.nextElement())); } // 例外が返される場合はそれらを捕捉して印刷する。 catch (Exception e) { System.out.println("Exception: "+e); } // クライアント接続が開かれている場合、接続を閉じる。 if(cc != null) { cc.close(); } } } |
Java GUI アプリケーションでは、例 6-10 のコードセグメントを使用してクラスとサブクラスのリストがユーザーに表示されます。ユーザーが特定のクラスを選択すると、コードによりそのクラスが列挙されます。
/* CIM オブジェクトのパスが入ったオブジェクトを作成。 */ CIMObjectPath (op = new(CIMObjectPath()); /* オブジェクトパス名を A と指定 */ cop.setName("A"); /* ベクトルは、オブジェクト、クラス、およびクラス内の すべてのサブクラスのオブジェクトパスを返す。 オブジェクトパスには、ネームスペース、クラス名、および キー (オブジェクトがインスタンスの場合) が含まれる。 */ /* このベクトルには、列挙されるクラスの CIM オブジェクト パスが含まれる。 */ Vector v = cc.enumClass(cop, true); |