次の表で、Provider パッケージ (com.sun.wbem.provider20) に含まれるインスタンスプロバイダインタフェースのメソッドについて説明します。
これらの各メソッドは引数 op を取ります。op は、指定された CIM クラスまたは CIM インスタンスの CIMObjectPath です。オブジェクトパスには、ネームスペース、クラス名、およびキー (オブジェクトがインスタンスの場合) が含まれます。ネームスペースは、ほかのネームスペース、クラス、インスタンス、および修飾子のデータ型を格納できるディレクトリです。キーは、クラスインスタンスを個別に識別するプロパティです。キープロパティには、キー修飾子が含まれます
たとえば、次のオブジェクトパスは 2 つの部分から構成されます。
\\myserver\root\cimv2\Solaris_ComputerSystem:Name=mycomputer: CreationClassName=Solaris_ComputerSystem |
\\myserver\root\cimv2
これは、ホスト myserver 上のデフォルトの CIM ネームスペースです。
Solaris_ComputerSystem:Name=mycomputer: CreationClassName=Solaris_ComputerSystem
これは、ホスト myserver 上のデフォルトネームスペースに存在する特定の Solaris Computer System オブジェクトです。この Solaris コンピュータシステムは、(プロパティ=値) という書式で示される 2 つのキー修飾子値によって個別に識別されます。
Name=mycomputer
CreationClassName=Solaris_ComputerSystem
メソッド |
説明 |
---|---|
CIMObjectPath createInstance(CIMObjectPath op, CIMInstance ci) |
op によって指定されたインスタンス ci が存在しない場合は、それを作成する。この CIM インスタンスがすでにある場合は、ID が CIM_ERR_ALREADY_EXISTS の CIMInstanceException をプロバイダがスローする必要がある。作成されたインスタンスの CIMObjectPath を返す。 |
void deleteInstance(CIMObjectPath op) |
オブジェクトパス (op) に指定されたインスタンスを削除する。 |
Vector enumInstances(CIMObjectPath path, boolean deep, CIMClass cc) |
path に指定されたクラスの各インスタンスの「名前」を返す。deep が true の場合は、指定されたクラスとそのクラスから派生したすべてのクラスのすべてのインスタンスの名前を返す。deep が true でない場合は、指定されたクラスに属するインスタンスの名前だけを返す。 プロバイダがインスタンスをゼロから作成したくない場合は、新しいインスタンスのテンプレートを作成できる。それには、そのインスタンスが属するクラス (cc) の newInstance() メソッドを呼び出す。 |
Vector enumInstances(CIMObjectPath path, boolean deep, CIMClass cc, boolean localOnly) |
path に指定されたクラスのインスタンス (インスタンスの名前だけでなく、インスタンス全体) を返す。 プロバイダがインスタンスをゼロから作成したくない場合は、新しいインスタンスのテンプレートを作成できる。それには、そのインスタンスが属するクラス (cc) の newInstance() メソッドを呼び出す。 localOnly が true の場合は、列挙されたインスタンスのローカルプロパティ (継承されたプロパティではない) だけを返す。localOnly が true でない場合は、すべての継承されたプロパティとローカルプロパティを返す。 |
Vector execQuery (CIMObjectPath op, String query, int ql, CIMClass cc |
照会を実行して CIM オブジェクトを検索する。このメソッドは、指定された照会文字列に一致する、指定された CIM クラス (cc) の CIM インスタンスのベクトルを返す。 |
CIMInstance getInstance(CIMObjectPath op, CIMClass cc, boolean localOnly) |
オブジェクトパス (op) に指定されたインスタンスを返す。 プロバイダがインスタンスをゼロから作成したくない場合は、新しいインスタンスのテンプレートを作成できる。それには、そのインスタンスが属するクラス (cc) の newInstance() メソッドを呼び出す。 localOnly が true の場合は、列挙されたインスタンスのローカルプロパティ (継承されたプロパティではない) だけを返す。localOnly が true でない場合は、すべての継承されたプロパティとローカルプロパティを返す。 |
void setInstance(CIMInstance ci) |
指定された CIM インスタンスが存在する場合は、それを更新する。このインスタンスが存在しない場合は、ID が CIM_ERR_NOT_FOUND の CIMInstanceException をスローする。 |
次のコード例は、インスタンスプロバイダ SimpleInstanceProvider の Java ソースコードです。このインスタンスプロバイダは、Ex_SimpleInstanceProvider クラスの enumInstances インタフェースと getInstance インタフェースを実装しています。わかりやすくするために、この例では、CIMException をスローすることによって deleteInstance、createInstance、setInstance、execQuery の各インタフェースを実装します。実際には、インスタンスプロバイダがすべての InstanceProvider インスタンスを実装する必要があります。
/* * "@(#)SimpleInstanceProvider.java" */ import com.sun.wbem.cim.*; import com.sun.wbem.client.*; import com.sun.wbem.provider.CIMProvider; import com.sun.wbem.provider20.InstanceProvider; import com.sun.wbem.provider.MethodProvider; import java.util.*; import java.io.*; public class SimpleInstanceProvider implements InstanceProvider{ static int loop = 0; public void initialize(CIMOMHandle cimom) throws CIMException { } public void cleanup() throws CIMException { } public Vector enumInstances(CIMObjectPath op, boolean deep, CIMClass cc, boolean localOnly) throws CIMException { return null; } /* * enumInstances: * 名前だけでなく、インスタンス全体が返される。 * 詳細列挙または簡易列挙が可能だが、現在のところ * CIMOM は簡易列挙だけを要求する。 */ public Vector enumInstances(CIMObjectPath op, boolean deep, CIMClass cc) throws CIMException { if (op.getObjectName().equalsIgnoreCase("Ex_SimpleInstanceProvider")) { Vector instances = new Vector(); CIMObjectPath cop = new CIMObjectPath(op.getObjectName(), op.getNameSpace()); if (loop == 0){ cop.addKey("First", new CIMValue("red")); cop.addKey("Last", new CIMValue("apple")); // このクラスを削除する場合は、この次の行を // コメントにしてコンパイルする。 instances.addElement(cop); loop += 1; } else { cop.addKey("First", new CIMValue("red")); cop.addKey("Last", new CIMValue("apple")); // このクラスを削除する場合は、この次の行を // コメントにしてコンパイルする。 instances.addElement(cop); cop = new CIMObjectPath(op.getObjectName(), op.getNameSpace()); cop.addKey("First", new CIMValue("green")); cop.addKey("Last", new CIMValue("apple")); // このクラスを削除する場合は、この次の行を // コメントにしてコンパイルする。 instances.addElement(cop); } return instances; } return new Vector(); } public CIMInstance getInstance(CIMObjectPath op, CIMClass cc, boolean localOnly) throws CIMException { if (op.getObjectName().equalsIgnoreCase("Ex_SimpleInstanceProvider")) { CIMInstance ci = cc.newInstance(); ci.setProperty("First", new CIMValue("yellow")); ci.setProperty("Last", new CIMValue("apple")); return ci; } return new CIMInstance(); } public Vector execQuery(CIMObjectPath op, String query, int ql, CIMClass cc) throws CIMException { throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED)); } public void setInstance(CIMObjectPath op, CIMInstance ci) throws CIMException { throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED)); } public CIMObjectPath createInstance(CIMObjectPath op, CIMInstance ci) throws CIMException { throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED)); } public void deleteInstance(CIMObjectPath cp) throws CIMException { throw(new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED)); } }