Solaris WBEM SDK 開発ガイド

アソシエータプロバイダの作成


注 -

クライアントプログラム (CIMObjectPath ) によって呼び出される関連メソッドの objectName 引数は、クラスではなくインスタンスのオブジェクトパスである必要があります。


インスタンスのオブジェクトパスが指定されていない場合、CIM Object Manager は、クライアントが CIM Object Manager Repository の関連 (関連のメンバーインスタンスが派生するテンプレート) のクラス定義を必要としているとみなします。プロバイダではなく、クライアント API の関連メソッドを使用します。

関連を設計およびコーディングする場合に最も重要な部分は、関連クラスそのものです。作成する関連は、関連クラスのコンテンツ以上には複雑になりません。関連のメンバー数は、関連クラスの参照数に等しくなります。役割は、さらに複雑な関連をモデル化する場合に使用できます。次に関連クラスの例を示します。

次のコード例では associators メソッドを実装します。CIM Object Manager は、associatorNamesobjectNameroleresultRoleincludeQualifiersincludeClassOrigin、および propertyList のそれぞれの値を関連プロバイダに渡します。また CIM 関連クラスの名前と、返される関連オブジェクトが属する CIM クラスまたはインスタンスを出力します。このプロバイダは、example_teacher クラスと example_student クラスのインスタンスを扱います。


例 4-3 CIMAssociator プロバイダ

...

public CIMInstance[] associators(CCIMObjectPath assocName, CIMObjectPath 
                objectName, String resultClass, String role, String
                resultRole, boolean includeQualifiers, boolean 
                includeClassOrigin, String[] propertyList)
                throws CIMException {
        System.out.println("Associators "+assocName+" "+objectName);
      if (objectName.getObjectName()equalsIgnoreCase("example_teacher")) {
      Vector v = new Vector();
      if ((role != null)  && (!role.equalsIgnoreCase("teaches"))) {
        // Teacher は、teaches という役割だけを担う
            return v;
        }
        if ((resultRole != null)  && (!resultRole.equalsIgnoreCase
                                     ("taughtby"))) {
        // Teacher は、taughtby という役割によってのみ得られる
        return v;
        }
        // Teacher のアソシエータを取得する
        CIMProperty nameProp = (CIMProperty)objectName.getKeys().elementAt
                               (0);
        String name = (String)nameProp.getValue().getValue();
        // Student のクラスを取得する
        CIMObjectPath tempOp = new CIMObjectPath("example_student");
        tempOp.setNameSpace(assocName.getNameSpace());
        CIMClass cc = cimom.getClass(tempOp, false);
        // objectName によって渡されたインスタンス名をテストし、Student 
        // クラスの関連インスタンスを返す
        if(name.equals("teacher1")) {
                // teacher1 の Student (複数) を取得する
                CIMInstance ci = cc.newInstance();
                ci.setProperty("name", new CIMValue("student1"));
                v.addElement(ci.filterProperties(propertyList, 
                             includeQualifiers,
                        includeClassOrigin));
                ci = cc.newInstance();
                ci.setProperty("name", new CIMValue("student2"));
                v.addElement(ci.filterProperties(propertyList,
                        includeQualifiers, includeClassOrigin));
                return v;
        }
}