Solaris WBEM 開発ガイド

オブジェクトの列挙

表 4–1 オブジェクトの列挙

ソート方法 

引数なし 

deep

localOnly

enumerateClasses

path に指定されたクラスの内容を返す

true の場合:指定されたクラスのサブクラスの内容を返す。ただし、クラス自体は返さない

true の場合:指定されたクラスの継承されないプロパティおよびメソッドのみを返す

false の場合:指定されたクラスの直接のサブクラスの内容を返す

false の場合:指定されたクラスのプロパティをすべて返す

enumerateInstances

path に指定されたクラスのインスタンスを返す

true の場合:指定されたクラスおよびそのサブクラスのインスタンスを返す

true の場合:指定されたクラスのインスタンスの継承されないプロパティのみを返す

false の場合:指定されたクラスおよびそのサブクラスのインスタンスを返すサブクラスのプロパティは、フィルタ処理される

false の場合:指定されたクラスのインスタンスのプロパティをすべて返す

enumerateClassNames

path に指定されたクラスの名前を返す

true の場合:指定されたクラスから派生したすべてのクラスの名前を返す

なし 

false の場合:指定されたクラスの第 1 レベルの子の名前のみを返す

なし 

enumerateInstanceNames

path に指定されたクラスのインスタンスの名前を返す

なし 

なし 

  

enumNameSpace

path に指定された名前空間内の名前空間のリストを返す

true の場合:指定された名前空間内の名前空間階層全体を返す

なし 

false の場合:指定された名前空間の第 1 レベルの子のみを返す

なし 


例 4–10 クラスの列挙

次のプログラム例は、クラスおよびそのサブクラスの内容を返します。

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


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

次のプログラム例は、クラスおよびインスタンスの列挙で deep および shallow (deep=false) が指定された場合の動作を示します。 localOnly フラグは、クラスおよびインスタンスの名前ではなく、クラスおよびインスタンスの内容を返します。

import java.rmi.*;
import java.util.Enumeration;

import javax.wbem.client.CIMClient;
import javax.wbem.cim.CIMClass;
import javax.wbem.cim.CIMException;
import javax.wbem.cim.CIMInstance;
import javax.wbem.cim.CIMNameSpace;
import javax.wbem.cim.CIMObjectPath;

import javax.wbem.client.UserPrincipal;
import javax.wbem.client.PasswordCredential;


/** 
 * この例は、クラスとインスタンスを列挙する。コマンド行から
 * 渡されるクラス上で deep 列挙と shallow 列挙を行う
 */
public class ClientEnum {

    public static void main(String args[]) throws CIMException {
        CIMClient cc = null;
        CIMObjectPath cop = null;
        if (args.length < 4) {
            System.out.println("Usage: ClientEnum host user passwd " + 
                               "classname");
            System.exit(1);
   }
   try {
       CIMNameSpace cns = new CIMNameSpace(args[0]);
       UserPrincipal up = new UserPrincipal(args[1]);
       PasswordCredential pc = new PasswordCredential(args[2]);
       cc = new CIMClient(cns, up, pc);


       // コマンド行からクラス名を取得    
       cop = new CIMObjectPath(args[3]);    
       // クラスの deep 列挙を実行
       Enumeration e = cc.enumerateClasses(cop, true, true, true, 
                                           true);
       // クラスのサブクラスをすべて出力
       while (e.hasMoreElements()) {
           System.out.println(e.nextElement());
       }
       System.out.println("+++++");
       // クラスの shallow 列挙を実行
       e = cc.enumerateClasses(cop, false, true, true, true);
       // 第 1 レベルのサブクラスを出力
       while (e.hasMoreElements()) {
           System.out.println(e.nextElement());
       }
       System.out.println("+++++");
       // クラスのインスタンスの deep 列挙を実行
       e = cc.enumerateInstances(cop, false, true, true, true, null);
       // クラスおよびそのサブクラスのインスタンスをすべて出力
       while (e.hasMoreElements()) {
           System.out.println(e.nextElement());
       }
       System.out.println("+++++");
       // クラスのインスタンスの shallow 列挙を実行
       e = cc.enumerateInstances(cop, false, false, true, true, null);
       // クラスのインスタンスをすべて出力
       while (e.hasMoreElements()) {
           System.out.println(e.nextElement());
       }
       System.out.println("+++++");

       e = cc.enumerateInstanceNames(cop);
       while (e.hasMoreElements()) {
           System.out.println(e.nextElement());
       }
       System.out.println("+++++");

       e = cc.enumerateInstanceNames(cop);
       while (e.hasMoreElements()) {
           CIMObjectPath opInstance = (CIMObjectPath)e.nextElement();
           CIMInstance ci = cc.getInstance(opInstance, false, 
                                           true, true, null);
           System.out.println(ci); 
       }
       System.out.println("+++++");

  }
  catch (Exception e) {
      System.out.println("Exception: "+e);
  }

 // セッションの終了
 if (cc != null) {
     cc.close();
  }
 }
}


