クライアントプログラムで Solaris WBEM プロバイダのメソッドを呼び出すには、メソッド invokeMethod を使用する以外には他の方法はありません。次のいずれかのプロバイダを使用します。
組み込み型 – プラットフォームに依存しない CIM_* プロバイダまたは Solaris 固有の Solaris_* プロバイダ
開発者によって追加 – たとえば、MethodProvider インタフェースを実装すると、プロバイダまたは WBEM 以外のメソッドを提供するメソッドプロバイダが作成される
次のコード例は、CIM Object Manager からの要求を 1 つ以上の特化されたプロバイダに配信する Solaris_ComputerSystem プロバイダクラスを作成します。これらの特化されたプロバイダは、特定の管理対象オブジェクトの動的データの要求に対するサービスを行います。たとえば、Solaris_Package プロバイダは、Solaris_Package クラスのメソッドを実行する要求に対応します。
メソッドプロバイダは、invokeMethod という単一のメソッドを実装します。このメソッドは、システムのリブート、システムの停止、またはシリアルポートの削除のいずれかの処理を実行する適切なプロバイダを呼び出します。
... public class Solaris_ComputerSystem implements MethodProvider { ProviderCIMOMHandle pch = null; public void initialize(CIMOMHandle ch) throws CIMExcepiton { pch = (ProviderCIMOMHandle)ch; } public void cleanup() throws CIMException { } public CIMValue invokeMethod(CIMObjectPath op, String methodName, Vector inParams, Vector outParams) throws CIMException { if (op.getObjectName().equalsIgnoreCase("solaris_computersystem")) { if (methodName.equalsIgnoreCase("reboot")) { // ヘルパー関数を呼び出す (ここには表示されていない) return new CIMValue(rebootSystem()); } if (methodName.equalsIgnoreCase("shutdown")) { // ヘルパー関数を呼び出す (ここには表示されていない) return new CIMValue(shutdownSystem()); } } if (op.getObjectName().equalsIgnoreCase("solaris_serialport")) { if (methodName.equalsIgnoreCase("disableportservice")) { // ヘルパー関数を呼び出す (ここには表示されていない) return new CIMValue(deletePort(op)); } } // エラー throw new CIMException(CIMException.CIM_ERR_NOT_SUPPORTED, "The requested function does not exist"); } // 以下にヘルパー関数が定義される ... }