クライアントプログラムが Solaris WBEM プロバイダのメソッドを呼び出すためには、invokeMethod メソッドが必要です。これは、組み込み済みのプロバイダと開発者によって追加されたプロバイダの両方に当てはまります。
組み込み済みプロバイダ – 「プラットフォームに依存しない」CIM_* プロバイダ、または Solaris プラットフォーム固有の Solaris_* プロバイダ
開発者によって追加されたプロバイダ – たとえば、MethodProvider インタフェースを実装すると、プロバイダまたは WBEM 以外のメソッドを提供するメソッドプロバイダが作成される
次のコード例では、CIMOM からの要求を 1 つ以上の特別なプロバイダに配信する Solaris_ComputerSystem プロバイダクラスを作成します。これらのプロバイダは、特定の管理対象オブジェクトの動的データの要求を処理します。たとえば、Solaris_Package プロバイダは、Solaris_Package クラスメソッドを実行する要求に対応します。
メソッドプロバイダは、invokeMethod という単一メソッドを実装します。このメソッドは、システムのリブート、システムのシャットダウン、シリアルポートの削除のいずれかの処理を実行する適切なプロバイダを呼び出します。
... public class Solaris_ComputerSystem implements MethodProvider { ProviderCIMOMHandle pch = null; public void initialize(CIMOMHandle ch) throws CIMException { 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"); } // 以下にヘルパー関数を定義する ... }