MethodProvider メソッドには、次の引数を指定できます。
op - メソッドが呼び出されるインスタンスのオブジェクトパス
originClass - クラス階層内でこのメソッドの定義が初めに行われたクラスの名前。CIM プロパティは、親クラスから継承される CIM クラスの属性です。CIM プロパティは、ネームスペース内でその名前と親クラスによって個別に識別されます。たとえば、speed という 2 つのプロパティが存在する場合、それらはそれぞれの親クラス DiskDrive と CPU で区別されます。
inParams - メソッドの入力パラメータである CIMValues のベクトル
CIMValue - メソッドの戻り値。メソッドに戻り値がない場合、メソッドは NULL を返す必要があります。CIM Value は、CIM のデータ型と CIM プロパティの値を格納します。CIM のデータ型 (CIM Specification で定義されている) は、組み込まれているデータ型に限定されます。次の表は、CIM の各データ型に対応する WBEM のデータ型の名前を示しています。
表 7-4 Sun WBEM SDK と CIM のデータ型名| CIM のデータ型 | WBEM のデータ型 | 説明 | 
|---|---|---|
| uint8 | UnsignedInt8 | 符号なし 8 ビット整数 | 
| sint8 | Byte | 符号付き 8 ビット整数 | 
| uint16 | UnsignedInt16 | 符号なし 16 ビット整数 | 
| sint16 | Short | 符号付き 16 ビット整数 | 
| uint32 | UnsignedInt32 | 符号なし 32 ビット整数 | 
| sint32 | Integer | 符号付き 32 ビット整数 | 
| uint64 | UnsignedInt64 | 符号なし 64 ビット整数 | 
| sint64 | Long | 符号付き 64 ビット整数 | 
| string | String | UCS-2 文字列 | 
| boolean | Boolean | ブール型 | 
| real32 | Float | IEEE 4 バイト浮動小数点 | 
| real64 | Double | IEEE 8 バイト浮動小数点 | 
| datetime | CIMDateTime | 日時を含む文字列 | 
| classname ref | CIMObjectPath | 厳密に型定義された参照 | 
| char16 | Character | 16 ビット UCS-2 文字 | 
次の表では、MethodProvider インタフェースのメソッドについて説明します。
表 7-5 MethodProvider インタフェースメソッド| メソッド | 説明 | 
|---|---|
| invokeMethod | CIM Object Manager は、指定されたメソッドが呼び出される場合にこのメソッドを呼び出す | 
例 7-4 のコードセグメントは、CIM Object Manager からのメソッド実行要求を 1 つ以上の特化されたプロバイダに送る Solaris プロバイダクラスを作成します。これらの特化されたプロバイダは、特定の Solaris オブジェクトの動的データの要求に対するサービスを行います。たとえば、Solaris_Package プロバイダは、Solaris_Package クラスのメソッドを実行する要求に対応します。
この例のメソッドプロバイダは、適切なプロバイダを呼び出して次に示す処理の 1 つを実行する単一のメソッド invokeMethod を実装します。
Solaris システムをリブートする
Solaris システムをリブートまたは停止する
Solaris シリアルポートを削除する
| public class Solaris implements MethodProvider
{
 
    public void initialize(CIMONHandle, ch) 
    throws CIMException {
    }
 
    public void cleanup() 
    throws CIMException {
    }
   public CIMValue invokeMethod(CIMObjectPath op, String methodName, 
        Vector inParams, Vector outParams) throws CIMException {
        if (op.getObjectName().equalsIgnoreCase("solaris_computersystem")) {
            Solaris_ComputerSystem sp = new Solaris_ComputerSystem();
            if (methodName.equalsIgnoreCase("reboot")) {
               return new CIMValue (sp.Reboot());
            }
        }
        if (op.getObjectName().equalsIgnoreCase("solaris_operatingsystem")) {
            Solaris_OperatingSystem sos = new Solaris_OperatingSystem();
            if (methodName.equalsIgnoreCase("reboot")) {
               return new CIMValue (sos.Reboot());
            }
            if (methodName.equalsIgnoreCase("shutdown")) {
               return new CIMValue (sos.Shutdown());
            }
        }
        if (op.getObjectName().equalsIgnoreCase("solaris_serialport")) {
            Solaris_SerialPort ser = new Solaris_SerialPort();
            if (methodName.equalsIgnoreCase("disableportservice")) {
               return new CIMValue (ser.DeletePort(op));
            }
        }
        return null;
    }
}
  |