Sun WBEM SDK 開発ガイド

インスタンスの処理

この節では、CIM インスタンスの作成、削除、および更新 (1 つ以上のインスタンスのプロパティ値の取得と設定) の各方法について説明します。

インスタンスの作成

既存のクラスのインスタンスを作成するには、newInstance メソッドを使用します。既存のクラスがキープロパティを持つ場合、アプリケーションはそのプロパティを固有の値に設定する必要があります。インスタンスは、必要に応じてそのクラスに定義されていない別の修飾子を定義することもできます。それらの修飾子をインスタンスまたは特定のインスタンスプロパティ用に定義できますが、クラス宣言内で定義する必要はありません。

アプリケーションは、クラスに定義されている一連の修飾子を getQualifiers メソッドを使用して取得できます。

例 — インスタンスの作成

例 4–6 のコードセグメントは、newInstance メソッドを使用して、Solaris_Package クラスの CIM インスタンス (Solaris パッケージなど) を表す Java クラスを作成します。


例 4–6 インスタンスの作成 (newInstance())

...
{ 
/*ローカルホストの root\cimv2 ネームスペースの 
CIM Object Manager に接続。root\cimv2namespace 内のオブジェクトに
対する書き込みアクセス権を持つアカウントのユーザー名とパスワードを
指定する */
 
CIMClient cc = new CIMClient(cns, "root", "root_password");
 
// Solaris_Package クラスを取得
cimclass = cc.getClass(new CIMObjectPath("Solaris_Package"), true, true, true, null);
 
/* プロパティのデフォルト値を使用して生成された Solaris_Package
 クラスの新しいインスタンスを作成。このクラスのプロバイダが
 デフォルト値を指定しない場合、プロパティの値は NULL であり、 
 明示的に設定する必要がある。*/
 ci = cimclass.newInstance();
}
... 


インスタンスの削除

インスタンスの削除には、deleteInstance メソッドを使用します。

例 — インスタンスの削除

例 4–7 は、クライアントアプリケーションを CIM Object Manager に接続し、次に示すインタフェースを使用してクラスのインスタンスをすべて削除します。


例 4–7 インスタンスの削除 (deleteInstance)

 
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;
 
/**
 * このプログラム例では、必須の 4 つのコマンド行引数を受け取り、
 * 指定されたクラスとそのサブクラスのすべてのインスタンスを削除する。
 * このプログラムでは、指定されたネームスペースへの書き込みアクセス権
 * を持つアカウントのユーザー名とパスワードを指定する必要がある
 * /
public class DeleteInstances {
    public static void main(String args[]) throws CIMException {
    
		// CIMClient クラスのインスタンスを初期化する
		CIMClient cc = null;
	
		// 4 つのコマンド引数が必要。すべてが入力されない場合は、コマンド文字列を出力する
	
		if(args.length != 4) {
	      System.out.println("Usage: DeleteClass host className username password"); 
	      System.exit(1);
		 }
		 try {
	
				 /**
				  * ネームスペースオブジェクト (cns) を作成する。これには、コマンド行から
				  * 入力されたホスト名 (args[0]) が格納される。
				  */
				 CIMNameSpace cns = new CIMNameSpace(args[0]);
 
				 /** 
				  * CIM Object Manager に接続し、ネームスペース
				  * オブジェクト (cns) と、コマンド行から入力されたユーザー名
				  * (args[2]) とパスワード (args[3]) を渡す
				  */
 
				 cc = new CIMClient(cns, args[2], args[3]);
 
				 /**
				  * 削除するクラスの CIM オブジェクトパス (コマンドから入力された
				  * args[1] ) を持つオブジェクトを構築する。
				  */
 
				 CIMObjectPath cop = new CIMObjectPath(args[1]);
	    
				 /**
				  * クラスとそのクラスのすべてのサブクラスのインスタンスオブジェクトパス
				  * を列挙する。インスタンスオブジェクトパスは、CIM Object Manager が
				  * このインスタンスを見つけるときに参照として使用される。
				  */
	     
				 Enumeration e = cc.enumerateInstanceNames(cop);
	    
				 /**
				  * 列挙内のすべてのインスタンスオブジェクトパスを 1 つずつ処理する。
				  * その中で、列挙された各インスタンスオブジェクトパスを格納する
				  * オブジェクトを構築し、そのインスタンスを出力し、削除する。
				  */
	 
				 while(e.hasMoreElements()) {
				     CIMObjectPath op = (CIMObjectPath)e.nextElement();
					   System.out.println(op);
					   cc.deleteInstance(op);
	    		 }
			} catch (Exception e) {
	    	    System.out.println("Exception: "+e);
			}
			if(cc != null) {
	   	    cc.close();
			}
   }
}


インスタンスの取得と設定

アプリケーションが、 CIM Object Manager から CIM インスタンスを取得する場合、getInstance メソッドがよく使用されます。クラスのインスタンスが作成されるときに、インスタンスはその派生元クラスとそのクラス階層にあるすべての親クラスのプロパティを継承します。getInstance メソッドはブール値引数 localOnly を受け取り、localOnly が真である場合、指定されたインスタンスによって継承されたプロパティ以外のプロパティだけを返します。これらのプロパティは、そのインスタンス自体によって定義されたものです。localOnly が偽の場合は、そのクラスのすべてのプロパティが返されます (つまり、インスタンス自体によって定義されたプロパティと、クラス階層にあるすべての親クラスから継承されたすべてのプロパティ)。

