列挙とは一度にオブジェクトを 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 レベルの子のみを返す |
なし |
次のプログラム例は、クラスおよびそのサブクラスの内容を返します。
...
{
/* CIMObjectPath オブジェクトを作成し、列挙される
CIM クラスの名前 (myclass) で初期化する */
CIMObjectPath cop = new CIMObjectPath(myclass);
/* この列挙には、列挙されたクラス内のクラスとサブクラス
が含まれる (deep=true)。この列挙は、各クラスおよびサブクラスの継承
されないメソッドおよびプロパティだけを返す (localOnly
が true) */
Enumeration e = cc.enumerateClasses(cop, true, true);
}
...
次のプログラム例は、クラスおよびインスタンスの列挙で 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();
}
}
}
次のプログラム例は、クラス名およびサブクラス名のリストを返します。
...
{
/* CIMObjectPath オブジェクトを作成し、
列挙する CIM クラスの名前 (myclass) を使用して初期化する */
CIMObjectPath cop = new CIMObjectPath(myclass);
/* この列挙には、列挙されたクラス内の
クラスおよびサブクラスの名前が含まれる */
Enumeration e = cc.enumerateClassNames(cop, true);
}
...
このプログラム例は、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();
}
}
}