例 4–12 クラス名の列挙

次のプログラム例は、クラス名およびサブクラス名のリストを返します。

...
{
    /* CIMObjectPath オブジェクトを作成し、 
    列挙する CIM クラスの名前 (myclass) を使用して初期化する */
    CIMObjectPath cop = new CIMObjectPath(myclass); 
    
    /* この列挙には、列挙されたクラス内の
 クラスおよびサブクラスの名前が含まれる */
    Enumeration e = cc.enumerateClassNames(cop, true);
}
... 



例 4–13 名前空間の列挙

このプログラム例は、CIMClient クラスの enumNameSpace メソッドを使用して、名前空間とその中に含まれるすべての名前空間の名前を出力します。

 
import java.rmi.*;
import java.util.Enumeration;

import javax.wbem.cim.CIMClass;
import javax.wbem.cim.CIMException;
import javax.wbem.cim.CIMInstance;
import javax.wbem.cim.CIMNameSpace;
import javax.wbem.cim.CIMObjectPath;

import javax.wbem.client.CIMClient;
import javax.wbem.client.PasswordCredential;
import javax.wbem.client.UserPrincipal;


/** 
 *
 */
public class EnumNameSpace {
    public static void main(String args[]) throws CIMException {
        CIMClient cc = null;
        // 4 つの引数が指定されない場合、使用法を表示して終了する
        if (args.length < 4) {
            System.out.println("Usage: EnumNameSpace host username " +
                               "password namespace");
            System.exit(1);
            }
        try {
            // args[0] にはホスト名が含まれる。指定されたホスト上の
            // 指定された名前空間を指す。
            // CIMNameSpace (cns) を作成する
            CIMNameSpace cns = new CIMNameSpace(args[0], "");

           // args[1] と args[2] にはユーザー名およびパスワードが含まれる。
           // ユーザー名を使用して UserPrincipal (up) を、
           // パスワードを使用して PasswordCredential を作成する
           UserPrincipal up = new UserPrincipal(args[1]);
           PasswordCredential pc = new PasswordCredential(args[2]);

           // CIM オブジェクトマネージャに接続して
           // 作成した CIMNameSpace、UserPrincipal、および 
           // PasswordCredential オブジェクトを渡す
           cc = new CIMClient(cns, up, pc);

           // 名前空間 (args[3]) を使用して CIMObjectPath を作成する
           CIMObjectPath cop = new CIMObjectPath("", args[3]);

           // 名前空間を列挙する
           Enumeration e = cc.enumNameSpace(cop);
           while (e.hasMoreElements()) {
               System.out.println((CIMObjectPath)e.nextElement());
           } // while の終了

           } catch (Exception e) {
              // 例外が発生した場合はそれを出力する
              System.out.println("Exception: "+ e);
           } // catch の終了

          // セッションの終了
          if (cc != null) {
              cc.close();
        }
    }
}