この節では、CIM インスタンスの作成、削除、および更新 (1 つ以上のインスタンスのプロパティ値の取得と設定) の各方法について説明します。
既存のクラスのインスタンスを作成するには、newInstance メソッドを使用します。既存のクラスがキープロパティを持つ場合、アプリケーションはそのプロパティを固有の値に設定する必要があります。インスタンスは、必要に応じてそのクラスに定義されていない別の修飾子を定義することもできます。それらの修飾子をインスタンスまたは特定のインスタンスプロパティ用に定義できますが、クラス宣言内で定義する必要はありません。
アプリケーションは、クラスに定義されている一連の修飾子を getQualifiers メソッドを使用して取得できます。
例 6-4 のコードセグメントは、newInstance メソッドを使用して、Solaris_Package クラスの CIM インスタンス (Solaris パッケージなど) を表す Java クラスを作成します。
/*ローカルホストの root¥cimv2 ネームスペースの CIM Object Manager に接続 */
CIMClient cc = new CIMClient();
// Solaris_Package クラスを取得
cimclass = cc.getClass(newCIMObjectPath("Solaris_Package");
/* プロパティのデフォルト値を使用して生成された Solaris_Package
クラスの新しいインスタンスを作成。このクラスのプロバイダが
デフォルト値を指定しない場合、プロパティの値は NULL であり、
明示的に設定される必要がある。*/
ci = cimclass.newInstance();
|
インスタンスの削除には、deleteInstance メソッドを使用します。
例 6-5 は、クライアントアプリケーションを CIM Object Manager に接続し、次に示すインタフェースを使用してクラスのインスタンスをすべて削除します。
CIMObjectPath - 削除されるオブジェクトの CIM オブジェクトパスを含むオブジェクトを構築する
enumInstance - インスタンスおよびそのサブクラスのすべてのインスタンスを取得する
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 java.util.Enumeration;
public class DeleteInstances {
public static void main(String args[]) throws CIMException {
CIMClient cc = null;
try {
/* コマンド行引数を含むネームスペースオブジェクトを
構築 */
CIMNameSpace cns = new CIMNameSpace(args[0]);
/* このネームスペースオブジェクトを CIM Object Manager に渡す。*/
CIMClient cc = new CIMClient(cns);
/* 削除するオブジェクトの CIM オブジェクトパスを含む
オブジェクトを構築 */
CIMObjectPath cop = new CIMObjectPath(args[1]);
/* オブジェクトインスタンスのディープ (deep) 列挙を行う
(deep は CIMClient.DEEP に設定される)。
クラスインスタンスのディープ列挙を行うと、クラスおよび
そのサブクラスのすべてのインスタンスが返される。 */
Enumeration e = cc.enumInstances(cop, CIMClient.DEEP);
// 各オブジェクト名を出力し、インスタンスを削除
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 メソッドがよく使用されます。
例 6-6 のコードセグメントは、特定のシステム上のすべてのプロセスを表示します。この例では、enumInstances メソッドを使用して CIM_Process クラスのインスタンス名を取得します。このコードを Microsoft Windows 32 システムで実行すると、Windows 32 のプロセスが返されます。このコードを Solaris システムで実行すると、Solaris プロセスが返されます。
{
//ネームスペース cns を作成
CIMnameSpace cns = new CIMNameSpace;
//CIM Object Manager 上で cns ネームスペースに接続
cc = new CIMClient(cns);
/* CIM_Process クラスの CIM オブジェクトパスを
CIM Object Manager に渡す (このクラスのインスタンスを取得する)。 */
CIMObjectPath op = new CIMObjectPath("CIM_Process");
/* CIM Object Manager が、オブジェクトパスのベクトル
(CIM_Process クラスのインスタンス名) を返す。 */
Vector v = cc.enumInstances(op, true);
/* インスタンスオブジェクトパスが入ったベクトルのサイズ分だけ繰り返す。
各オブジェクト名によって参照されるインスタンスを取得するには、
CIM Client の getInstance インタフェースを使用する。 */
for (int i=0; i < v.size(); i++) {
// インスタンスを取得
CIMInstance ci = cc.getInstance(v.elementAt(i));
/* CIM_Process の各インスタンスのプロセス ID 文字列を
取得 */
CIMProperty cp = ci.getProperty("Handle");
}
|
例 6-7 は、すべての Solaris プロセスの lockspeed プロパティの値を出力します。このコードセグメントは、次のメソッドを使用します。
getInstance - 各インスタンス名のインスタンスデータを取得する
getProperty - 各インスタンスの lockspeed の値を取得する
println - lockspeed の値を出力する
/* myhost の /root ネームスペースで、パスワード contrary を
持つユーザー mary として CIM Object Manager に接続 */
{
CIMNameSpace cns = new CIMNamesSpace ("myhost" "/root");
cc = new CIMClient (cns, "/root", "mary", "contrary");
// Solaris_Processor のすべてのインスタンスの名前を取得
Vector op cc.enumInstances("Solaris_Processor")
// 各 Solaris プロセッサごとに、そのインスタンスデータを取得
while (vector has more elements) {
cn.getNextElement();
cc.getInstance (cn);
// 各プロセッサの lockspeed を出力
p = ci.getProperty("lockspeed")
System.out.println(p.getValue().getValue());
}
|
例 6-8 のコードセグメントは、CIM インスタンスを取得してそのプロパティ値の 1 つを変更し、変更後のインスタンスを CIM Object Manager に渡します。
CIM プロパティは、CIM クラスの特性を記述するために使用される値です。プロパティは、プロパティ値を設定する機能と、プロパティ値を取得する機能の組み合わせと考えることができます。
{
/* ベクトル内の各要素のインスタンスを取得し、
各インスタンスで b のプロパティ値を 10 に変更し、
変更後のインスタンスを CIM Object Manager に渡す。 */
For (int i=0; i(v.size(); i++) {
CIMInstance ci = cc.getInstance(v.elementAt(i));
ci.setProperty("b",new CIMValue(10));
cc.setInstance(new CIMObjectPath(),ci);
}
|