ここでは、関連という CIM 概念と、関連の情報を取得するときに使用する CIMClient メソッドについて説明します。
関連とは、コンピュータとそのシステムディスクなど、2 つ以上の管理リソース間の関係を表したものです。この関係は、関連修飾子を持つ特殊なクラス型である関連クラスで表されます。
さらに、関連クラスには、その個々の管理リソースを表す CIM インスタンスへの 2 つ以上の参照が含まれています。参照は REF キーワードで宣言される特殊なプロパティ型であり、これが他のインスタンスへのポインタであることを示します。参照は、個々の管理リソースが関連において担う役割を定義します。
次の図には、Teacher と Student という 2 つのクラスが示されています。これらのクラスは、TeacherStudent という関連によってリンクされています。TeacherStudent には、Teaches と TaughtBy という 2 つの参照があります。Teaches は、Teacher クラスのインスタンスを参照するプロパティであり、TaughtBy は Student クラスのインスタンスを参照するプロパティです。
参照の 1 つを削除する場合は、その前に関連を削除する必要があります。2 つまたはそれ以上のオブジェクト間の関連を追加または変更しても、オブジェクト自体には影響を与えません。
CIMClient クラスの次のメソッドは、クライアントとインスタンス間の関連 (関係) に関する情報を返します。
表 4–7 CIMClient の関連メソッド
メソッド |
説明 |
---|---|
associators |
指定された CIM クラスやインスタンスに関連付けられている CIM クラスやインスタンスを取得する。 |
associatorNames |
指定された CIM クラスやインスタンスに関連付けられている CIM クラスやインスタンスの名前を取得する。 |
references |
指定された CIM クラスやインスタンスを参照する関連を取得する |
referenceNames |
指定された CIM クラスやインスタンスを参照する関連の名前を取得する。 |
関連メソッドは、唯一の必須引数として CIMObjectPath を受け取ります。この引数は、検索したい関連や、関連付けされたクラスまたはインスタンスを持つソースの CIM クラスまたは CIM インスタンスの名前です。CIM Object Manager は、関連、関連付けされたクラス、またはインスタンスを見つけることができないと、何も返しません。
関連メソッドは、CIMObjectpath がクラスである場合は、関連付けされたクラスとそのクラスのサブクラスを返し、CIMObjectpath がインスタンスである場合は、関連付けされたインスタンスと各インスタンスの派生元クラスを返します。
インスタンスやクラスの名前を指定するには、そのモデルパスを指定する必要があります。クラスのモデルパスには、ネームスペースとクラスの名前が含まれています。インスタンスのモデルパスは、特定の管理リソースを固有に識別します。インスタンスのモデルパスには、ネームスペース名と、クラス名、キーが含まれています。キーは、管理リソースを固有に識別するために使用されるプロパティまたは一連のプロパティです。キープロパティは、キー修飾子で識別します。
モデルパス \\myserver\\Root\cimv2\Solaris_ComputerSystem.Name=mycomputer: CreationClassName=Solaris_ComputerSystem は、3 つの部分から構成されています。
\\myserver\Root\cimv2 – ホスト myserver 上のデフォルト CIM ネームスペース
Solaris_ComputerSystem – このインスタンスの派生元クラスの名前
Name=mycomputer, CreationClassName=Solaris_ComputerSystem – 「キープロパティ = 値」の形式による 2 つのキープロパティ
実際の使用では通常、あるクラスのすべてのインスタンスを enumInstances メソッドを使って列挙し、ループ構造で各インスタンスを処理します。ループでは、各インスタンスを関連メソッドに渡すことができます。次のコード例では、次のことを行なっています。
現在のクラス (op) とそのクラスのサブクラス内のすべてのインスタンスを列挙する。
while ループを使って、個々のインスタンスを CIMObjectPath (op) にキャストする。
各インスタンスを、associators メソッドへの最初の引数として渡す。
{ ... Enumeration e = cc.enumInstances(op, true); while (e.hasMoreElements()) { op = (CIMObjectPath)e.nextElement(); Enumeration e1 = cc.associators(op, null, null, null, null, false, false, null); ... }
関連メソッドは、返されるクラスやインスタンスをフィルタリングする次のオプション引数も受け取ります。すべての引数が処理されるまで、オプションの各パラメータ値は、その結果をフィルタリング処理のために次に続くパラメータに渡します。
1 つのオプション引数の値、またはオプション引数を組み合わせたものの値を渡すことができます。各パラメータには値を指定する必要があります。返されるクラスやインスタンスをフィルタリングする引数には、assocClass、 resultClass、 role、 resultRole があります。これらの引数を使用すると、これらのパラメータに指定された値と一致するクラスやインスタンスだけが返されます。返されるクラスやインスタンスに含まれている情報をフィルタリングする引数には、includeQualifiers、includeClassOrigin、propertyList があります。
次の表に、関連メソッドへのオプション引数を示します。
表 4–8 関連メソッドへのオプション引数
引数 |
型 |
説明 |
値 |
---|---|---|---|
assocClass |
String |
ソースの CIM クラスまたはインスタンスとこのタイプで関連付けられているターゲットオブジェクトを返す。Null の場合は、返すオブジェクトを関連でフィルタリングしない。 |
有効な CIM 関連クラス名または Null |
resultClass |
String |
resultClass またはそのいずれかのサブクラスのインスタンスであるターゲットオブジェクト、または resultClass かそのいずれかのサブクラスと一致するオブジェクトを返す。 |
CIM クラスの有効な名前または Null |
role |
String |
この関連でソースの CIM クラスまたはインスタンスが担っている役割を指定する。ソースオブジェクトがこの役割を担っている関連のターゲットオブジェクトを返す。 |
有効なプロパティ名または Null |
resultRole |
String |
指定された役割をこの関連で担っているターゲットオブジェクトを返す。 |
有効なプロパティ名または Null |
includeQualifiers |
Boolean |
true の場合、各ターゲットオブジェクトのすべての修飾子 (このオブジェクトと返されるプロパティのすべての修飾子) を返す。false の場合、修飾子を返さない。 |
True または False |
includeClassOrigin |
Boolean |
true の場合、返される各オブジェクトのすべての適切な要素に CLASSORIGIN 属性を含める。false の場合、CLASSORIGIN 属性を含めない。 |
True または False |
propertyList |
String array |
このリストに指定されたプロパティの要素だけを含むオブジェクトを返す。空配列の場合は、返される各オブジェクトにプロパティは含まれない。NULL の場合は、返す各オブジェクトにすべてのプロパティが含まれる。無効なプロパティ名は無視する。 プロパティリストを指定する場合は、resultClass に Null 以外の値を指定する必要がある。 |
有効なプロパティ名の配列、空の配列、または Null |
このセクションの各例は、associators メソッドや associatorNames メソッドを使って、次の図に示す Teacher クラスや Student クラスに関連付けられているクラスの情報を取得する方法を示したものです。associatorNames メソッドでは、引数 includeQualifiers、includeClassOrigin、propertyList は使用されません。インスタンスまたはクラスの名前だけ (内容全体ではなく) を返すメソッドには、これらの引数は関係ないからです。
例 |
出力 |
説明 |
---|---|---|
associators(Teacher, null, null, null, null, false, false, null) |
Student クラス |
関連付けられているクラスとそれらのサブクラスを返す。Student は、TeacherStudent 関連によって Teacher とリンクされている。 |
associators(Student, null, null, null, null,false, false, null) |
Teacher クラス、 MathTeacher クラス、 ArtTeacher クラス |
関連付けられているクラスとそれらのサブクラスを返す。Teacher は、TeacherStudent 関連によって Student とリンクされている。MathTeacher と ArtTeacher は、Teacher から TeacherStudent 関連を継承する。 |
associatorNames(Teacher, null, null, null, null) |
Student クラスの名前 |
関連付けられているクラスとそれらのサブクラスの名前を返す。Student は、TeacherStudent 関連によって Teacher とリンクされている。 |
associatorNames(Student, null, null, null, null) |
Teacher、 MatchTeacher、 ArtTeacher のクラス名 |
関連付けられているクラスとそれらのサブクラスの名前を返す。Teacher は、TeacherStudent 関連によって Student とリンクされている。MathTeacher と ArtTeacherr は、Teacher から TeacherStudent 関連を継承する。 |
このセクションの各例は、references メソッドや referenceNames メソッドを使って、図 4–2 に示す Teacher クラスと Student クラスの関連の情報を取得する方法を示したものです。 referenceNames メソッドでは、引数 includeQualifiers、includeClassOrigin、propertyList は使用されません。インスタンスまたはクラスの名前だけ (内容全体ではなく) を返すメソッドには、これらの引数は関係ないからです。
表 4–10 references メソッドと referenceNames メソッド
例 |
出力 |
説明 |
---|---|---|
references(Student, null, null. false, false, null) |
TeacherStudent |
Student が関与している関連を返す。 |
references(Teacher, null, null. false, false, null) |
TeacherStudent |
Teacher が関与している関連を返す。 |
referenceNames(Teacher, null, null) |
TeacherStudent クラスの名前 |
Teacher が関与している関連の名前を返す。 |