Sun WBEM SDK 開発ガイド

ネームスペース、クラス、インスタンスの列挙

列挙とはオブジェクトの集合です。列挙は一度に 1 つずつ取り出すことができます。Sun WBEM SDK には、ネームスペース、クラス、インスタンスを列挙する API があります。

次の各例は、列挙メソッドを使ってネームスペース、クラス、インスタンスを列挙する方法を示したものです。

詳細 (deep) 列挙と簡易 (shallow) 列挙

列挙メソッドは、値として deep または shallow を持つブール値引数を受け取ります。deep および shallow の動作は、表 4–1 に示すように、使用するメソッドによって異なります。

表 4–1 詳細列挙と簡易列挙

メソッド 

deep

shallow

enumNameSpace

列挙するネームスペース内のネームスペース階層全体を返す。 

列挙するネームスペース内の第一レベルの子を返す。 

enumClass

列挙するクラスのすべてのサブクラスを返すが、クラス自体は返さない。 

このクラスの直接のサブクラスを返す。 

enumInstances

クラスのインスタンスとそのクラスのサブクラスのすべてのインスタンスを返す。 

そのクラスのインスタンスを返す。 

クラスやインスタンスのデータを取得

次の列挙メソッドは、クラスやインスタンスのデータを返します。

クラス名やインスタンス名の取得

CIM WorkShop は、列挙メソッドを使ってクラスやインスタンスの名前を返すアプリケーションの一例です。オブジェクト名のリストを取得すれば、オブジェクトのインスタンスや、プロパティ、その他の情報を取得できます。

次の各列挙メソッドは、列挙するクラスやインスタンスの名前を返します。

例 — ネームスペースの列挙

例 4–12 のプログラムは、CIM クライアントクラスの enumNameSpace メソッドを使用して、ネームスペースおよびその中に含まれるすべてのネームスペースの名前を出力します。


例 4–12 ネームスペースの列挙 (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(cop) で指定されるネームスペース、 
  * およびそのネームスペース内のすべてのネームスペースの 
  * リストを取得するために CIMClient.DEEP を条件として、ネームスペース引数を取り、
  * CIMClient の 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 アプリケーションでは、例 4–13 のコードセグメントを使ってクラスやサブクラスのリストをユーザーに表示することがあります。


例 4–13 クラス名の列挙 (enumClass)

...
{
    /* CIMObjectPath オブジェクトを作成し、列挙する CIM クラスの
    名前 (myclass) で初期化する */
    CIMObjectPath cop = new CIMObjectPath(myclass); 
    
    /* この列挙には、列挙するクラス内のすべてのクラスとサブクラスの
    名前が含まれる */
    Enumeration e = cc.enumClass(cop, cc.DEEP);
}
... 


アプリケーションでは、例 4–14 のコードセグメントを使ってクラスやそのサブクラスの内容を表示することがあります。


例 4–14 クラスデータの列挙 (enumClass)

...
{
    /* CIMObjectPath オブジェクトを作成し、列挙する CIM クラスの 
    名前 (myclass) で初期化する  */
     
    CIMObjectPath cop = new CIMObjectPath(myclass); 
     
    /* この列挙には、列挙するクラス内のすべてのクラスとサブクラスが
    含まれる (cc.DEEP)。この列挙では、各クラスやサブクラスから
    継承されたメソッドやプロパティ以外のものだけが返される
    (localOnly が真) */
 
    Enumeration e = cc.enumClass(cop, cc.DEEP, true);  
}
...

例 4–15 のサンプルプログラムでは、クラスおよびインスタンスを詳細列挙および簡易列挙します。さらにこの例では、localOnly フラグを使って、(クラスやインスタンスの名前ではなく) クラスやインスタンスのデータを返します 。


例 4–15 クラスおよびインスタンスの列挙

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 com.sun.wbem.cim.CIMException;
import java.util.Enumeration;
 
/** 
 * この例では、クラスやインスタンスを列挙する。
 * この例では、コマンド行から入力されたクラスを詳細列挙
 * および簡易列挙する。さらに、localOnly フラグを使って
 * クラスやインスタンスの詳細を返す。
 */
 public class ClientEnum {
     public static void main(String args[]) throws CIMException {
		     CIMClient cc = null;
			   CIMObjectPath cop = null;
			   if(args.length != 2) {
				     System.out.println("Usage: ClientEnum host className"); 
				     System.exit(1);
	    		 }
			   try {
				    // ホスト名 (コマンド行から入力された args[0]) を含む
				    // CIMNameSpace オブジェクトを作成する。 
	    		    CIMNameSpace cns = new CIMNameSpace(args[0]);
 
				    // 指定されたホスト (args[0]) 上の 
				    // CIM Object Manager へのクライアント接続を作成する
	    		    cc = new CIMClient(cns);
 
	    		    // コマンド行から入力されたクラス名を取得する
	    		    cop = new CIMObjectPath(args[1]);
 
	    		    // クラスを詳細列挙し、クラス名を返す
				    // returns the class names.
	    		    Enumeration e = cc.enumClass(cop, cc.DEEP);
 
	    		    // 列挙するクラスのすべてのサブクラスの名前を出力する
	    		    for (; e.hasMoreElements(); System.out.println(e.nextElement()));
	    		        System.out.println("+++++");
 
	    		    // クラスを簡易列挙し、クラス名を返す
				    // returns the class names.
	    		    e = cc.enumClass(cop, cc.SHALLOW);
 
	    		    // 第一レベルのサブクラスの名前を出力する
	    		    for (; e.hasMoreElements(); System.out.println(e.nextElement()));
	    		        System.out.println("+++++");
 
	    		    // クラスを簡易列挙し、
				    // クラス名に加えクラスデータを
				    // 返す (localOnly が真)
	    		    e = cc.enumClass(cop, cc.SHALLOW, true);
 
	    		    // 第一レベルのサブクラスの詳細を出力する
	    		    for (; e.hasMoreElements(); System.out.println(e.nextElement()));
	    		        System.out.println("+++++");
 
				    // クラスのインスタンスを詳細列挙し、
				    // インスタンスの名前を返す
	    		    e = cc.enumInstances(cop, cc.DEEP);
 
	    		    // クラスとそのサブクラスのすべてのインスタンスの名前を出力する
	    		    for (; e.hasMoreElements(); System.out.println(e.nextElement()));
	    		        System.out.println("+++++");
 
				    // クラスのインスタンスを詳細列挙し、
				    // インスタンス名に加え、実際のインスタンスデータを
				    // 返す (localOnly が真)
	    		    e = cc.enumInstances(cop, cc.DEEP);
 
	    		    // クラスとそのサブクラスのすべてのインスタンスの詳細を出力する
	    		    for (; e.hasMoreElements(); System.out.println(e.nextElement()));
	    		        System.out.println("+++++");
 
				    // クラスのインスタンスを簡易列挙し、
				    // インスタンスの名前を返す
	    		    e = cc.enumInstances(cop, cc.SHALLOW);
 
				    // クラスのインスタンスの名前を出力する
	    		    for (; e.hasMoreElements(); System.out.println(e.nextElement()));
	    			      System.out.println("+++++");
			      } catch (Exception e) {
	    		        System.out.println("Exception: "+e);
			     }
			    // セッションを閉じる
			    if(cc != null) {
	    		    cc.close();
			    }
    }
}