新しいインスタンスを作成する場合は、CIMClass クラスの CIMInstance メソッドを使ってインスタンスをローカルシステム上に作成します。そして、CIMClient.setInstance メソッドを使ってネームスペース内の既存のインスタンスを更新するか、CIMClient.createInstance メソッドを使って新しいインスタンスをネームスペースに追加します。

例 — インスタンスの取得

例 4–8 のコードセグメントは、特定のシステム上のすべてのプロセスを表示します。この例では、enumerateInstanceNames メソッドを使用して CIM_Process クラスのインスタンス名を取得します。このコードを Microsoft Windows 32 システムで実行すると、Windows 32 のプロセスが返されます。このコードを Solaris システムで実行すると、Solaris プロセスが返されます。


例 4–8 クラスインスタンスの取得 (getInstance)

...
{
//ネームスペース cns を作成
CIMnameSpace cns = new CIMNameSpace(); 
 
//CIM Object Manager 上で cns ネームスペースに接続
cc = new CIMClient(cns, "root", "root_password"); 
 
/* CIM_Process クラスの CIM オブジェクトパスを
CIM Object Manager に渡す (このクラスのインスタンスを取得する)。 */ 
 
CIMObjectPath cop = new CIMObjectPath("CIM_Process"); 
 
/* CIM Object Manager が、オブジェクトパスの列挙 
(CIM_Process クラスのインスタンス名) を返す。 */
Enumeration e = cc.enumerateInstanceNames(cop); 
 
/* インスタンスオブジェクトパスを含む列挙のサイズ分だけ繰り返す。
各オブジェクト名によって参照されるインスタンスを取得するには、 
CIM Client の getInstance クラスを使用する。 */

while(e.hasMoreElements()) {
    CIMObjectPath op = (CIMObjectPath)e.nextElement();
    // インスタンスを取得する。インスタンスに対してローカルである
		// プロパティだけを返す (localOnly が真) 
		CIMInstance ci = cc.getInstance(op, true);
		}
...


例 — プロパティの取得

例 4–9 は、すべての Solaris プロセスの lockspeed プロパティの値を出力します。このコードセグメントは、次のメソッドを使用します。


例 4–9 プロセッサ情報の出力 (getProperty)

...
{
/* オブジェクト (CIMObjectPath) を作成し、Solaris_Processor 
クラスの名前を格納する */ 
 
CIMObjectPath cop = new CIMObjectPath("Solaris_Processor"); 
 
/* Solaris_Processor クラスとそのすべてのサブクラス (cc.DEEP) の
インスタンスの名前が含まれている列挙を CIM Object Manager が返す */
 
Enumeration e = cc.enumInstances(cop, cc.DEEP); 
 
/* インスタンスオブジェクトパスの列挙のサイズ分だけ繰り返す。
getProperty メソッドを使って、各 Solaris プロセッサの
lockspeed 値を取得する */
 
while(e.hasMoreElements()) {
			CIMValue cv = cc.getProperty(e.nextElement(), "lockspeed");
    	System.out.println(cv);
}
...
}
 


例 — プロパティの設定

例 4–10のコードセグメントでは、すべての Solaris プロセッサの仮定の lockspeed 値を設定します。この例では、次のメソッドを使用します。


例 4–10 プロセッサ情報の設定 (setProperty)

...
{
    /* オブジェクト (CIMObjectPath) を作成し、Solaris_Processor
    クラスの名前を格納する*/ 
 
    CIMObjectPath cop = new CIMObjectPath("Solaris_Processor"); 
 
    /* Solaris_Processor クラスとそのすべてのサブクラスの
    インスタンスの名前が含まれている列挙を CIM Object Manager が返す */
 
    Enumeration e = cc.enumerateInstanceNames(cop); 
 
    /* インスタンスオブジェクトパスの列挙のサイズ分だけ繰り返す。
    その中で setProperty メソッドを使って、各 Solaris プロセッサの
    lockspeed 値に 500 を設定する。 */
 
    for (; e.hasMoreElements(); cc.setProperty(e.nextElement(), "lockspeed", 
        new CIMValue(new Integer(500))));
 
...
}
 


例 — インスタンスの設定

例 4–11 のコードセグメントは、CIM インスタンスを取得してそのプロパティ値の 1 つを変更し、変更後のインスタンスを CIM Object Manager に渡します。

CIM プロパティは、CIM クラスの特性を記述するために使用される値です。プロパティは、プロパティ値を設定する機能と、プロパティ値を取得する機能の組み合わせと考えることができます。


例 4–11 インスタンスの設定 (setInstance)

...
{
    // オブジェクトパスを作成する (CIM 名「myclass」を持つ
    // オブジェクト)
    CIMObjectPath cop = new CIMObjectPath("myclass"); 
    /* 列挙内の各インスタンスオブジェクトパスのインスタンスを取得し、
    各インスタンスのプロパティ値 b に 10 を設定し、
    更新済みインスタンスを CIM Object Manager に渡す。 */
    
    while(e.hasMoreElements()) {
		    CIMInstance ci = cc.getInstance(CIMObjectPath)(e.nextElement(), 
                true, true, true, null);
        ci.setProperty("b", new CIMValue(new Integer(10)));
				cc.setInstance(new CIMObjectPath(),ci);
		}
}
...