Sun WBEM SDK はソフトウェア開発者向けのツールキットで、WBEM 対応のあらゆる管理デバイスと通信が行える java 管理アプリケーションを作成するためのコンポーネントが含まれています。このツールキットを使用すると、プロバイダ (データにアクセスするために管理対象オブジェクトと通信を行うプログラム) も作成できます。
この章では Sun WBEM SDK の概要と、このソフトウェアのインストールとアンインストールの方法を説明します。内容は次のとおりです。
Sun WBEM SDK は、ソフトウェア開発者用のツールキットで、WBEM 環境で実行できるアプリケーションの開発に使用できます。このツールキットを使用すると、WBEM に対応した任意の環境の Java プラットフォーム上で動作するプロバイダ (WBEM コンポーネントと CIM Object Manager 間で通信を行うプログラム) も開発できます。
プロバイダは、CIM Object Manager が動作しているコンピュータで起動する必要があります。SUN WBEM バージョン 1.0 は、Windows 環境では CIM Object Manager をサポートしていません。そのため、Microsoft Windows 32 ビットオペレーティングシステム用のプロバイダを開発する場合に Sun WBEM SDK を使用することはお勧めできません。
Sun WBEM SDK には、次のコンポーネントが含まれます。
CIM WorkShop
クライアント API
プロバイダ API
MOF コンパイラ
クライアントプログラムの例
プロバイダプログラムの例
『Sun WBEM 開発ガイド』
『Javadoc for Client and Provider API』
CIM WorkShop は、CIM のクラスとインスタンスの表示、CIM の新しいサブクラスとインスタンスの作成、サブクラスの新しいプロパティ、メソッド、および修飾子の追加と削除が行えるソフトウェアアプリケーションです。CIM WorkShop の使用方法については、第 4 章「CIM WorkShop」を参照してください。
クライアント Application Programming Interface (API) は、Java アプリケーションが CIM Object Manager に操作を要求するために使用する公開 API です。クライアント API の一覧と説明は、第 5 章「アプリケーションプログラミングインタフェース」を参照してください。
プロバイダ API は、CIM Object Manager とオブジェクトプロバイダが相互通信のために使用するインタフェースです。プロバイダは、これらのインタフェースを使用して、CIM Object Manager に特定の種類の動的データを提供できます。アプリケーションが CIM Object Manager に動的データを要求する場合、CIM Object Manager はこれらのインタフェースを使用して、登録されているプロバイダにその要求を引き渡します。プロバイダ API の詳細は、第 5 章「アプリケーションプログラミングインタフェース」を参照してください。
Managed Object Format (MOF) は、CIM データを表現する標準のテキスト形式です。CIM 仕様に従って開発された製品は、MOF 形式で情報交換が行える必要があります。
Sun WBEM SDK ソフトウェアは、MOF コンパイラ (mofcomp) を使用して MOF テキストファイルを Java クラスに変換します。Sun WBEM SDK は、内部的には Java クラスを使用して CIM データを記述します。
MOF 言語は、CIM のクラスとインスタンスを定義する構文を記述します。MOF を使用すると、開発者や管理者は CIM Object Manager Repository を簡単に手早く変更できます。
Sun WBEM SDK には、クライアント API を使用した Java プログラムの例が付いています。これらのプログラムは、/opt/SUNWconn/wbem/demo にインストールされます。これらのプログラムは、そのまま実行することも、独自のアプリケーションを構築するために利用することもできます。クライアントプログラム例の詳細は、第 8 章「Sun WBEM SDK サンプルの使用」の 「クライアント例の使用」を参照してください。
プロバイダプログラムの例では、プロバイダ API を使用しています。これらのプログラムを利用して、CIM の機能を特定の技術に展開するプロバイダ (管理対象オブジェクトと CIM Object Manager との通信を可能にするプロバイダなど) を開発できます。プロバイダプログラム例の詳細は、第 8 章「Sun WBEM SDK サンプルの使用」の 「プロバイダ例の使用」を参照してください。
Sun WBEM SDK には、『Sun WBEM 開発ガイド』と 『Javadoc for Client and Provider API』のマニュアルが付属しています。
Sun WBEM SDK キットをインストールするには、あらかじめ Java Development Kit (JDK) バージョン 1.1.7_05 または互換バージョンがインストールされている必要があります。
Sun WBEM SDK を単独で使用する製品としてインストールすることができます。また、Sun WBEM SDK と Solaris WBEM Services とを対話的に使用するようにインストールすることもできます。どちらの製品をインストールする場合でも、製品パッケージのインストールが必要です。パッケージには、各製品のファイル、インタフェース、およびコンポーネントが含まれます。
Sun WBEM SDK と Solaris WBEM Services は一部のパッケージを共有します。たとえば、これら 2 つのアプリケーションには クライアント API を含むパッケージ SUNWwbapi が必要です。
Sun WBEM SDK パッケージとそのインストール手順の詳細は、「Sun WBEM SDK のインストール」を参照してください。Solaris WBEM Services パッケージとそのインストール手順の詳細は、第 10 章「Solaris WBEM Services のインストール」、「Solaris WBEM Services のインストール」を参照してください。
Sun WBEM SDK のインストールの際に必要なパッケージを以下の表に示します。
表 2-1 Sun WBEM SDK パッケージ
必須パッケージ |
||
パッケージ名 |
項目名 |
説明 |
SUNWwbapi |
Sun WBEM SDK - API |
クライアント API, とプロバイダ API、および Sun WBEM SDK と Solaris WBEM Services を実行するのに必要な追加機能を含む。このパッケージは Sun WBEM SDK で提供される。このパッケージは両方の製品に必要である |
SUNWwbdev |
Sun WBEM Software Development Kit (SDK) |
CIM Workshop、CIM Workshop で使用するコンテキストヘルプ、および Sun WBEM SDK のグラフィックスファイルが含まれている |
オプションのパッケージ |
||
パッケージ名 |
項目名 |
説明 |
SUNWwbdoc |
Solaris WBEM Services - ドキュメント |
Sun WBEM SDK と Solaris WBEM Services をサポートするこのマニュアルが含まれている。このパッケージは Solaris WBEM Services で提供されるが、一方の製品をサポートするためにオプションでインストールすることもできる |
ローカライズされたパッケージ |
||
パッケージ名 |
項目名 |
説明 |
SUNWjwbd |
Sun WBEM SDK 日本語版 |
Sun WBEM SDK の日本語化されたバージョン |
SUNWjewbi |
Solaris WBEM Service Documentation 日本語版 |
Sun WBEM SDK と Solaris WBEM Service をサポートするこのマニュアルの日本語版 |
次のコマンドを入力して、システム上でスーパーユーザーになります。
% su |
メッセージに従い、スーパーユーザーのパスワードを入力します。
作業環境内で、パッケージが入っている位置にディレクトリを変更します。
システムプロンプトで、次のコマンドを入力してパッケージリストを表示します。
# pkgadd -d . |
パッケージリストが表示され、1 つまたはすべてのパッケージを選択するように指示するメッセージが表示されます。
インストールするパッケージ番号を入力します。
ほかのパッケージは Sun WBEM API に依存するため、最初に SUNWwbapi パッケージ (Sun WBEM API) をインストールしてください。
各パッケージのインストールが進行している間、その内容が表示されます。各パッケージのインストールが完了すると、次のメッセージが表示されます。 Installation of package_name was successful.
すべてのパッケージのインストールが終了した時点で、q と入力してパッケージのインストールルーチンを閉じます。
システムプロンプトで exit と入力して、スーパーユーザーとしてのログインを終了します。
Sun WBEM SDK のインストールが終わると、各製品コンポーネントを使用できます。次に、日常よく行う作業を示します。
コンピュータから Sun WBEM SDK のアンインストールを行うには、パッケージの削除を行います。 Sun WBEM SDK パッケージを削除しても、インストールされているすべてのファイルが削除されるわけではありません。たとえば、Solaris WBEM Services がインストールされている場合、この製品の関連パッケージは削除されません。Solaris WBEM Services のアンインストールについては、第 10 章「Solaris WBEM Services のインストール」を参照してください。
Sun WBEM SDK と Solaris WBEM Services の両方を削除しても、LDAP スキーマとデータファイルはインストールされたまま残ります。これらのファイルとファイルを含んでいるサブディレクトリは、パス /opt/SUNWconn/ldap から削除できます。しかし、LDAP データを削除すると、LDAP データを必要とするほかのアプリケーションでエラーが発生する可能性があります。LDAP データを削除したあとで Sun WBEM SDK または Solaris WBEM Services を再度インストールする場合は、LDAP データをインストールし直す必要があります。
次のコマンドを入力して、システム上でスーパーユーザーになります。
% su |
パスワードのプロンプトで、スーパーユーザーのパスワードを入力します。
システムプロンプトで、次のコマンドを入力してパッケージを削除します。
# pkgrm package_name |
package_name には、削除したいパッケージの名前を入力します。
次に示す確認メッセージが表示されたら、y と入力します。 "Do you want to remove this package?"
SUNWwbdev
SUNWwbdoc
SUNWwbapi パッケージは必ず最後に削除してください。これは、ほかのパッケージが SUNWwbapi パッケージに依存しているためです。
パッケージの削除が正常に行われると、次のメッセージが表示されます。
Removal of package_name was successful |
システムプロンプトで pkgrm コマンドを入力して各パッケージを削除します。
パッケージの削除が終了したら、exit と入力してスーパーユーザーを終了し、システムプロンプトに戻ります。
この章では、MOF コンパイラ の概要と使用方法について説明します。内容は次のとおりです。
MOF コンパイラ は、Managed Object Format で作成されたファイルを解析、ファイルを Java クラスに変換、抽出化されたクラスとインスタンスを CIM Repository に格納、などの処理を行います。
MOF コンパイラは、インストール時に SUNWwbcor パッケージから提供されます。インストールが終わると、/opt/SUNWconn/wbem/bin/ に置かれます。
mofcomp コマンドは、次のコマンド行パラメータを使用します。
パラメータ |
説明 |
-help |
マニュアルページを開き、MOF コンパイラのコマンドとパラメータの情報を表示する |
-version |
MOF コンパイラのビルドバージョンを表示する |
-v または -verbose |
冗長モード (ファイルコンパイル時にコンパイラメッセージを表示するモード) を有効にする |
-c cimom_host |
CIM Object Manager を実行しているホストコンピュータの名前を指定する |
-u |
ユーザー名とパスワードの認証で保護されたファイルをコンパイルする場合にユーザー名を指定する |
-p |
ユーザー名とパスワードの認証で保護されたファイルをコンパイルする場合にパスワードを指定する |
% mofcomp filename. mof |
mofcomp は、MOF コンパイラを実行するコマンドです。filename.mof は、コンパイルされる MOF ファイル名です。
-p パラメータまたは -u と -p パラメータを使用してコマンドを実行しパスワードを指定すると、別のユーザーが ps コマンドまたは history コマンドを実行してそのパスワードを見つけ出せる状態になります。
パスワード入力が必要なコマンドを実行する場合は、そのコマンドを実行したあとですぐにパスワードを変更してください。
次に、-p パラメータを指定した mofcomp コマンドの例を示します。
mofcomp -p Log8Rif |
mofcomp -u molly -p Log8Rif |
パスワードを入力するオプションを使用して mofcomp コマンドを実行した場合は、必ずすぐにパスワードを変更してください。
MOF コンパイラを使用すると、すべての MOF ファイル (拡張子 .mof を持つ MOF ファイルおよび .mof を持たない MOF ファイル) をコンパイルできます。MOF コンパイラは、ファイルをコンパイルしたい任意のディレクトリで起動できます。CIM スキーマと Solaris スキーマを構成する MOF ファイルはすべて、パス /opt/SUNWconn/wbem/schema に入っています。
MOF コンパイラが置かれている位置にディレクトリを変更します。
% cd /opt/SUNWconn/wbem/bin/ |
パラメータを指定せずに MOF コンパイラ を実行するには、次のコマンドを入力します。
% mofcomp filename |
プロンプトで、コンパイルする MOF ファイルのパスと名前を入力します 。
(例: /opt/SUNWconn/wbem/schema/Solaris_Schema1.0.mof)。
指定した MOF ファイルがコンパイルされます。
次に、ファイルのコンパイルが終了したあとの MOF の出力例を示します。
Initializing CIMValue Parsing input file Parsing input file Parsed input file MofcBackend: NamespaceTable: {}End of NamespaceTable QualifierTypesTable: {}End of QualifierTypesTable Syntax Errors: 0 Semantic Errors: 0 Warnings: 0 End of MofcBackend |
この章では、CIM WorkShop を使用して、作成したクラスとインスタンスに新しいプロパティ、メソッド、修飾子を追加する方法、およびそれらの修飾子のスコープとフレーバを設定する方法について説明します。この章の内容は、次のとおりです。
CIM WorkShop は、クラスとインスタンスの表示と作成が行える GUI を提供します。CIM WorkShop で行える作業を次に示します。
ネームスペースの表示と選択
ネームスペースの追加
クラスの表示と作成
新しいクラスへのプロパティ、修飾子、およびメソッドの追加
インスタンスの表示と作成
インスタンス値の表示と変更
CIM スキーマクラスまたは Solaris スキーマクラスの既存のプロパティ、メソッド、または修飾子の変更 (編集) は、CIM ガイドラインによって禁止されています。しかし、クラスとクラスのインスタンスを新たに作成することはできます。新しいクラスまたはインスタンスを作成すると、プロパティ、メソッド、または修飾子の追加または削除が行えます。また、新しいクラス、インスタンス、プロパティ、またはメソッドに対して作成した新しい修飾子の値 (スコープやフレーバ) も変更できます。継承されたプロパティ、メソッド、および修飾子の値は変更できません。
CIM WorkShop は Sun WBEM SDK に含まれています。
CIM WorkShop を実行するには、CIM Object Manager がサーバー側にインストールされている必要があります。Solaris オペレーティング環境に Solaris WBEM Services と Sun WBEM SDK をインストールしているときは、CIM Object Manager はローカルホストで動作します。Sun WBEM SDK だけをインストールする場合は、CIM Object Manager がすでに起動しているホストを指定する必要があります。この情報は、CIM WorkShop の起動時に表示される「ログイン (Login)」ダイアログボックスの「ホスト (Host)」フィールドに入力できます。CIM WorkShop の各ダイアログボックスとフィールドの詳細は、「参照:「CIM WorkShop」ウィンドウとダイアログ」を参照してください。
Solaris WBEM Services と Sun WBEM SDK を Solaris オペレーティング環境にインストールした場合は、システムプロンプトで次のコマンドを入力します。
% /opt/SUNWconn/wbem/bin/cimworkshop & |
Sun WBEM SDK を Microsoft Windows 環境にインストールした場合は、「スタート (Start)」、「プログラム (Program)」、「WBEM SDK」、「CIM Workshop」の順にクリックします。
「CIM WorkShop」ウィンドウが表示され、続いて「ログイン (Login)」ダイアログボックスが表示されます。「ログイン (Login)」ダイアログボックスには、CIM Workshop がインストールされているホストコンピュータの名前、デフォルトネームスペースのパス root¥cimv2 が表示されます。「ログイン (Login)」ダイアログボックスの右側には、コンテキストヘルプとしてこのダイアログボックスの指定方法が表示されます。フィールドをクリックすると、コンテキストヘルプの内容が変わり、そのフィールドへの情報の入力方法とフィールドの意味が表示されます。
CIM WorkShop の「ログイン (Login)」ダイアログボックスで、次の操作を行います。
「ホスト名 (Host Name)」フィールドで、CIM Object Manager を実行しているホスト名を入力します。
デフォルトでは、CIM WorkShop はローカルホストのデフォルトネームスペース root¥cimv2 で動作している CIM Object Manager に接続します。Solaris オペレーティング環境または Microsoft Windows 環境で WBEM SDK の一部として CIM WorkShop を起動する場合には、すでに CIM Object Manager を実行しているホスト名を指定する必要があります。
「ネームスペース (Namespace)」フィールド内をクリックして使用するネームスペース名を入力するか、あるいはデフォルトのネームスペース名のままにしておきます。
「ユーザー名 (User Name)」フィールドで、システム権限とネットワーキング権限を実行する場合に通常使用しているユーザー名を入力します。
「パスワード (Password)」フィールドで、システム権限とネットワーキング権限を実行する場合に通常使用しているパスワードを入力します。
ユーザー名とパスワードを指定しない場合は、デフォルトのユーザーアカウント guest を使用してログインできます。この場合許可されるのは読み取り権だけです。CIM Object Manager の管理者は、ユーザー名とパスワードに対応した書き込み権を設定できます。
「了解 (OK)」をクリックします。
クラス継承ツリー内のクラスが列挙されていることを示すメッセージが表示されます。「CIM WorkShop」ウィンドウの左側には、CIM クラスが表示されます。
CIM WorkShop を起動すると、「CIM WorkShop」ウィンドウの左側に CIM スキーマのクラスが階層的に表示されます。このクラス配置を、クラス継承ツリーと呼びます。クラスを選択すると、そのクラスに対応するプロパティが、ウィンドウの右側に表示されます。 次の図では、クラス solaris_computersystem のプロパティが 「CIM WorkShop」ウィンドウの右側に表示されています。
「CIM WorkShop」ウィンドウのツールバー、メニュー、およびレイアウトの詳細は、「参照:「CIM WorkShop」ウィンドウとダイアログ」を参照してください。
サブクラスを持つ各クラスは、2 つのアイコン (フォルダアイコンとイネーブラアイコン) によって示されます。イネーブラアイコンは、フォルダアイコンの左にある鍵の形をしたアイコンです。
フォルダアイコンは、そのクラスがそのサブクラスのコンテナになっていることを示します。イネーブラアイコンを使用すると、移動が簡単になります。
イネーブラアイコンが水平に表示されている場合、そのクラスフォルダは閉じており、サブクラスが入っています。水平のイネーブラアイコンをクリックすると、クラスフォルダが開かれ、サブクラスが表示されます。そして、イネーブラアイコンは垂直に表示され、クラスフォルダが開かれていることを示します。
クラスに含まれているものを表示するには、そのクラスのイネーブラアイコンをクリックします。
クラスのクラスフォルダアイコンをクリックします。
「CIM WorkShop」ウィンドウの右側のフレームに、クラスのプロパティとメソッドが表示されます。
CIM WorkShop では、特定のクラスをすばやく検索できます。
ツールバーで、「クラスを検索 (Find Class)」アイコンをクリックします。
「クラスを検索 (Find Class)」ダイアログボックスで、検索したいクラス名を入力して「了解 (OK)」をクリックします。
指定したクラスが見つかると、「CIM WorkShop」ウィンドウの右側のフレームにその詳細が表示されます。
クラス継承ツリーでフォルダアイコンをクリックしてクラスを選択すると、「CIM WorkShop」ウィンドウの右側にクラスのプロパティとメソッドを示す 2 つのタブが表示されます。
クラス継承ツリー内では、サブクラスが入ったクラスはフォルダアイコンで示されます。サブクラスを含まないクラスは、紫色の四角形で示されます。クラスを選択するには、クラス継承ツリー内でクラスのフォルダまたはページアイコンをクリックします。
デフォルトでは、「CIM WorkShop」ウィンドウが表示される時に、「CIM WorkShop」ウィンドウの右側に「プロパティ (Properties)」タブが表示されます。「CIM WorkShop」ウィンドウの左側でクラス継承ツリーからクラスを選択すると、そのクラスのすべてのプロパティが「プロパティ (Properties)」タブに表示されます。継承されたプロパティは、紫色の四角形、白い四角形、および白い四角形を指す黒い矢印から構成されるアイコンによって示されます。キー修飾子が割り当てられたプロパティは、金色の鍵の形をしたアイコンによって示されます。「プロパティ (Properties)」タブでプロパティがどのように表示されるかについては、「参照:「CIM WorkShop」ウィンドウとダイアログ」の「プロパティ(Properties)」タブ」を参照してください。
クラス継承ツリーでクラスを選択したあと、「メソッド (Methods)」タブをクリックしてそのクラスに関連付けられたメソッドを表示できます。「メソッド (Methods)」タブでメソッドがどのように表示されるかについては、「メソッド (Method)タブ」を参照してください。
CIM では、修飾子は、クラス、インスタンス、プロパティ、およびメソッドの属性を意味します。CIM Workshop では、クラス、プロパティ、またはメソッドでマウスの右ボタンをクリックしてポップアップメニューを表示させ、「修飾子 (Qualifiers)」を選ぶことにより修飾子を表示できます。「修飾子 (Qualifiers)」をクリックすると、「修飾子 (Qualifiers)」ダイアログボックスが表示されます。「修飾子 (Qualifiers)」ダイアログボックスにおける修飾子情報の詳細は、「「修飾子 (Qualifiers)」ダイアログボックス」を参照してください。
「修飾子 (Qualifiers)」ダイアログボックスの「スコープ (Scope)」ボタンをクリックすると、「スコープ (Scope)」ダイアログボックスが表示されます。スコープダイアログボックスでは、修飾子のスコープが見れます。新しいクラスに修飾子を作成する場合には、「スコープ (Scope)」ダイアログボックスで新しい修飾子のスコープも設定できます。「スコープ (Scope)」ダイアログボックスの詳細は、「参照:「CIM WorkShop」ウィンドウとダイアログ」を参照してください。
「修飾子 (Qualifiers)」ダイアログボックスで「フレーバ (Flavor)」ボタンをクリックすると、「フレーバ (Flavors)」ダイアログボックスが表示されます。「フレーバ (Flavors)」ダイアログボックスでは、修飾子のフレーバを表示できます。新しいクラスに修飾子を作成する場合には、「フレーバ (Flavor)」ダイアログボックスで新しい修飾子のフレーバも設定できます。「フレーバ (Flavors)」ダイアログボックスの詳細は、「「フレーバ (Flavors)」ダイアログボックス」を参照してください。
ネームスペースは、管理対象オブジェクトを抽象化した論理的なエンティティです。ここには、クラスとインスタンスが格納されます。ネームスペースは、ディレクトリ構造、データベース、フォルダなどのさまざまな形式で実装できます。デフォルトでは、CIM WorkShop は、ローカルホストのデフォルトネームスペース root¥cimv2 で動作している CIM Object Manager に接続します。デフォルトネームスペースに含まれるクラスはすべて、「CIM WorkShop」ウィンドウの左側に表示されます。現在のネームスペース名は、「CIM WorkShop」ウィンドウのツールバーに表示されます。CIM WorkShop では、個々のホストに存在するネームスペースのクラスを表示し、別のネームスペースに位置を変更できます。
特定のネームスペースにユーザー権限を設定する場合は、Sun WBEM User Manager を使用します。Sun WBEM User Manager ツールの詳細は、第 12 章「セキュリティの管理」、「Sun WBEM User Manager によるアクセス制御の設定」を参照してください。
ネームスペースを変更する
ホストを変更する
ネームスペースのクラス継承ツリーを再表示する
Sun WBEM SDK ではデフォルトのネームスペースとして root¥cimv2 が設定されていますが、ほかのネームスペースをデフォルトとして使用するように変更できます。
「CIM WorkShop」ウィンドウで、「ワークショップ (Workshop)」、「ネームスペースを変更 (Change Namespace)」の順にクリックします。
「ネームスペースを変更 (Change Namespace)」ダイアログボックスで、使用したいネームスペースのアイコンをクリックします。「了解 (OK)」をクリックします。
選択したネームスペースが、現在のネームスペースになります。
ネームスペースまたはプロセスを表示するホストを変更できます。
「ワークショップ (Workshop)」、「ホストを変更 (Change Host)」の順にクリックするか、「CIM WorkShop」ツールバーの「ホストを変更 (Change Hosts)」アイコンをクリックします。
「ホスト (Hosts)」フィールドで、表示したいネームスペースが入っているホスト名を入力します。
「ユーザ名 (User Name)」フィールドに自分のユーザー名を入力し、「パスワード (Password)」フィールドにパスワードを入力します。
「了解 (OK)」をクリックします。
ネームスペース内のクラス継承ツリーを再表示して、そのネームスペースで作業を行なっているほかのユーザーが加えた変更を反映させることができます。
クラス継承ツリー内で、再表示したいクラスのフォルダをクリックします。
「アクション (Action)」、「再表示 (Refresh)」の順にクリックするか、「CIM WorkShop」ツールバーの「選択したクラスを再表示 (Refresh Selected Class)」アイコンをクリックします。
クラスは、アプリケーションの基礎となるものです。CIM WorkShop は、起動時に CIM スキーマと Solaris スキーマを構成するクラスを読み込みます。これらのクラスは、Distributed Management Task Force に準拠しています。これらのクラスの固有のプロパティ、メソッド、および修飾子の値は変更できません。
既存のクラスに新しい値を設定するには、そのクラスに新しいインスタンスまたはクラスを作成します。CIM スキーマと Solaris スキーマのクラスは、テンプレートとして機能します。新しいインスタンスまたはクラスを作成するには、それらのプロパティ、メソッド、および修飾子の値を追加できるように、選択したクラスのコピーを作成します。このような方法で、CIM スキーマまたは Solaris スキーマを独自に拡張することができます。
継承されたプロパティ、メソッド、および修飾子の値は変更できません。
クラスのインスタンスを作成する方法については、「インスタンスの処理」を参照してください。新しいクラスの作成方法については、以下の節を参照してください。
既存のクラスを選択する
新しいクラスを作成する
クラスに新しい修飾子を追加する
クラスに新しいプロパティを追加する
プロパティに新しい修飾子を追加する
クラスに新しいメソッドを追加する
メソッドに新しい修飾子を追加する
修飾子の値 (スコープとフレーバ) を設定する
あるクラスに新しいサブクラスを作成するには、まずその既存のクラス名を指定します。CIM WorkShop では、クラス名は標準の CIM 構文 SchemaIndicator_ClassName で表示されます。CIM スキーマクラスに新しくクラスを作成する場合、クラス名の前に頭字語 CIM を使用します。Solaris スキーマクラスにクラスを作成する場合、クラス名の前に Solaris を使用します。キー修飾子を継承するクラスの名前には、下線 (_) を指定する必要があります。
「CIM WorkShop」ウィンドウのクラス継承ツリーで、新しくクラスを作成する既存のクラスを選択します。
クラスを作成するには、次の操作のどれかを行います。
「アクション (Action)」、「クラスを追加 (Add Class)」の順にクリックする
「CIM WorkShop」ウィンドウでツールバーの「新規クラス (New Class)」アイコンをクリックする
選択したクラス上で右ボタンをクリックし、「クラスを追加 (Add Class)」を選択する
「新規クラス (New Class)」ダイアログボックスが表示されます。
「クラス名 (Class Name)」フィールドで、新しいクラス名を入力します。
たとえば、クラス solaris_computersystem に ultra1_computersystem という名前のクラスを作成できます。
クラスから継承されたプロパティとメソッドをそのまま使用するには、「了解 (OK)」をクリックします。新しいプロパティを追加するには、「プロパティを追加 (Add Property)」をクリックします。
「了解 (OK)」をクリックすると、継承されたプロパティ、メソッド、修飾子、およびそれらの値を使用するクラスが作成されます。「プロパティを追加 (Add Property)」をクリックすると、「プロパティを追加 (Add Properties)」ダイアログボックスが表示されます。このダイアログボックスで新しいクラスに追加するプロパティを指定できます。プロパティの追加方法については、「クラスへの新しいプロパティの追加」を参照してください。
新しく作成したクラスには修飾子を追加できます。クラスを変更する継承されたクラスの修飾子の値は、変更も取り消しもできません。また、継承された修飾子を削除することもできません。
「新規クラス (New Class)」ダイアログボックスで、新しいクラス名を指定し、「クラス修飾子 (Class Qualifiers)」をクリックします。
「修飾子 (Qualifiers)」ダイアログボックスで、新しい値を設定したい修飾子を右ボタンでクリックし、「修飾子の追加 (Add Qualifier)」を選択します。
「修飾子の追加 (Add Qualifier)」ダイアログボックスで、リストから修飾子の名前を選択して「了解 (OK)」をクリックします。
修飾子のスコープを設定するには、次の操作を行います。
修飾子のフレーバを設定するには、次の操作を行います。
「修飾子 (Qualifiers)」ダイアログボックスで「了解 (OK)」をクリックし、このダイアログボックスを閉じます。
クラスに新しいプロパティを追加し、それらの値を変更できます。継承されたプロパティの値は変更できません。また、継承されたプロパティは削除できません。
新しいクラス名を指定したあと、「新規クラス (New Class)」ダイアログボックスで「プロパティを追加 (Add Property)」をクリックします。
「プロパティを追加 (Add Properties)」ダイアログボックスが表示されます。
「名前 (Name)」フィールドで、新しいプロパティ名を入力します。
「タイプ (Type)」フィールドでプロパティのデータ型を選択し、「了解 (OK)」をクリックします。
「新規クラス (New Class)」ダイアログボックスの「プロパティ (Properties)」タブに新しいプロパティが表示されます。プロパティリストが長い場合は、スクロールバーをクリックして新しく追加したプロパティを表示できます。
「新規クラス (New Class)」ダイアログボックスで「了解 (OK)」をクリックします。
新しいプロパティまたはクラスに新しい修飾子を追加する方法、および修飾子の値を設定する方法については、以下の節を参照してください。
クラスに新たに作成したプロパティには、修飾子の値も設定できます。継承されたプロパティまたはメソッドの修飾子の値は、変更も取り消しも行えません。また、継承された修飾子を削除することはできません。
「新規クラス (New Class)」ダイアログボックスで、作成した新しいプロパティをクリックし、「プロパティ修飾子 (Property Qualifiers)」をクリックします。
作成したプロパティの「修飾子 (Qualifiers)」ダイアログボックスが表示されます。
「修飾子の追加 (Add Qualifier)」をクリックします。
「修飾子の追加 (Add Qualifier)」ダイアログボックスの「名前 (Name)」フィールドで、修飾子を選択して「了解 (OK)」をクリックします。
「修飾子 (Qualifiers)」ダイアログボックスと「新規クラス (New Class)」ダイアログボックスで、「了解 (OK)」をクリックします。
選択したプロパティに修飾子と修飾子のデータ型が設定されます。
CIM WorkShop では不要になったクラス、プロパティ、メソッド、および修飾子は削除できます。
クラスを削除すると、そのクラスに含まれるサブクラスがすべて削除されます。また、クラスとそのサブクラスに対応するプロパティ、メソッド、および修飾子もすべて削除されます。
クラス継承ツリーからクラスを削除するには、次のようにします。
削除したいクラスを選択します。
「クラス (Classes)」、「クラスを削除 (Delete Class)」の順にクリックし、クラスを削除してもいいかの確認を求めるダイアログボックスで「了解 (OK)」をクリックします。
選択したクラスが削除されます。
プロパティは、新しいクラスを作成した場合にだけ削除できます。既存のクラスのプロパティは、表示はできますが、変更と削除はできません。新しいクラスを作成した場合、親クラスから継承したプロパティは不要になった時点で削除できます。クラスの作成方法については、「クラスの追加」を参照してください。
「新規クラス (New Class)」ダイアログボックスの「プロパティ (Properties)」タブで、削除したいプロパティをマウスの右ボタンでクリックします。
ポップアップメニューで「プロパティを削除 (Delete Property)」をクリックします。
選択したプロパティが「プロパティ (Properties)」タグから削除されます。
新しいクラスを作成した場合は、親クラスから継承されたプロパティ修飾子またはメソッド修飾子を削除できます。クラスの作成方法については、「クラスの追加」を参照してください。
「新規クラス (New Class)」ダイアログボックスの「プロパティ (Properties)」タブで、削除したいプロパティを右ボタンでクリックします。
ポップアップメニューで「修飾子 (Qualifiers)」をクリックします。
「修飾子 (Qualifiers)」ダイアログボックスで、「修飾子を削除 (Delete Qualifier)」をクリックし、続いて「了解 (OK)」をクリックします。
選択した修飾子が削除され、「新規クラス (New Class)」ダイアログボックスが表示されます。
「新規クラス (New Class)」 ダイアログボックスの「メソッド (Methods)」タブで、削除したいメソッドを右ボタンでクリックします。
ポップアップメニューで「修飾子 (Qualifiers)」をクリックします。
「修飾子 (Qualifiers)」 ダイアログボックスで、「修飾子の削除 (Delete Qualifier)」をクリックし、続いて「了解 (OK)」をクリックします。
選択した修飾子が削除され、「新規クラス (New Class)」 ダイアログボックスが表示されます。
CIM WorkShop ではクラスのインスタンスを作成できます。 インスタンスは、クラスの特性を継承します。続いて、新しいインスタンスの属性を変更して、固有のクラスインスタンスを作成できます。
新しいクラスインスタンスを作成する前に、既存のクラスインスタンスを表示してそれらに含まれるプロパティとメソッドを確認しておくことをお勧めします。
「CIM WorkShop」ウィンドウのクラス継承ツリーで、インスタンスを表示したいクラスを選択します。
次のどちらかの操作を行い、「インスタンス (Instances)」ウィンドウを表示します。
「アクション (Action)」、「インスタンス (Instances)」の順にクリックする
または
「CIM WorkShop」ツールバーの「インスタンスを表示 (Show Instances)」アイコンをクリックする
「インスタンス (Instances)」ウィンドウが表示されます。選択したクラスにインスタンスが含まれている場合、「インスタンス (Instances)」ウィンドウの左側のフレームにそれらのインスタンスが表示されます。インスタンスが含まれていない場合、このフレームには何も表示されません。
継承されたオブジェクト修飾子を変更したい場合は、クラスにインスタンスを追加します。
「CIM WorkShop」ウィンドウで、次のどちらかの操作を行います。
「アクション (Action)」、「インスタンス (Instances)」の順にクリックする
または
インスタンスが存在するクラス (新しいインスタンスを登録できるクラス) を右ボタンでクリックし、ポップアップメニューで「インスタンス (Instances)」をクリックする
「インスタンス (Instances)」ウィンドウが表示され、クラスのすべてのインスタンスが左側のフレームに表示されます。
「インスタンス (Instances)」ウィンドウに表示されたインスタンスの 1 つで右ボタンをクリックします。
「インスタンスを追加 (Add Instances)」ダイアログボックスが表示されます。
継承されたインスタンスプロパティを変更するには、次のようにします。
「了解 (OK)」をクリックして、「インスタンスを追加 (Add Instances)」ウィンドウを閉じます。
不要になったインスタンスは削除できます。
「CIM WorkShop」ウィンドウの左側のフレームで、削除したいインスタンスが入っているクラスを右ボタンでクリックします。
ポップアップメニューで「インスタンス (Instance)」をクリックします。
「インスタンス (Instance)」ウィンドウで、削除したいインスタンスを右ボタンでクリックし、ポップアップメニューの「インスタンスの削除 (Delete Instance)」をクリックします。
選択したインスタンスが削除されます。
次の節では、「CIM WorkShop」ウィンドウを構成するフレーム、ツールバーアイコン、およびフィールドについて説明します。また、CIM WorkShop のダイアログボックスについても説明します。
「CIM WorkShop」ウィンドウは、2 つのフレームに分かれています。左側のフレームには、現在のホストのクラス継承ツリーが表示されます。右側のフレームには、選択されているクラスのプロパティとメソッドが表示されます。
フレーム |
説明 |
---|---|
左側のフレーム |
現在のホストのネームスペースに含まれるクラスとインスタンスを表示する。CIM WorkShop の左側のフレームには、選択したネームスペースのコンテンツを表示する。ネームスペースに含まれるクラスは、階層的に表示される。このクラス編成を、クラス継承ツリーと呼ぶ。サブクラスを含むクラスは、キーアイコンとフォルダとして示される。キーをクリックするか、フォルダをダブルクリックすると、サブクラスリストが表示される。サブクラスを含まないクラスは、ページアイコンとして示される |
右側のフレーム |
クラスのプロパティの値を表示できる「プロパティ (Properties)」タブと、メソッドの値を表示できる「メソッド (Methods)」タブが入っている。プロパティまたはメソッドを右クリックすると、修飾子とフレーバの属性と値を表示できる |
ツールバー |
ホストの変更、デフォルトネームスペース ¥root¥cimv2 内の別のネームスペースへの位置の変更、クラス継承ツリー内でのクラスの検索、サブクラスの作成、選択したクラスのインスタンスと修飾子の表示などの作業を行うアイコンを表示する |
タイトルバー |
「CIM WorkShop」ウィンドウのタイトルを表示する |
「CIM WorkShop」ツールバー上のアイコンは、ネームスペースの表示と変更、およびクラスとインスタンスの検索に使用します。
アイコン |
説明 |
---|---|
ホストを変更 |
別のホストまたはネームスペースに接続し、別のユーザー名とパスワードでログインする |
ネームスペースを変更 |
「ネームスペースを変更 (Change Name Space)」ダイアログボックスを呼び出し、表示するネームスペースを変更する |
クラスを検索 |
ネームスペース内で特定のクラスを検索する |
新規クラス |
「新規クラス (New Class)」ダイアログボックスを表示し、選択されているクラスの新しいサブクラスを作成する |
インスタンスを表示 |
「インスタンスを表示 (Show Instances) ダイアログボッスを表示し、選択したクラスのインスタンスを表示する |
修飾子を表示 |
「修飾子 (Qualifiers)」ダイアログボックスを表示し、選択したクラスの修飾子を表示する |
選択したクラスを再表示 |
クラス階層ツリーの表示をリセットする。開かれているクラスフォルダが閉じられ、ツリーは最初に表示された時の状態に戻る |
「プロパティ (Properties)」タブは、選択したプロパティの情報を表示します。矢印付きのフォルダの形をしたアイコンは、そのプロパティがスーパークラスから継承されたものであることを示します。金色の鍵のアイコンは、そのプロパティがキーであることを示します。キープロパティは、ドメインクラスのインスタンスに固有の識別子を提供します。固有のインスタンスは、キー修飾子によって示されます。
「プロパティ (Properties)」タブでは、プロパティの名前とデータ型が表示されます。ドメインクラスに新しいクラスを作成する場合は、プロパティの値を変更できます。
「メソッド (Methods)」タブを選択すると、そのクラスのすべてのメソッドを表示できます。メソッドは、連続的に表示されます。次に、画面の左から順に表示される、各メソッドの属性を示します。
表 4-3 「メソッド」タブの属性
メソッドの属性 |
説明 |
例 |
---|---|---|
名前 |
メソッドに指定した名前 | GetDateTime |
値 |
メソッドに指定した値 |
NULL |
タイプ |
メソッドの種類 |
文字列 |
修飾子フレーバ |
メソッドに割り当てた修飾子のフレーバ |
TRANSLATABLE |
説明 |
CIM の日時形式で現在のシステムの日時を返す文字列 |
19990519142015.0000000-300 |
次の表は、CIM WorkShop のメニューとメニュー項目について説明しています。
表 4-4 CIM WorkShop のメニューとメニュー項目
メニュー |
メニュー項目 |
説明 |
---|---|---|
Workshop |
ホストを変更 (Change Host) |
「ホストを変更 (Change Host )」ダイアログボックスを表示し、別の CIM Object Manager の入ったホストに接続する |
ネームスペースを変更 (Change Namespace) |
「ネームスペースを変更 (Change Namespace)」ダイアログボックスを表示し、デフォルトネームスペース ¥root¥cimv2 内の別のネームスペースに位置を変更する |
|
終了 (Exit) |
CIM WorkShop を終了する |
|
アクション (Action) |
クラスを追加 (Add Class) |
「新規クラス (New Class)」ダイアログボックスを表示し、選択されているクラスのサブクラスを作成する |
クラスを削除 (Delete Class) |
選択されているクラスを削除する |
|
クラスを検索 (Find Class) |
クラス継承ツリー内で検索するクラスを指定する |
|
インスタンス (Instances) |
選択したクラスの「インスタンス (Instances)」ダイアログボックスを表示する。このダイアログボックスでは、クラスに含まれるすべてのインスタンスの表示、新しいインスタンスの追加、およびインスタンスの削除が行える |
|
修飾子 (Qualifiers) |
「修飾子 (Qualifiers)」ダイアログボックスを表示する。このダイアログボックスでは、選択したクラスの修飾子の値、スコープ、およびフレーバを表示する |
|
再表示 (Refresh) |
CIM Work Shop に加えた最新の変更を元に戻し、選択されたクラスまたはネームスペースを表示する |
「ログイン (Login)」ダイアログボックスは、CIM WorkShop の起動時に表示されます。「ログイン (Login)」ダイアログボックスでは、次のパラメータを指定します。
CIM Object Manager が動作しており、使用したいネームスペースが入っているホスト
作業を行うネームスペース
ユーザー名
パスワード
ユーザー名とパスワードを指定しない場合は、CIM にゲストとしてログインすることになります。この場合許可されるのは読み取り権だけです。
「新規クラス (New Class)」ダイアログボックスでは、クラスに新しいクラスを作成できます。
「プロパティを追加 (Add Properties)」ダイアログボックスでは、作成したクラスに新しいプロパティを追加できます。「名前 (Name)」フィールドでは、プロパティ名を指定します。「タイプ (Type)」フィールドでは、データ型を選択して「了解 (OK)」をクリックします。
「修飾子 (Qualifiers)」ダイアログボックスでは、選択されているクラス、プロパティ、メソッドの修飾子を表示できます。新しいクラスを作成する場合は、このダイアログボックスでクラスへの修飾子の追加、およびクラス、そのプロパティ、またはそのメソッドの修飾子の変更が行えます。「修飾子 (Qualifiers)」ダイアログボックスのタイトルバーには、修飾子を表示しているクラス名、または修飾子の追加または変更を行うクラス名が表示されます。
次の表は、「修飾子 (Qualifiers)」ダイアログボックスの各フィールドについて説明しています。
表 4-5 「修飾子(Qualifiers)」ダイアログボックスのフィールド
フィールド名 |
説明 |
例 |
---|---|---|
名前 (Name) |
修飾子の名前を表示する |
プロバイダ |
タイプ (Type) |
修飾子が提供する値のデータ型を示す |
string |
値 (Value) |
修飾子の値を表示する |
Solaris |
次の表は、「修飾子 (Qualifiers)」ダイアログボックスのボタンについて説明しています。
表 4-6 「修飾子 (Qualifiers)」ダイアログボックスのボタン
ボタン名 |
説明 |
スコープ (Scope) |
「スコープ (Scope)」ダイアログボックスを表示し、選択されている修飾子のスコープを表示する |
フレーバ (Flavors) |
「フレーバ (Flavors)」ダイアログボックスを表示し、選択されている修飾子のフレーバを表示する |
修飾子を追加 (Add Qualifier) |
「修飾子を追加 (Add Qualifier)」ダイアログボックスを表示し、新しいサブクラス、プロパティ、またはメソッドに追加できる修飾子を選択する |
修飾子を削除 (Delete Qualifier) |
選択されている修飾子を「修飾子 (Qualifiers)」ダイアログボックスから削除する |
「スコープ (Scope)」ダイアログボックスでは、既存のクラス、プロパティ、またはメソッドを変更する修飾子のスコープを表示できます。また、新しいクラス、あるいは新しいクラスに追加されるプロパティまたはメソッドに対して作成される修飾子のスコープを変更することもできます。「スコープ (Scope)」フィールドには、選択できるすべてのスコープが表示されます。
「フレーバ (Flavors)」ダイアログボックスでは、修飾子のフレーバを表示できます。また、新しいクラス、あるいは新しいクラスに追加されるプロパティまたはメソッドに対して作成される修飾子のフレーバを変更することもできます。「フレーバ (Flavors)」フィールドには、選択できるすべてのフレーバが表示されます。
クラスに新しいプロパティを作成する場合、CIM WorkShop に付属している任意のダイアログボックスを使用して、特定のデータ型のプロパティを指定できます。これらのダイアログボックスは、適切なデータ型の値だけを入力できるように設定されています。使用できるダイアログボックスを次に示します。
「実数型整数 (Real Integer)」ダイアログボックス
「符号付き整数 (Signed Integer)」ダイアログボックス
「符号なし整数 (Unsigned Integer)」ダイアログボックス
「文字列 (String)」ダイアログボックス
「配列 (Array)」ダイアログボックス
「ブール (Boolean)」ダイアログボックス
このダイアログボックスの「値 (Values)」フィールドには、実数型の整数だけを入力できます。実数型の整数は正、負のどちらでもよく、小数点も使用できます。データ型が実数型の整数のプロパティを作成する場合は、このダイアログボックスの「値 (Values)」フィールドに実数型の整数を入力してください。
このダイアログボックスの「値 (Values)」フィールドには、指定したサイズの符号付き整数だけを入力できます。符号付き整数は、正または負の整数です。符号付き整数である値を持つ CIM プロパティのサイズは、8 ビット、16 ビット、32 ビット、または 64 ビットです。プロパティの値を構成する符号付き整数のサイズに基づき、このダイアログボックスの「値 (Values)」フィールドに次の値を入力してください。
8 ビットの符号付き整数であるプロパティには、8 ビット相当の正または負の数値を入力する
16 ビットの符号付き整数であるプロパティには、16 ビット相当の正または負の数値を入力する
32 ビットの符号付き整数であるプロパティには、32 ビット相当の正または負の数値を入力する
64 ビットの符号付き整数であるプロパティには、64 ビット相当の正または負の数値を入力する
このダイアログボックスの「値 (Values)」フィールドには、指定したサイズの符号なし整数だけを入力できます。符号なし整数は正の整数です。符号なし整数である値を持つ CIM プロパティのサイズは、8 ビット、16 ビット、32 ビット、または 64 ビットです。プロパティの値を構成する符号なし整数のサイズに基づき、このダイアログボックスの「値 (Values)」フィールドに次の値を入力してください。
8 ビットの符号なし整数であるプロパティには、8 ビット相当の正の数値を入力する
16 ビットの符号なし整数であるプロパティには、16 ビット相当の正の数値を入力する
32 ビットの符号なし整数であるプロパティには、32 ビット相当の正の数値を入力する
64 ビットの符号なし整数であるプロパティには、64 ビット相当の正の数値を入力する
このダイアログボックスの「値 (Values)」フィールドには、英数字だけを入力できます。タイプが文字列であるプロパティの値を指定する場合は、このダイアログボックスの「値 (Values)」フィールドに文字列 (例: Processor_Type) を入力します。文字列には、整数は使用できません。
「配列 (Array)」ダイアログボックスには、プロパティの値として配列を指定できます。次に、配列を返すために使用できる「配列 (Array)」ダイアログボックスを示します。
「8 ビット符号なし整数配列 (8-Bit Unsigned Integer Array)」ダイアログボックス - サイズが 8 ビット相当の正の整数のコレクションを返す
「16 ビット符号なし整数配列 (16-Bit Unsigned Integer Array)」ダイアログボックス - サイズが 16 ビット相当の正の整数のコレクションを返す
「32 ビット符号なし整数配列 (32-Bit Unsigned Integer Array)」ダイアログボックス - サイズが 32 ビット相当の正の整数のコレクションを返す
「64 ビット符号なし整数配列 (64-Bit Unsigned Integer Array)」ダイアログボックス - サイズが 64 ビット相当の正の整数のコレクションを返す
「8 ビット符号付き整数配列 (8-Bit Signed Integer Array)」ダイアログボックス - サイズが 8 ビット相当の正または負の整数のコレクションを返す
「16 ビット符号付き整数配列 (16-Bit Signed Integer Array)」ダイアログボックス - サイズが 16 ビット相当の正または負の整数のコレクションを返す
「32 ビット符号付き整数配列 (32-Bit Signed Integer Array)」ダイアログボックス - サイズが 32 ビット相当の正または負の整数のコレクションを返す
「64 ビット符号付き整数配列 (64-Bit Signed Integer Array)」ダイアログボックス - サイズが 64 ビット相当の正または負の整数のコレクションを返す
「文字列配列 (String Array)」ダイアログボックス - 英字文字列と数字文字列のコレクションを返す
「ブール (Boolean Array)」ダイアログボックス - ブール式 (TRUE または FALSE) のコレクションを返す
「32 ビット実数配列 (32-Bit Real Array)」ダイアログボックス - サイズが 32 ビット相当の、小数点付きまたは小数点なしの正または負の実数のコレクションを返す
「64 ビット実数配列 (64-Bit Real Array)」ダイアログボックス - サイズが 64 ビット相当の、小数点付きまたは小数点なしの正または負の実数のコレクションを返す
「16 ビット文字配列 (16-Bit Character Array)」ダイアログボックス - サイズが 16 ビット相当の、英字文字列と数字文字列のコレクションを返す
「日付 / 時間配列(Date/Time Array)」ダイアログボックス - mm-dd-yy 形式による日付と、hh:mm:ss 形式による時間のコレクションを返す
「ブール (Boolean)」ダイアログボックスでは、選択したプロパティの値として TRUE または FALSE を指定できます。
「インスタンス (Instance)」ウィンドウには、選択したクラスのすべてのインスタンスが表示されます。また、各インスタンスに関連付けられたプロパティ、メソッド、および修飾子も表示できます。
「インスタンス (Instance)」ウィンドウは、次のどちらかの操作で表示します。
「CIM WorkShop」ウィンドウでクラスを選択し、「アクション (Action)」、「インスタンス (Instances)」の順にクリックする
「CIM WorkShop」ウィンドウでクラスを右ボタンでクリックし、ポップアップメニューの「インスタンス (Instances)」をクリックする
選択したクラスにインスタンスが含まれる場合、それらのインスタンスは「インスタンス (Instances)」ウィンドウの左側のフレームに表示されます。各インスタンスは、Name (名前)、CreationClassName (属するクラス名)、および TargetOperatingSystem (対象オペレーティングシステム) と共に表示されます。選択したクラスにインスタンスが含まれない場合、左側のフレームには何も表示されません。
「CIM WorkShop」ウィンドウと同様に、「インスタンス (Instances)」ウィンドウの右側のフレームには 2 つのタブ、「プロパティ (Properties)」タブと「メソッド (Methods)」タブがあります。選択したインスタンスのプロパティはすべて、「プロパティ (Properties)」タブの表に表示されます。この表の左端の列に現れる「継承プロパティ (Inherited Properties)」アイコン (紫色の四角形と、白い四角形を指す矢印から構成される) は、そのインスタンスの作成に使用されたクラスからプロパティが継承されたことを示します。金色の鍵の形をした「キー修飾子 (Key Qualifiers)」アイコンは、プロパティに継承されたキー修飾子が含まれていることを示します。
「インスタンス (Instances)」ウィンドウのツールバーには、次の表に示すアイコンが含まれます。
表 4-7 「インスタンス (Instances)」ウィンドウのツールバー上のアイコン
アイコン名 |
説明 |
新しいインスタンスを追加 |
「インスタンスを追加 (Add Instance)」ダイアログボックスを表示し、クラス継承ツリーに追加する新しいインスタンスを作成する |
選択したインスタンスを削除 |
選択したインスタンスを削除する |
インスタンスリストを更新 |
新たに作成したインスタンスとインスタンスに加えた最新の変更が反映されるように、「インスタンス (Instances)」ウィンドウの左側に表示されたインスタンスリストを更新する |
「インスタンス (Instances)」ウィンドウには、次のメニューとメニュー項目が含まれます。
表 4-8 「インスタンス (Instances)」ウィンドウのメニュー
メニュー名 |
メニュー項目 |
説明 |
インスタンスエディタ (Instance Editor) |
終了 (Exit) |
「インスタンス (Instances)」ウィンドウを閉じる |
アクション (Action) |
インスタンスを追加 (Add Instance) |
「インスタンスを追加 (Add Instances)」ダイアログボックスを表示し、クラス継承ツリーに追加する新しいインスタンスを作成する |
インスタンスを削除 (Delete Instance) |
選択したインスタンスを削除する |
|
再表示 (Refresh) |
新たに作成したインスタンスとインスタンスに加えた最新の変更が反映されるように、「インスタンス (Instances)」ウィンドウの左側に表示されたインスタンスリストを更新する |
「インスタンスを追加 (Add Instances)」ダイアログボックスでは、プロパティを右ボタンでクリックして新たに作成したインスタンスのプロパティ値を変更できます。継承されたプロパティの値は変更できません。
Sun WBEM SDK アプリケーションは、アプリケーションプログラミングインタフェース (API) を介して Common Information Model (CIM) Object Manager に情報またはサービスを要求します。この章で説明する内容は、次のとおりです。
CIM と クライアント API の詳細は、Javadoc リファレンスページを参照してください。
API により CIM オブジェクトが記述され、処理されます。これらの API により、CIM オブジェクトが Java クラスとして記述されます。オブジェクトとは、プリンタ、ディスクドライブ、CPU などの管理対象リソースをコンピュータ用に記述したモデルです。CIM Object Manager は、Common Information Model (CIM) 2.1 の仕様に準拠しています。そのため、API によってモデル化されるオブジェクトは、標準の CIM オブジェクトに準拠しています。
プログラマは、これらのインタフェースを使用して管理対象オブジェクトを記述したり、特定のシステム環境内の管理対象オブジェクト情報を取り出すことができます。CIM を使用して管理対象オブジェクトをモデル化する場合の利点は、CIM に準拠するシステム間でそれらのオブジェクトを共有できることです。
CIM API - アプリケーションがすべての基本的な CIM 要素を表現するために使用する、共通のクラスとメソッド
クライアント API - アプリケーションが CIM Object Manager との間でデータ転送を行うために使用するメソッド
プロバイダ API - CIM Object Manager とオブジェクトプロバイダが相互通信のために使用するインタフェース
次の表で、CIM API パッケージ内のインタフェースについて説明します。
表 5-1 CIM クラス
クラス |
説明 |
---|---|
CIMClass |
CIM クラス。共通の型をサポートする CIM インスタンスの集まり (プロパティとメソッドのセットなど) を記述するオブジェクト。このインタフェースは、開発者が作成するオブジェクトグループに必要な CIM 値を入力するテンプレートを作成する |
CIMDataType |
CIM のデータ型 (CIM 仕様の定義にもとづく) |
CIMDateTime |
CIM の日時表記 |
CIMElement |
CIM 要素。管理されるシステム要素の基底クラス |
CIMFlavor |
CIM 修飾子フレーバ。修飾子の特性の 1 つであり、修飾子を派生クラスまたは派生インスタンスに伝達できるかどうか、および派生クラスまたは派生インスタンスが修飾子の本来の値をオーバーライドできるかどうかを指定する規則を記述する |
CIMInstance |
CIM データの単位。このインタフェースは、特定のクラスに属する管理対象オブジェクトの記述に使用される。インスタンスには実際のデータが含まれる |
CIMMethod |
メソッド名、戻り値のデータ型、およびパラメータを含む宣言 |
CIMNameSpace |
CIM ネームスペース。ほかのネームスペース、クラス、インスタンス、修飾子のデータ型、および修飾子を含むことができるディレクトリに似た構造を持つ |
CIMObjectPath |
CIM オブジェクトのパス名。オブジェクト名は、2 つの部分、ネームスペースとモデルパスから構成される。モデルパスは、ネームスペース内のオブジェクトを個々に識別する |
CIMParameter |
CIM パラメータ。呼び出し側メソッドから CIM メソッドに渡される値 |
CIMProperty |
CIM クラスのインスタンスの特性を示す値。プロパティは、プロパティ値を設定する機能と、そのプロパティ値を返す機能の組み合わせと考えることができる。プロパティは、名前と 1 つのドメイン (そのプロパティを所有するクラス) を持つ |
CIMQualifier |
クラス、インスタンス、メソッド、またはプロパティを記述する修飾子。このクラスは、管理対象オブジェクトの属性の変更に使用される (たとえば、ディスクに読み取り権だけを追加するなど)。修飾子は、2 つのカテゴリ、Common Information Model (CIM) によって定義されるものと、開発者によって定義されるものに分類される |
CIMQualifierType |
CIM 修飾子の型。CIM 修飾子を作成するテンプレート |
CIMQuery |
CIM クエリ。インジケーション登録のフィルタ、および CIM Object Manager からの CIM 要素検出のフィルタを指定する |
CIMScope |
CIM スコープ。これは、修飾子を使用できる CIM オブジェクトを示す修飾子属性である。たとえば、修飾子 ABSTRACT は Scope (Class Association Indication) を持つが、これは、ABSTRACT がクラス、関連、およびインジケーションにだけ使用できることを意味する |
CIMValue |
CIM 値。これはプロパティ、参照、および修飾子に割り当てることができる値である。CIM 値は、データ型 (CIMDataType) と実際の値を持つ |
UnsignedInt8 |
符号なし 8 ビット整数 |
UnsignedInt16 |
符号なし 16 ビット整数 |
UnsignedInt32 |
符号なし 32 ビット整数 |
UnsignedInt64 |
符号なし 64 ビット整数 |
例外クラスは、Sun WBEM SDK クラスで起こり得るエラー状態を記述します。CIMException クラスは、CIM 例外の基底クラスです。CIM のほかの例外クラスはすべて、CIMException クラスのサブクラスです。
次の表で、CIM の例外クラスについて説明します。
表 5-2 例外クラス
クラス |
説明 |
---|---|
CIMClassException |
CIM クラスで発生する意味上の例外。MOF コンパイラ (mofcomp) は、このクラスを使用してコンパイル時に見つかる意味上のエラーを処理する |
CIMException |
例外的な CIM の状態。これは、CIM 例外の基底クラスである |
CIMInstanceException |
CIM インスタンスで発生する意味上の例外 |
CIMMethodException |
CIM メソッドで発生する意味上の例外 |
CIMNameSpaceException |
CIM ネームスペースで発生する意味上の例外 |
CIMPropertyException |
CIM プロパティで発生する意味上の例外 |
CIMProviderException |
CIM Object Manager のプロバイダで発生し得る例外状態 |
CIMQualifierTypeException |
CIM 修飾子のデータ型で発生し得る例外状態 |
CIMRepositoryException |
CIM レポジトリで発生し得る例外状態 |
CIMSemanticException |
CIM 要素で発生し得る意味上の例外。この例外は、通常、CIM Object Manager が CIM 要素の追加、変更、または削除を試みる場合と、CIM の仕様に準拠しない不正な状況が発生する場合に送出される |
CIMTransportException |
CIM トランスポートインタフェース (RMI と XML) で発生する例外状態 |
クライアント API パッケージには、クライアントアプリケーションと CIM Object Manager 間でデータを転送するクラスとメソッドが含まれています。アプリケーションは、CIMClient クラスを使用して CIM Object Manager に接続します。また、次の表に示す、CIMClient クラスのメソッドを使用して、CIM Object Manager との間でデータ転送を行います。
表 5-3 Client メソッド
メソッド |
説明 |
---|---|
close |
CIM Object Manager へのクライアント接続を閉じる。このインタフェースは、クライアントセッションに使用されているリソースを解放する |
createNameSpace |
CIM ネームスペース (クラスとインスタンスが入ったディレクトリ) を作成する。クライアントアプリケーションは、CIM Object Manager に接続する場合、ネームスペースを指定する。その後の処理はすべて、CIM Object Manager ホスト上のそのネームスペース内で発生する |
deleteNameSpace |
指定されたホスト上の指定されたネームスペースを削除する |
deleteClass |
指定されたクラスを削除する |
deleteInstance |
指定されたインスタンスを削除する |
deleteQualifierType |
指定された、修飾子のデータ型を削除する |
enumClass |
CIM Object Manager から指定されたクラス (1 つまたは複数) を検出する |
enumInstances |
指定されたクラス (1 つまたは複数) のインスタンスのリストを取得する |
enumNameSpace |
ネームスペースのリストを取得する |
enumQualifierTypes |
指定されたクラス (1 つまたは複数) の、修飾子のデータ型を取得する |
getClass |
指定された CIM オブジェクトパスの CIM クラスを取得する |
getInstance |
指定された CIM オブジェクトパスの CIM インスタンスを取得する |
getQualifierType |
指定された CIM オブジェクトパスの修飾子型を取得する |
invokeMethod |
指定されたオブジェクトに対して指定されたメソッドを実行する。メソッドは、メソッド名、戻り値のデータ型、およびメソッド内のパラメータを含む宣言である |
setClass |
指定されたネームスペースに指定された CIM クラスを追加するため、このクライアント上で CIM Object Manager を起動する |
setInstance |
指定されたネームスペースに指定された CIM インスタンスを追加、あるいは更新するため、CIM Object Manager を起動する |
setQualifierType |
指定されたネームスペースに指定された修飾子型を追加するため、CIM Object Manager を起動する |
プロバイダ API は、CIM Object Manager とオブジェクトプロバイダが相互通信のために使用するインタフェースです。プロバイダは、これらのインタフェースを使用して CIM Object Manager に対し動的データを提供できます。
クライアントアプリケーションが CIM Object Manager に動的なデータを要求する場合、CIM Object Manager はこれらのインタフェースを使用して要求をプロバイダに渡します。プロバイダは、CIM Object Manager の要求に応答して次に示す機能を実行するクラスです。
次の表で、Provider パッケージ内のインタフェースについて説明します。
表 5-4 Provider インタフェース
インタフェース |
説明 |
---|---|
CIMProvider |
すべてのプロバイダによって実装される基底インタフェース |
InstanceProvider |
インスタンスプロバイダによって実装される基底インタフェース。インスタンスプロバイダは、クラスの動的インスタンスを提供する |
MethodProvider |
メソッドプロバイダによって実装されるインタフェース。メソッドプロバイダは、CIM クラスの全メソッドの実装を提供する |
PropertyProvider |
プロパティプロバイダによって実装されるインタフェース。プロパティプロバイダは、動的プロパティの検出と更新に使用される。動的データは、CIM Object Manager Repository には格納されない |
この章では、Client Application Programming Interface (API) を使用してクライアントアプリケーションを作成する方法について説明します。
CIM と クライアント API の詳細は、Javadoc リファレンスページを参照してください。
Web-Based Enterprise Management (WBEM) アプリケーションは、Sun WBEM SDK API を使用して CIM オブジェクトを操作する標準的な Java プログラムです。クライアントアプリケーションは、一般に CIM API を使用してオブジェクト (ネームスペース、クラス、インスタンスなど) を構築し、続いてそのオブジェクトを初期化します。その後、クライアント API を使用してオブジェクトを CIM Object Manager に渡し、WBEM の処理 (CIM ネームスペース、クラス、またはインスタンスの作成など) を要求します。
Sun WBEM SDK アプリケーションは、通常、次の手順で処理を行います。
CIM Object Manager に接続します (CIMClient)。
クライアントアプリケーションは、WBEM のオペレーション (CIM クラスの作成や CIM インスタンスの更新など) を実行する必要があるたびに、CIM Object Manager に接続します。
1 つ以上の API を使用してプログラミング作業を行います。
CIM Object Manager への接続が完了すると、プログラムは API を使用して処理を要求します。
CIM Object Manager へのクライアント接続を閉じます (close)。
アプリケーションは、終了時に現在のセッションを閉じる必要があります。CIMClient インタフェースを使用して、現在のクライアントセッションを閉じてクライアントセッションが使用しているリソースをすべて解放します。
例 6-1 に、すべてのデフォルト値を使用して CIM Object Manager に接続する簡単なアプリケーションを示します。このプログラムは、クラスを取得し、そのクラス内のインスタンスの列挙と出力を行います。
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import com.sun.wbem.cim.CIMException; import java.util.Enumeration; /** * コマンド行に指定されたクラスを取得する (args[1])。コマンド行に * 指定されたネームスペース内のクラスインスタンスを取得する (args[0])。 */ 1 public class WBEMsample { 2 public static void main(String args[]) throws CIMException { 3 CIMClient cc = null; 4 try { 5 /* args[0] にはネームスペースが入る。このネームスペースを 6 格納するためにネームスペースオブジェクト (cns) を作成する。 */ 7 CIMNameSpace cns = new CIMNameSpace(args[0]); 8 /* CIM Object manager に接続し、ネームスペースを含む 9 ネームスペースオブジェクトを渡す。 */ 10 cc = new CIMClient(cns); 11 /* args[1] にはクラス名が入る。現在のネーム 12 スペース内の指定されたクラスを参照する CIM Object 13 Path を作成する。 */ 14 CIMObjectPath cop = new CIMObjectPath(args[1]); 15 /* CIM Object Path によって参照されている 16 クラスオブジェクトを取得する。 */ 17 cc.getClass(cop); 18 //クラスとそのすべてのサブクラスのディープ (deep) 列挙 19 Enumeration e = cc.enumInstances(cop, true); 20 while(e.hasMoreElements()) { 21 CIMObjectPath op = (CIMObjectPath)e.nextElement(); 22 System.out.println(op); 23 } 24 catch (Exception e) { 25 System.out.println("Exception: "+e); 26 } 27 if(cc != null) { 28 cc.close(); 29 } 30 } 31 } |
CIM Object Manager への接続が完了すると、クライアントアプリケーションは API を使用して処理を要求します。プログラムの機能セットは、どの処理を要求すべきかを決定します。次に、ほとんどのプログラムが実行する一般的な処理を示します。
アプリケーションは、次の処理を実行する場合もあります。
アプリケーションは、最初に CIM Object Manager に対しクライアントセッションを開きます。WBEM クライアントアプリケーションは、CIM Object Manager にオブジェクト管理サービスを要求します。クライアントと CIM Object Manager は、同じホスト上でも異なるホスト上でも動作します。同じ CIM Object Manager に対して、複数のクライアントから接続できます。
この節では、ネームスペースの基本概念と、次に示すクラスとメソッドの使用方法を説明します。
CIM Object Manager に接続するための CIMClient クラス
クライアント接続を閉じるための close メソッド
アプリケーションを作成する前に、ネームスペースの CIM 概念を理解する必要があります。ネームスペースは、ディレクトリに似た構造を持ち、ほかのネームスペース、クラス、インスタンス、および修飾子のデータ型を含むことができます。ネームスペース内のオブジェクトの名前は固有にする必要があります。オペレーションはすべて、ネームスペース内で行われます。Solaris WBEM Services をインストールすると、次に示す 2 つのネームスペースが作成されます。
root¥cimv2 - Solaris WBEM Services がインストールされているシステム上のオブジェクトを表すデフォルトの CIM クラスが含まれます。これは、デフォルトネームスペースです。
CIM Object Manager に接続する場合、アプリケーションはデフォルトのネームスペース (root¥cimv2) に接続するか、別のネームスペース (root¥security や独自に作成したネームスペースなど) を指定する必要があります。
特定のネームスペースで CIM Object Manager への接続が完了すると、その後の処理はすべてそのネームスペース内で発生します。アプリケーションは、ネームスペース内で別のネームスペースに接続できます。これは、ディレクトリ内でサブディレクトリに位置を変更するのに似ています。アプリケーションが別のネームスペースに接続すると、その後の処理はすべてその新しいネームスペース内で発生します。
クライアントアプリケーションは、WBEM のオペレーション (CIM クラスの作成や CIM インスタンスの更新など) を実行する必要があるたびに、CIM Object Manager に接続します。アプリケーションは、CIMClient クラスを使用して CIM Object Manager 上のクライアントのインスタンスを作成します。CIMClient クラスには、次の 3 つの引数を指定できます。
ネームスペース
ユーザー名
有効な Solaris のユーザーアカウント名。CIM Object Manager は、CIM オブジェクトに対してどのタイプのアクセスを許可するかを決定するために、ユーザーのアクセス権を確認します。デフォルトのユーザーアカウントは guest です。
パスワード
ユーザーアカウントのパスワード。パスワードは、ユーザーの Solaris アカウントとして有効なパスワードにする必要があります。デフォルトのパスワードは guest です。
CIM Object Manager への接続が完了すると、その後の CIMClient オペレーションはすべて指定されたネームスペース内で発生します。
次の例は、CIMClient インタフェースを使用して CIM Object Manager に接続する 2 つの方法を示しています。
例 6-2 では、アプリケーションはすべてデフォルト値を使用しています。つまり、デフォルトのユーザーアカウントとパスワード guest を使用し、ローカルホスト (クライアントアプリケーションが動作しているホスト) のデフォルトのネームスペース (root¥cimv2) で動作している CIM Object Manager に接続します。
/* パスワード guest を持つユーザー guest として ローカルホスト上の root¥cimv2 ネームスペースに接続 */ cc = new CIMClient(); |
例 6-3 では、アプリケーションはホスト happy 上のネームスペース A に接続します。アプリケーションは、初めにこのネームスペースの文字列名 (A) を含むためにネームスペースのインスタンスを作成します。続いて、CIMClient クラスを使用して CIM Object Manager に接続し、ネームスペースオブジェクト、ユーザー名、およびホスト名を渡します。
/* ホスト happy 上の A (ネームスペース名) を 使用して初期化されたネームスペースオブジェクトを作成 */ CIMNameSpace cns = new CIMNameSpace("happy", A); // このネームスペースにユーザー Mary として接続 cc = new CIMClient(cns, "Mary", ""); |
アプリケーションは、現在のクライアントセッションの終了時にセッションを閉じる必要があります。現在のクライアントセッションを閉じてこのセッションによって使用されているリソースをすべて解放するには、close メソッドを使用します。
次に、クライアント接続を閉じるコード例を示します。インスタンス変数 cc は、このクライアント接続をしたインスタンスを表します。
cc.close(); |
この節では、CIM インスタンスの作成、削除、および更新 (1 つ以上のインスタンスのプロパティ値の取得と設定) の各方法について説明します。
既存のクラスのインスタンスを作成するには、newInstance メソッドを使用します。既存のクラスがキープロパティを持つ場合、アプリケーションはそのプロパティを固有の値に設定する必要があります。インスタンスは、必要に応じてそのクラスに定義されていない別の修飾子を定義することもできます。それらの修飾子をインスタンスまたは特定のインスタンスプロパティ用に定義できますが、クラス宣言内で定義する必要はありません。
アプリケーションは、クラスに定義されている一連の修飾子を getQualifiers メソッドを使用して取得できます。
例 6-4 のコードセグメントは、newInstance メソッドを使用して、Solaris_Package クラスの CIM インスタンス (Solaris パッケージなど) を表す Java クラスを作成します。
/*ローカルホストの root¥cimv2 ネームスペースの CIM Object Manager に接続 */ CIMClient cc = new CIMClient(); // Solaris_Package クラスを取得 cimclass = cc.getClass(newCIMObjectPath("Solaris_Package"); /* プロパティのデフォルト値を使用して生成された Solaris_Package クラスの新しいインスタンスを作成。このクラスのプロバイダが デフォルト値を指定しない場合、プロパティの値は NULL であり、 明示的に設定される必要がある。*/ ci = cimclass.newInstance(); |
インスタンスの削除には、deleteInstance メソッドを使用します。
例 6-5 は、クライアントアプリケーションを CIM Object Manager に接続し、次に示すインタフェースを使用してクラスのインスタンスをすべて削除します。
CIMObjectPath - 削除されるオブジェクトの CIM オブジェクトパスを含むオブジェクトを構築する
enumInstance - インスタンスおよびそのサブクラスのすべてのインスタンスを取得する
deleteInstance - 各インスタンスを削除する
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import java.util.Enumeration; public class DeleteInstances { public static void main(String args[]) throws CIMException { CIMClient cc = null; try { /* コマンド行引数を含むネームスペースオブジェクトを 構築 */ CIMNameSpace cns = new CIMNameSpace(args[0]); /* このネームスペースオブジェクトを CIM Object Manager に渡す。*/ CIMClient cc = new CIMClient(cns); /* 削除するオブジェクトの CIM オブジェクトパスを含む オブジェクトを構築 */ CIMObjectPath cop = new CIMObjectPath(args[1]); /* オブジェクトインスタンスのディープ (deep) 列挙を行う (deep は CIMClient.DEEP に設定される)。 クラスインスタンスのディープ列挙を行うと、クラスおよび そのサブクラスのすべてのインスタンスが返される。 */ Enumeration e = cc.enumInstances(cop, CIMClient.DEEP); // 各オブジェクト名を出力し、インスタンスを削除 while(e.hasMoreElements()) { CIMObjectPath op = (CIMObjectPath)e.nextElement(); System.out.println(op); cc.deleteInstance(op); } } catch (Exception e) { System.out.println("Exception: "+e); } // クライアント接続が開いている場合、接続を閉じる。 if(cc != null) { cc.close(); } } } |
アプリケーションが、 CIM Object Manager から CIM インスタンスを検出する場合、getInstance メソッドがよく使用されます。
例 6-6 のコードセグメントは、特定のシステム上のすべてのプロセスを表示します。この例では、enumInstances メソッドを使用して CIM_Process クラスのインスタンス名を取得します。このコードを Microsoft Windows 32 システムで実行すると、Windows 32 のプロセスが返されます。このコードを Solaris システムで実行すると、Solaris プロセスが返されます。
{ //ネームスペース cns を作成 CIMnameSpace cns = new CIMNameSpace; //CIM Object Manager 上で cns ネームスペースに接続 cc = new CIMClient(cns); /* CIM_Process クラスの CIM オブジェクトパスを CIM Object Manager に渡す (このクラスのインスタンスを取得する)。 */ CIMObjectPath op = new CIMObjectPath("CIM_Process"); /* CIM Object Manager が、オブジェクトパスのベクトル (CIM_Process クラスのインスタンス名) を返す。 */ Vector v = cc.enumInstances(op, true); /* インスタンスオブジェクトパスが入ったベクトルのサイズ分だけ繰り返す。 各オブジェクト名によって参照されるインスタンスを取得するには、 CIM Client の getInstance インタフェースを使用する。 */ for (int i=0; i < v.size(); i++) { // インスタンスを取得 CIMInstance ci = cc.getInstance(v.elementAt(i)); /* CIM_Process の各インスタンスのプロセス ID 文字列を 取得 */ CIMProperty cp = ci.getProperty("Handle"); } |
例 6-7 は、すべての Solaris プロセスの lockspeed プロパティの値を出力します。このコードセグメントは、次のメソッドを使用します。
getInstance - 各インスタンス名のインスタンスデータを取得する
getProperty - 各インスタンスの lockspeed の値を取得する
println - lockspeed の値を出力する
/* myhost の /root ネームスペースで、パスワード contrary を 持つユーザー mary として CIM Object Manager に接続 */ { CIMNameSpace cns = new CIMNamesSpace ("myhost" "/root"); cc = new CIMClient (cns, "/root", "mary", "contrary"); // Solaris_Processor のすべてのインスタンスの名前を取得 Vector op cc.enumInstances("Solaris_Processor") // 各 Solaris プロセッサごとに、そのインスタンスデータを取得 while (vector has more elements) { cn.getNextElement(); cc.getInstance (cn); // 各プロセッサの lockspeed を出力 p = ci.getProperty("lockspeed") System.out.println(p.getValue().getValue()); } |
例 6-8 のコードセグメントは、CIM インスタンスを取得してそのプロパティ値の 1 つを変更し、変更後のインスタンスを CIM Object Manager に渡します。
CIM プロパティは、CIM クラスの特性を記述するために使用される値です。プロパティは、プロパティ値を設定する機能と、プロパティ値を取得する機能の組み合わせと考えることができます。
{ /* ベクトル内の各要素のインスタンスを取得し、 各インスタンスで b のプロパティ値を 10 に変更し、 変更後のインスタンスを CIM Object Manager に渡す。 */ For (int i=0; i(v.size(); i++) { CIMInstance ci = cc.getInstance(v.elementAt(i)); ci.setProperty("b",new CIMValue(10)); cc.setInstance(new CIMObjectPath(),ci); } |
オブジェクトの列挙とは、オブジェクト名のリストを取得することを意味します。オブジェクト名リストを取得すると、そのオブジェクトに関する情報 (オブジェクトのインスタンス、そのプロパティなど) を取得できます。Sun WBEM SDK には、ネームスペース、クラス、およびインスタンスを列挙する API が含まれています。
列挙 API は、2 つのブール型引数、deep と shallow を取ります。これらのパラメータの動作は、使用されるメソッドによって異なります。クラスインスタンスのディープ (deep) 列挙を行うと、クラスおよびそのサブクラスのすべてのインスタンスが返されます。クラスのディープ列挙では、クラスのサブクラスがすべて返されますが、クラス自体は返されません。クラスインスタンスのシャロー (shallow) 列挙では、そのクラスのインスタンスが返されます。クラスのシャロー列挙では、そのクラスのすぐ下のサブクラスが返されます。
次に、列挙 API を使用してネームスペースを列挙する例と、クラスを列挙する例を示します。
例 6-9 のプログラムは、CIM クライアントクラスの enumNameSpace メソッドを使用して、ネームスペースおよびその中に含まれるすべてのネームスペース名を出力します。
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import java.util.Enumeration; / ** * このプログラムは、CIMObjectPath で指定されるネームスペース、 * およびそのネームスペース内のすべてのネームスペースの * リストを取得するために CIMClient.DEEP を条件として、ネームスペース引数を取り、 * CIM クライアントの enumNameSpace インタフェースを呼び出す。 * 続いて、指定されたネームスペース名を * 出力する (CIMClient.SHALLOW)。 /** public class EnumNameSpace { // EnumNameSpace が、引数の文字列を取る。 public static void main (String args[ ]) { CIMClient cc = null; try { // 引数として渡されるネームスペースのネームスペースオブジェクトを作成 CIMNameSpace cns = new CIMNameSpace(args[0], ""); // 引数として渡されるネームスペース内の CIM Object Manager に接続 CIMClient cc = new CIMClient(cns); // 現在のホスト上のネームスペース名を保存するためにオブジェクトパスを作成 CIMObjectPath cop = new CIMObjectPath("",args[1]); // ネームスペースおよびその中に含まれるすべてのネームスペースを列挙 // (CIMClient.DEEP に deep が 設定される) Enumeration e = cc.enumNameSpace(cop, CIMClient.DEEP); // ネームスペースの表示を繰り返し、それぞれの名前を出力 for (; e.hasMoreElements(); System.out.println(e.nextElement())); System.out.println("++++++"); // CIMClient.SHALLOW でネームスペースの表示を繰り返し、 // それぞれの名前を出力 e = cc.enumNamesSpace(cop, CIMClient.SHALLOW); for (; e.hasMoreElements(); System.out.println(e.nextElement())); } // 例外が返される場合はそれらを捕捉して印刷する。 catch (Exception e) { System.out.println("Exception: "+e); } // クライアント接続が開かれている場合、接続を閉じる。 if(cc != null) { cc.close(); } } } |
Java GUI アプリケーションでは、例 6-10 のコードセグメントを使用してクラスとサブクラスのリストがユーザーに表示されます。ユーザーが特定のクラスを選択すると、コードによりそのクラスが列挙されます。
/* CIM オブジェクトのパスが入ったオブジェクトを作成。 */ CIMObjectPath (op = new(CIMObjectPath()); /* オブジェクトパス名を A と指定 */ cop.setName("A"); /* ベクトルは、オブジェクト、クラス、およびクラス内の すべてのサブクラスのオブジェクトパスを返す。 オブジェクトパスには、ネームスペース、クラス名、および キー (オブジェクトがインスタンスの場合) が含まれる。 */ /* このベクトルには、列挙されるクラスの CIM オブジェクト パスが含まれる。 */ Vector v = cc.enumClass(cop, true); |
プロバイダがサポートするクラスのメソッドを呼び出すには、invokeMethod メソッドを使用します。アプリケーションでメソッドのシグニチャを検出するには、最初にメソッドが属しているクラスの定義を取得する必要があります。invokeMethod メソッドは、次の 4 つの引数を取ります。
データ型 |
説明 |
---|---|
CIMObjectPath |
メソッドの起動が必要なインスタンスの名前 |
String |
呼び出すメソッド名 |
Vector |
メソッドに渡す入力パラメータ |
Vector |
メソッドから取得する出力パラメータ |
invokeMethod メソッドは、CIMValue を返します。呼び出されるメソッドが戻り値を定義していない場合、戻り値は NULL です。
例 6-11 のコードセグメントは、CIM_Service クラスのインスタンス (デバイス機能またはソフトウェア機能を管理するサービス) を取得し、invokeMethod メソッドを使用して各サービスを停止します。
{ /* CIM Object Manager に CIM_Service クラスの CIM オブジェクト パスを渡す (このクラスのインスタンスを取得する)。 */ CIMObjectPath op = new CIMObjectPath("CIM_Service"); /* CIM Object Manager は、オブジェクトパスのベクトル (CIM_Service クラスのインスタンス名) を返す。 */ Vector v = cc.enumInstances(op, true); /* インスタンスオブジェクトパスのベクトルを繰り返す。 各オブジェクト名によって参照されるインスタンスを取得 するには、CIM Client の getInstance インタフェースを 使用する。 */ for (int i=0; i < v.size(); i++) { // インスタンスを取得 CIMInstance ci = cc.getInstance(v.elementAt(i)); //CIM サービスを停止するために Stop Service メソッドを呼び出す。 c.invokeMethod(v.element(i), "StopService", null, null); } } |
CIM クラスを取得するには getClass メソッドを使用します。
例 6-12 のプログラムは、次のメソッドを使用してクラス定義を検出します。
CIMNameSpace - 新しいネームスペースを作成する
CIMClient - CIM Object Manager への新しいクライアント接続を作成する
CIMObjectPath - オブジェクトパス (検出するクラス名を含むオブジェクト) を作成する
getClass - CIM Object Manager からクラスを検出する
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import com.sun.wbem.cim.CIMException; import java.util.Enumeration; /** * コマンド行に指定されたクラスを取得。デフォルトの * ネームスペース /root/cimv2 で作業する。 */ public class GetClass { public static void main(String args[]) throws CIMException { CIMClient cc = null; try { CIMNameSpace cns = new CIMNameSpace(args[0]); cc = new CIMClient(cns); CIMObjectPath cop = new CIMObjectPath(args[1]); cc.getClass(cop); } catch (Exception e) { System.out.println("Exception: "+e); } if(cc != null) { cc.close(); } } } |
各インタフェースには、CIM の例外を定義する throws 節が含まれます。例外とは、エラー状態を意味します。CIM Object Manager は、Java の例外処理を使用して WBEM 固有の例外の階層を作成します。CIMException クラスは、CIM 例外の基底クラスです。CIMException 以外の CIM 例外クラスは、CIMException クラスのサブクラスです。
CIM 例外の各クラスは、API コードが処理する特定のエラー状態を定義します。CIM 例外 の API については、表 5-2 を参照してください。
クライアント API は、標準 Java の try/catch 節を使用して例外を処理します。一般に、アプリケーションは、例外をキャッチしたあと何らかの修正アクションを実行するか、あるいはエラー情報をユーザーに渡します。
CIM 仕様では、CIM の規則は明白に定義されていません。CIM の規則は、通常、例によって暗黙に示されます。ほとんどの場合、エラーコードによって示されるのは一般的な問題 (データ型の不一致など) です。プログラマは、その問題に対して具体的な処置を行う必要があります (この場合、正しいデータ型を決定)。
MOF コンパイラ (mofcomp) は、.mof テキストファイルを Java クラス (bytecode) にコンパイルします。MOF コンパイラは、MOF ファイルの構文検査を行います。 CIM Object Manager は、各種のアプリケーションからアクセスできるので、構文と意味の両方の検査を行います。
例 6-13 の MOF ファイルは、2 つのクラス、A と B を定義します。このサンプルファイルをコンパイルすると、CIM Object Manager は意味上のエラーを返します。これは、キーをオーバーライドできるのは別のキーだけであるためです
Class A ¥¥クラス A を定義 { [Key] int a; } Class B:A ¥¥Class B はクラス A のサブクラス { [overrides ("c", key (false) ] int b; } |
この節では、高度なプログラミング作業と、頻度の低いプログラミング作業について説明します。
インストールを行うと、標準の CIM MOF ファイルがデフォルトのネームスペース /root/cimv2 と /root/security にコンパイルされます。新しいネームスペースを作成する場合は、そのネームスペースにオブジェクトを作成する前に適切な CIM MOF ファイルをネームスペースにコンパイルします。たとえば、標準の CIM 要素を使用するクラスを作成する場合は、ネームスペースに CIM Core Schema をコンパイルします。CIM Application Schema を拡張するクラスを作成する場合は、ネームスペースに CIM Application をコンパイルします。
例 6-14 のコードセグメントは、2 段階の処理により既存のネームスペース内にネームスペースを作成します。
最初に、CIMNameSpace メソッドを使用してネームスペースオブジェクトを構築します。このネームスペースオブジェクトには、ネームスペースが実際に作成される際に CIM Object Manager に渡されるパラメータが含まれます。
次に、CIMClient クラスを使用して CIM Object Manager に接続し、作成したネームスペースオブジェクトを渡します。CIM Object Manager は、このネームスペースオブジェクト内のパラメータを使用してネームスペースを作成します。
{ /*クライアントに渡すパラメータを格納するネームスペース オブジェクトをそのクライアント上に作成する。 args[0] には、ホスト名 (myhost など)が入る。 args[1] には、ネームスペース (最上位のディレクトリなど)が 入る。*/ CIMNameSpace cns = new CIMNameSpace (args[0], args[1]); /* CIM Object Manager に接続し、ネームスペース パラメータが入ったネームスペースオブジェクト (cns) を 渡す。*/ CIMClient cc = new CIMClient (cns); /* CIM Object Manager に、NULL 文字列 (ホスト名) と args[2] (secondlevel のようなネームスペース名) が入った別の ネームスペースオブジェクトを渡す。 */ CIMNameSpace cop = new CIMNameSpace("", args[2]); /* myhost の最上位レベルのネームスペースの下に 新しいネームスペース secondlevel を作成する。/* cc.createNameSpace(cop); } |
ネームスペースを削除するには、deleteNameSpace メソッドを使用します。
例 6-15 のコードセグメントは、最初にネームスペースを作成し、続いて deleteNameSpace メソッドを使用してこのネームスペースを削除します。
{ /* ネームスペースパラメータ args[0] (ホスト名) と args[1] (ネームスペース名) を格納するネームスペース オブジェクトをクライアント上に作成する。 */ CIMNameSpace cns = new CIMNameSpace (args[0], args[1]); /* CIM Object Manager に接続し、作成したネームスペース オブジェクトを渡す。 */ CIMClient cc = new CIMClient (cns); /* CIM Object Manager に NULL ホスト引数 (ここでは CIM Object Manager ホストは変更しない) と削除される ネームスペース名が入ったネームスペースオブジェクトを 渡す。*/ CIMNameSpace cop = new CIMNameSpace("", args[2]); /* ネームスペース cop を削除する。 */ cc.deleteNameSpace(cop); |
アプリケーションは、MOF 言語またはクライアント API のどちらかを使用してクラスを作成できます。MOF の構文に慣れている場合は、テキストエディタを使用して MOF ファイルを作成し、その後 MOF コンパイラを使用してそのファイルを Java クラスにコンパイルすることをお勧めします。この節では、クライアント API を使用して基底クラスを作成する方法を説明します。
CIM クラスを表す Java クラスを作成するには、CIMClass クラスを使用します。ほとんどの基底クラスは、クラス名を指定するだけで宣言できます。ほとんどのクラスには、クラスのデータを表すプロパティが含まれます。プロパティを宣言するには、プロパティのデータ型、名前、およびオプションのデフォルト値を含めます。プロパティのデータ型は、CIMDataType (事前に定義された CIM のデータ型の 1 つ) のインスタンスにします。
プロパティには、キープロパティであることを識別するキー修飾子を指定できます。キープロパティは、クラスのインスタンスを個別に定義します。インスタンスを持てるのは、キーが指定されたクラスだけです。そのため、キープロパティが定義されないクラスは、abstract クラスとしてしか使用できません。
新しいネームスペース内でクラスにキープロパティを定義する場合は、最初にコア MOF ファイルをそのネームスペースにコンパイルする必要があります。コア MOF ファイルには、標準の CIM 修飾子 (キー修飾子など) の宣言が含まれます。MOF ファイルの詳細は、第 3 章「MOF コンパイラ」を参照してください。
クラス定義は、別名、修飾子、修飾子フレーバなどの MOF 機能が含まれることにより複雑化します。
例 6-16 は、ローカルホスト上のデフォルトネームスペース (/root/cimv2) に新しい CIM クラスを作成します。このクラスは 2 つのプロパティを持ち、その 1 つはこのクラスのキープロパティです。続いて、newInstance メソッドを使用して、この新しいクラスのインスタンスを作成します。
{ /* ローカルホストの /root/cimv2 ネームスペースに接続し、 新しいクラス myclass を作成 */ // ローカルホスト上のデフォルトネームスペースに接続 CIMClient cc = new CIMClient(); // 新しい CIMClass オブジェクトを構築 CIMClass cimclass = new CIMClass(); // CIM クラス名を myclass に設定 cimclass.setName("myclass"); // 新しい CIM プロパティオブジェクトを構築 CIMProperty cp = new CIMProperty(); // プロパティ名を設定 cp.setName("keyprop"); // プロパティのデータ型を設定 cp.setType(CIMDatatype.getpredefined(CIMDataType.STRING)); // 新しい CIM 修飾子オブジェクトを構築 CIMQualifier cq = new CIMQualifier(); // 修飾子名を設定 cq.setName("key"); // プロパティに新しいキー修飾子を追加 cp.addQualfiier(cq); /* 10 に初期化された整数プロパティを作成 */ // 新しい CIM プロパティオブジェクトを構築 CIMProperty mp = new CIMProperty(); // プロパティ名を myprop に設定 mp.setName("myprop"); // プロパティのデータ型を設定 mp.setType(CIMDatatype.getpredefined(CIMDataType.INTEGER)); // myprop を 10 に初期化 mp.setValue(CIMValue.setValue(10)); /* myclass にこの新しいプロパティを追加した後、クラスを 作成するために CIM Object Manager を呼び出す。*/ // クラスオブジェクトにキープロパティを追加 cimclass.addProperty(cp); // クラスオブジェクトに整数プロパティを追加 cimclass.addProperty(mp); /* CIM Object Manager に接続し、新しいクラスを渡す。*/ cc.setClass(new CIMObjectPath(),cimclass); // CIM Object Manager に新しいクラスを渡す ci = cc.newInstance(); // myclass に新しい CIM インスタンスを作成 // クライアント接続が開かれている場合、接続を閉じる。 if(cc != null) { cc.close(); } |
クラスを削除するには、CIMClient の deleteClass メソッドを使用します。クラスを削除すると、クラス、そのサブクラス、およびそのすべてのインスタンスが削除されます。削除されるクラスを参照する関連は削除されません。
例 6-17 は、deleteClass インタフェースを使用してクラスを削除します。
import java.rmi.*; import com.sun.wbem.client.CIMClient; import com.sun.wbem.cim.CIMInstance; import com.sun.wbem.cim.CIMValue; import com.sun.wbem.cim.CIMProperty; import com.sun.wbem.cim.CIMNameSpace; import com.sun.wbem.cim.CIMObjectPath; import com.sun.wbem.cim.CIMClass; import com.sun.wbem.cim.CIMException; import java.util.Enumeration; /** * コマンド行に指定されるクラスを削除。 * デフォルトネームスペース root¥cimv2 で作業を行う。 */ public class DeleteClass { public static void main(String args[]) throws CIMException { CIMClient cc = null; try { CIMNameSpace cns = new CIMNameSpace(args[0]); cc = new CIMClient(cns); CIMObjectPath cop = new CIMObjectPath(args[1]); cc.deleteClass(cop); } catch (Exception e) { System.out.println("Exception: "+e); } if(cc != null) { cc.close(); } } } |
CIM 修飾子は、CIM クラス、インスタンス、プロパティ、メソッド、またはパラメータの特性を示す要素です。修飾子の属性は次のとおりです。
データ型
値
名前
Managed Object Format (MOF) 構文では、各 CIM 修飾子は同じ MOF ファイルでそのデータ型を宣言する必要があります。修飾子には、スコープ属性はありません。スコープは、どの CIM 要素がその修飾子を使用できるかを示します。スコープを定義できるのは、修飾子のデータ型宣言内だけです。スコープは、修飾子では変更できません。
次に、CIM 修飾子のデータ型を宣言する MOF 構文を示します。この文は、ブール型 (デフォルト値は FALSE) を使用して修飾子のデータ型 key を定義します。このデータ型が記述できるのは、プロパティと、オブジェクトに対する参照だけです。DisableOverride フレーバは、このキー修飾子がそれらの値を変更できないことを意味します。
Qualifier Key : boolean = false, Scope(property, reference), Flavor(DisableOverride);
次のコード例は、CIM 修飾子の MOF 構文を示します。このサンプル MOF ファイルでは、key と Description はプロパティ test の修飾子です。プロパティのデータ型は、値 a を持つ整数です。
{ [key, Description("test")] int a }
例 6-18 のコードセグメントは、CIMQualifier クラスを使用して CIM 要素のベクトル内の CIM 修飾子を識別します。この例は、各 CIM 修飾子ごとにプロパティ名、値、およびデータ型を返します。
修飾子フレーバは、修飾子の使用を制御するフラグです。フレーバは、派生クラスとインスタンスに修飾子を継承できるかどうか、および派生クラスまたはインスタンスが修飾子の本来の値をオーバーライドできるかどうかを指定する規則を記述します。
... } else if (tableType == QUALIFIER_TABLE) { CIMQualifier prop = (CIMQualifier)cimElements.elementAt(row); if (prop != null) { if (col == nameColumn) { return prop.getName(); } else if (col == typeColumn) { CIMValue cv = prop.getValue(); if (cv != null) { return cv.getType().toString(); } else { return "NULL"; } } ... |
例 6-19 のコードセグメントは、新しいクラスの CIM 修飾子のリストをそのスーパークラス内の修飾子に設定します。
... try { cimSuperClass = cimClient.getClass(new CIMObjectPath(scName)); Vector v = new Vector(); for (Enumeration e = cimSuperClass.getQualifiers().elements(); e.hasMoreElements();) { CIMQualifier qual = (CIMQualifier)((CIMQualifier)e.nextElement()).clone(); v.addElement(qual); } cimClass.setQualifiers(v); } catch (CIMException exc) { return; } } |
例の置かれているディレクトリには、クライアント API を使用して機能を実行するプログラム例が入っています。これらの例を使用すると、独自のアプリケーション開発を簡単に開始できます。これらのプログラム例については、第 8 章「Sun WBEM SDK サンプルの使用」で説明しています。
プログラム例を実行するには、次のコマンドを入力します。
java program_name
たとえば、java createNameSpace を入力します。
この章では、プロバイダの作成方法について説明します。内容は次のとおりです。
プロバイダ API の詳細は、Javadoc リファレンスページを参照してください。
プロバイダは、データにアクセスするために管理対象オブジェクトと通信するクラスです。プロバイダは、統合と解釈を行うために情報を CIM Object Manager に送ります。CIM Object Manager Repository に存在しないデータの要求を管理アプリケーションから受け取る場合、CIM Object Manager はその要求をプロバイダに送ります。
オブジェクトプロバイダは、CIM Object Manager と同じマシンにインストールされている必要があります。CIM Object Manager は、オブジェクトプロバイダ API を使用して、ローカルマシンにインストールされているプロバイダと通信します。
アプリケーションが CIM Object Manager に動的データを要求した場合、CIM Object Manager はプロバイダインタフェースを使用してその要求をプロバイダに渡します。
プロバイダは、CIM Object Manager からの要求に応答して次の機能を実行します。
プロバイダは扱えるサービスの要求タイプにより分類されます。Sun WBEM SDK では、次の 3 種類のプロバイダをサポートしています。
インスタンス - 指定されたクラス (Solaris パッケージなど) の動的インスタンスを提供します。インスタンスプロバイダは、次に示す操作の 1 つ以上をサポートします。
インスタンス検出
列挙
変更
削除
メソッド - 1 つ以上のクラスのメソッドを提供します。メソッドは、クラスの動作を表現する関数です。メソッドは、プロバイダによって実装される必要があります。
プロバイダ 1 つでメソッドとインスタンスの両方を提供できるため便利です。
ほとんどのプロバイダは、プルプロバイダです。つまり、必要に応じてデータを動的に生成することによりそれ自体のデータを管理します。プルプロバイダは、CIM Object Manager および CIM Repository と最小限の対話しか行いません。プルプロバイダによって管理されるデータは、通常、頻繁に変化します。そのため、プロバイダはアプリケーションから要求が出るたびにデータを動的に生成するか、あるいはローカルキャッシュからデータを取り出す必要があります。
プロバイダは、単体でインスタンスプロバイダ、プロパティプロバイダ、およびメソッドプロバイダの役割を同時に果たすことができます。このためには、関連するすべてのメソッドを適切に登録、実装する必要があります。
プロバイダは、それらの役割に固有のサービスをサポートするプロバイダインタフェースを実装します。インタフェースを実装するには、プロバイダクラスは初めに implements 節でそのインタフェースを宣言し、続いてそのインタフェースのすべての抽象メソッドに対して実装 (本体) を提供する必要があります。次の表では、プロバイダインタフェースについて説明しています。メソッドプロバイダ、インスタンスプロバイダ、およびプロパティプロバイダは、単一の Java クラスファイルに含めることも、あるいは個々のファイルに格納することもできます。
プロバイダは、initialize メソッドを使用して CIM Object Manager と通信できます。initialize メソッドには、CIM Object Manager に対する参照である、 CIMOMhandle 型の引数を指定できます。CIMOMhandle クラスには、プロバイダが CIM Object Manager との間でデータ転送に使用できるメソッドが含まれます。
表 7-1 プロバイダインタフェース
インタフェース |
説明 |
---|---|
CIMProvider |
すべてのプロバイダが実装する基本インタフェース |
InstanceProvider |
インスタンスプロバイダが実装する基本インタフェース。インスタンスプロバイダは、クラスの動的インスタンスを提供する |
MethodProvider |
メソッドプロバイダが実装するインタフェース。メソッドプロバイダは、CIM クラスのすべてのメソッドの実装を提供する |
PropertyProvider |
プロパティプロバイダが実装するインタフェース。プロパティプロバイダは、動的プロパティの検出と更新のために使用される。動的データは、CIM Object Manager Repository には格納されない |
次の表は、Provider パッケージ (com.sun.wbem.provider) に含まれるインスタンスプロバイダインタフェースのメソッドについて説明しています。
これらの各メソッドは引数 op を取ります。op は、指定された CIM クラスまたは CIM インスタンスの CIM オブジェクトパスです。オブジェクトパスには、ネームスペース、クラス名、およびキー (オブジェクトがインスタンスの場合) が含まれます。ネームスペースは、ほかのネームスペース、クラス、インスタンス、および修飾子のデータ型を格納できるディレクトリです。キーは、クラスインスタンスを個別に識別するプロパティです。キープロパティには、キー修飾子が含まれます
たとえば、次のオブジェクトパスは 2 つの部分から構成されます。
¥¥myserver¥root¥cimv2¥Solaris_ComputerSystem:Name=mycomputer: CreationClassName=Solaris_ComputerSystem
¥¥myserver¥root¥cimv2
これは、ホスト myserver 上のデフォルトの CIM ネームスペースです。
Solaris_ComputerSystem:Name=mycomputer: CreationClassName=Solaris_ComputerSystem
これは、ホスト myserver 上のデフォルトネームスペースに存在する特定の Solaris Computer System オブジェクトです。この Solaris コンピュータシステムは、(プロパティ=値) という書式で示される 2 つのキー修飾子値によって個別に識別されます。
Name=mycomputer
CreationClassName=Solaris_ComputerSystem
メソッド |
説明 |
---|---|
enumInstances |
オブジェクトパスに指定されたクラスのすべてのインスタンスを列挙する。ディープ (deep) または シャロー (shallow) 列挙が可能だが、現在 CIM Object Manager はシャロー列挙だけを要求する |
getInstance |
オブジェクトパス (op) に指定されたインスタンスを返す |
setInstance |
オブジェクトパス (op) に指定されたインスタンスを設定する。そのインスタンスが存在しない場合は、追加する必要がある |
deleteInstance |
オブジェクトパス (op) に指定されたインスタンスを削除する |
例 7-1 のコードセグメントは、CIM Object Manager からのインスタンスデータ要求を 1 つ以上の特化されたプロバイダに送る Solaris インスタンスプロバイダクラスを作成します。これらの特化されたプロバイダは、特定の Solaris オブジェクトの動的データの要求に対するサービスを提供します。たとえば、Solaris_Package プロバイダは、Solaris_Package クラスのインスタンスの要求に対応します。
インスタンスプロバイダは、InstanceProvider インタフェースのすべてのメソッドを実装する必要があります。例 7-1 のコードセグメントは、次の 2 つのメソッドだけを示しています。
enumInstances - Solaris パッケージとパッチを列挙する適切なプロバイダを呼び出す。このメソッドは、クラスおよびそのサブクラスのすべてのインスタンスを返すディープ列挙を行う
getInstances - Solaris パッケージとパッチのインスタンスを取得する適切なプロバイダを呼び出す
public class Solaris implements InstanceProvider { /** * 最上位レベルのプロバイダクラスが、CIM Object Manager * からの要求を適切なプロバイダに送る。 */ public void initialize(CIMONHandle, ch) throws CIMException { } public void cleanup() throws CIMException { } /* このクラスは、指定されたクラス内の指定されたオブジェクトの 列挙済みインスタンスが入ったベクトルを返す。オブジェクトが Solaris パッケージの場合、このクラスは Solaris_Package プロバイダを呼び 出し、システム上の Solaris パッケージのリストを返す。 オブジェクトが Solaris パッチの場合、Solaris_Patch プロバイダを 呼び出し、システム上の Solaris パッチのリストを返す。*/ public Vector enumInstances(CIMObjectPath op, CIMClient.DEEP, CIMClass cc) throws CIMException { if (op.getObjectName().equalsIgnoreCase("solaris_package")) { Solaris_Package sp = new Solaris_Package(); return sp.enumerateInstances(op); } if (op.getObjectName().equalsIgnoreCase("solaris_patch")) { Solaris_Patch sp = new Solaris_Patch(); return sp.enumerateInstances(op); } return new Vector(); } /* このクラスは、指定されたクラス内の指定されたオブジェクトの インスタンスを返す。オブジェクトが Solaris パッケージの場合、 このクラスは Solaris_Package プロバイダを呼び出し、指定された Solaris パッケージのデータを返す。オブジェクトが Solaris パッチの場合、Solaris_Patch プロバイダを呼び出し、指定された Solaris パッチのデータを返す。*/ public CIMInstance getInstance(CIMObjectPath op, CIMClass cc) throws CIMException { if (op.getObjectName().equalsIgnoreCase("solaris_package")) { Solaris_Package sp = new Solaris_Package(); return sp.getInstance(op,cc); } if (op.getObjectName().equalsIgnoreCase("solaris_patch")) { Solaris_Patch sp = new Solaris_Patch(); return sp.getInstance(op,cc); } } |
特化された Solaris インスタンスプロバイダは、API を使用してオブジェクトインスタンスの取得と設定を行います。これらのプロバイダは、C 関数を呼び出して Solaris 固有の値 (ホスト名、シリアル番号、リリース、マシン、アーキテクチャ、メーカーなど) を取得するネイティブメソッドの宣言も行います。
例 7-2 のコードセグメントは、例 7-1 で呼び出される solaris_package クラスを示します。このコードセグメントは、getInstance メソッドを実装します。このメソッドは、指定されたクラスの新しいインスタンスを作成し、ネイティブ C 関数 (GetPkgArchitecture() など) が返すプロパティをそれらのインスタンスに割り当てます。
public class Solaris_Package { public CIMInstance getInstance(CIMObjectPath op, CIMClass cc) { String pkgName = ""; for (Enumeration e = op.getKeys().elements(); e.hasMoreElements();) { CIMProperty cp = (CIMProperty)e.nextElement(); if (cp.getName().equalsIgnoreCase("name")) { pkgName = (String) ((CIMValue)(cp.getValue())).getValue(); } } CIMInstance ci = cc.newInstance(); ci.setProperty("Name", new CIMValue(pkgName)); ci.setProperty("TargetOperatingSystem", new CIMValue(new UnsignedInt16(29))); ci.setProperty("Status", new CIMValue(GetPkgStatus(pkgName))); ci.setProperty("Architecture", new CIMValue(GetPkgArchitecture(pkgName))); ci.setProperty("Description", new CIMValue(GetPkgDescription(pkgName))); ci.setProperty("Caption", new CIMValue(GetPkgDescription(pkgName))); ci.setProperty("Manufacturer", new CIMValue(GetPkgVendor(pkgName))); ci.setProperty("Category", new CIMValue(GetPkgCategory(pkgName))); ci.setProperty("Basedir", new CIMValue(GetPkgBasedir(pkgName))); return ci; } native String GetPkgDescription(String pkgName); native String GetPkgArchitecture(String pkgName); native String GetPkgVersion(String pkgName); native String GetPkgVendor(String pkgName); native String GetPkgBasedir(String pkgName); native String GetPkgCategory(String pkgName); native String GetPkgStatus(String pkgName); static { System.loadLibrary("NativeUnix"); } } |
次の表は、プロパティプロバイダインタフェースのメソッドについて説明しています。
表 7-3 PropertyProvider インタフェースメソッド
メソッド |
説明 |
---|---|
getPropertyValue |
指定されたインスタンスのプロパティの値を返す |
setPropertyValue |
指定されたインスタンスのプロパティの値を設定する |
例 7-3 のコードセグメントは、例 7-5 で登録されるプロパティプロバイダ (fruit_prop_provider) クラスを作成します。fruit_prop_provider は、PropertyProvider インタフェースを実装します。
このサンプルプロパティプロバイダは、指定されたクラスのプロパティ値、親クラス、およびプロパティ名を返す getPropertyValue メソッドを示しています。CIM プロパティは、その名前と親クラスによって定義されます。複数のプロパティで同じ名前を使用できますが、親クラスはプロパティを個別に識別します。
fruit_prop_provider implements PropertyProvider { public CIMValue getPropertyValue(CIMObjectpath op, string originclass, string PropertyName){ if (PropertyName.euqals("a") return new CIMValue("fooa") else return new CIMValue("foob"); } ... } |
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; } } |
プロバイダは、管理対象デバイスに関する情報の取得と設定を行います。ネイティブプロバイダは、管理対象デバイスで動作するように作成されるマシン固有のプログラムです。たとえば、Solaris システム上のデータにアクセスするプロバイダは、通常、C 関数を組み込んで Solaris システムの照会を行います。ネイティブプロバイダは、一般に次のような理由で作成されます。
効率 - 速度が重視されるコードの一部を低レベルのプログラミング言語 (アセンブラなど) で実装し、その後 Java アプリケーションでそれらの機能を呼び出すと便利な場合がある
プラットフォーム固有の機能にアクセスする必要がある - 標準の Java クラスライブラリが、アプリケーションに必要なプラットフォームに固有の機能をサポートしていない場合がある
従来のコード - Java 以外のプログラミング言語で作成された従来のコードを Java プロバイダと共に継続して使用したい場合がある
JDK の一部である Java Native Interface (JNI) は、Java のネイティブプログラミングインタフェースです。JNI を使用してプログラムを作成すると、ほとんどのプラットフォームで完全に移植可能です。Java Virtual Machine (VM) で動作する Java コードで JNI を使用すると、そのコードは C、C++、アセンブラのようなほかの言語で作成されたアプリケーションおよびライブラリで実行できます。
Java プログラムの作成、および Java プログラムとネイティブメソッドの統合についての詳細は、 Java Web サイト http://www.javasoft.com/docs/books/tutorial/native1.1/index.html を参照してください。
プロバイダを作成したあと、プロバイダクラスファイルと共有ライブラリファイルの場所を指定する必要があります。
次に示す方法の 1 つを使用して、共有ライブラリファイルの場所を指定します。
LD_LIBRARY_PATH 環境変数を、共有ライブラリファイルのある場所に設定します。C シェルを使用している場合の入力例を次に示します。
% setenv LD_LIBRARY_PATH /wbem/provider/ |
Borne シェルを使用している場合の入力例を次に示します。
$ LD_LIBRARY_PATH=/wbem/provider/ $ export LD_LIBRARY_PATH |
共有ライブラリファイルを、LD_LIBRARY_PATH 環境変数によって指定されているディレクトリにコピーします。WBEM のインストールを行うと、この環境変数は /install_dir/opt/SUNWconn/wbem/lib に設定されます。次に入力例を示します。
% cp libnative.so /install_dir/opt/SUNWconn/wbem/lib % cp native.c /install_dir/opt/SUNWconn/wbem/lib |
プロバイダクラスファイルを、/install_dir/opt/SUNWconn/wbem/lib に移動します。
CLASSPATH 変数を、プロバイダクラスファイルが入っているディレクトリに設定します。
/install_dir/opt/SUNWconn/wbem/bin/com/mycomp/wbem/provider/
に置く場合は、C シェルでは CLASSPATH 変数を次のように設定します。
% setenv CLASSPATH /install_dir/opt/SUNWconn/wbem/bin/com/mycomp/wbem/provider/ |
Borne シェルでは次の構文を使用します。
$ CLASSPATH=/install_dir/opt/SUNWconn/wbem/bin/com/mycomp/wbem/provider/ $ export CLASSPATH |
CIM Object Manager が動作していることを確認します。
インストールを行うと CIM Object Manager は自動的に起動します。CIM Object Manager が動作していない場合は、「CIM Object Manager の再起動」を参照してください。
サポートするデータと処理、およびそれらの物理的な実装についての情報を公開するため、CIM Object Manager にプロバイダを登録します。CIM Object Manager は、この情報を使用してプロバイダのロードと初期化、および特定のクライアント要求に適切なプロバイダを決定します。プロバイダはすべて同じ方法で登録します。登録時に CIM Object Manager、プロバイダとも動作している必要はありません。
CIM クラスを定義する MOF ファイルを作成します。
そのクラスに、provider 修飾子を割り当てます。provider 修飾子には、プロバイダ名を割り当てます。
プロバイダ名により、そのクラスのプロバイダとしての役目をする Java クラスが識別されます。クラス名は、完全に指定する必要があります。次に例を示します。
プロバイダについては、プロバイダ名が固有になるように、Java クラスおよびパッケージ命名規則に従うことを推奨します。固有のパッケージ名の接頭辞は小文字の ASCII 文字で、トップレベルのドメイン名にする必要があります。現在は、com、edu、gov、mil、net、org、または、ISO 標準 3166、1981 で指定されている国名を識別する 2 文字コードなどです。
パッケージ名のあとの名前は、組織内部の命名規則によって異なります。たとえば、あるディレクトリ名のコンポーネントは、部名、課名、プロジェクト名、マシン名、あるいはログイン名などになります (例 : com.mycompany.wbem.myprovider)。
[Provider("com.kailee.wbem.providers.provider_name")] Class_name { ... };
MOF ファイルをコンパイルします。次に例を示します。
mofcomp class_name
例 7-5 のサンプル MOF ファイルは、インスタンスプロバイダ (fruit_class_provider)、プロパティプロバイダ (fruit_prop_provider)、およびメソッドプロバイダ (fruit_method_provider) を登録する Fruit というクラスを作成します。
// fruit_class_provider を Fruit クラスのプロバイダとして登録 [Provider("com.food.fruitprovider.fruit_class_provider")] Fruit { // fruit_prop_provider は、プロパティ a のプロバイダである。 [Provider("com.food.fruitprovider.fruit_class_provider")] - string a; // fruit_prop_provider は、プロパティ b のプロバイダでもある。 [Provider("com.food.fruitprovider.fruit_class_provider")] string b; // fruit_method_provider は、メソッド b のプロバイダである。 [Provider("com.food.fruitprovider.fruit_class_provider")] int b(); }; |
プロバイダクラスは、CIM Object Manager とプロバイダの動作中に変更できます。しかし、加えた変更を有効にするためには、CIM Object Manager を停止して再起動する必要があります。
プロバイダソースファイルを編集します。
プロバイダソースファイルをコンパイルします。次に例を示します。
% javac MyProvider.java |
システムプロンプトで次のコマンドを入力し、システム上でスーパーユーザーになります。
% su |
プロンプトに対し、スーパーユーザーのパスワードを入力します。
次のコマンドを入力して、init.wbem コマンドがある位置にディレクトリを変更します。
# cd /etc/init.d/ |
次のコマンドを入力して、CIM Object Manager を停止します。
# ./init.wbem stop |
次のコマンドを入力して、CIM Object Manager を再起動します。
# ./init.wbem start |
第 8 章「Sun WBEM SDK サンプルの使用」で、プロバイダの例の設定と実行方法について説明しています。
この章では、Sun WBEM SDK に付属のプログラム例について説明します。内容は次のとおりです。
Sun WBEM SDK には、サンプル Java プログラムが付属しています。このプログラムは、/install_dir/SUNWconn/wbem/demo にインストールされます。このソースコードは、独自のプログラムを開発するためのベースとして使用できます。提供されているプログラム例は次の 2 種類です。
クライアントプログラム - クライアント API と CIM API を使用して CIM Object Manager からの WBEM オペレーションを要求するプログラム
プロバイダプログラム - データにアクセスするために管理対象オブジェクトと通信を行うプログラム
クライアント例は、クライアント API を使用してクラス、インスタンス、およびネームスペースの作成、削除、および表示を行います。次の 4 種類のクライアントプログラムが提供されています。
列挙 - クラスとインスタンスを列挙します。このプログラムは、コマンド行から渡されるクラスのディープ (deep) 列挙とシャロー (shallow) 列挙を行います。
ロギング - ログ記録の書き込みと読み取りを行う
その他 - クラスとインスタンスを削除する
ネームスペース - ネームスペースの作成と削除を行う
システム情報 - 選択されるシステムおよびネットワークの Solaris プロセス情報を表示する
次の表は、クライアントプログラム例のファイルについて説明し、各例を実行するコマンドと引数を示しています。
表 8-1 クライアントファイル例
サンプルファイル名 |
説明 |
実行するコマンド |
---|---|---|
CreateNameSpace |
指定されたユーザーとして CIM Object Manager に接続し、指定されたホスト上にネームスペースを作成する。CIM Object Manager Repository の管理アカウントのユーザー名とパスワードを指定する必要がある |
java CreateNameSpace host parentNS childNS username password |
DeleteNameSpace |
指定されたホスト上の指定されたネームスペースを削除する。CIM Object Manager Repository の管理アカウントのユーザー名とパスワードを指定する必要がある |
java DeleteNameSpace host parentNS childNS username password |
ClientEnum |
指定されたホスト上のデフォルトネームスペース /root/cimv2 に存在する指定されたクラスのサブクラスとインスタンスを列挙する |
java ClientEnum host className |
CreateLog |
指定されたホスト上にログレコードを作成する。CIM Object Manager Repository の管理アカウントのユーザー名とパスワードを指定する必要がある |
java CreateLog host username password |
ReadLog |
指定されたホスト上のログレコードを読み取る。CIM Object Manager Repository の管理アカウントのユーザー名とパスワードを指定する必要がある |
java ReadLog host username password |
DeleteClass |
指定されたホスト上のデフォルトネームスペース /root/cimv2 に存在する指定されたクラスを削除する。CIM Object Manager Repository の管理アカウントのユーザー名とパスワードを指定する必要がある |
java DeleteClass host className username password |
DeleteInstances |
指定されたホスト上のデフォルトネームスペース /root/cimv2 に存在する指定されたクラスのインスタンスを削除する。CIM Object Manager Repository の管理アカウントのユーザー名とパスワードを指定する必要がある |
java DeleteInstances host className username password |
SystemInfo |
指定されたホストの Solaris プロセッサとシステムの情報をウィンドウに表示する |
java SystemInfo host |
クライアントプログラム例を実行するには、次のコマンドを入力します。
java program_name
プログラム例のほとんどは、デフォルト値を持つ必須引数を取ります。たとえば、CreateNameSpace プログラム例には、次の 5 つの引数を指定します。
ホスト名
親ネームスペース
子ネームスペース
ユーザー名
パスワード
コマンド行引数にデフォルト値を指定するには、次の構文を使用します。
引数 |
デフォルト値 |
構文 |
---|---|---|
Host name |
local host |
. |
Parent namespace |
/root/cimv2 |
" " |
Child namespace |
Null |
" " |
User name |
GUEST |
" " |
Password |
GUEST |
" " |
次に、ローカルホスト上のデフォルトネームスペース root¥cimv2 に、パスワード secret を持つユーザー admin として接続する CreateNameSpace を実行する例を示します。
java CreateNameSpace . "" admin secret
プロバイダ例は、システムプロパティを返し、文字列「Hello World」を出力する Java プログラムです。プロバイダは、ネイティブ C メソッドを呼び出してコードを実行し、値をプロバイダに返します。
次の表は、プロバイダプログラムの各ファイルについて説明しています。
表 8-2 プロバイダファイル例
ファイル |
目的 |
---|---|
NativeProvider |
CIM Object Manager からの要求に応答し、それらを Native_Example プロバイダに送る最上位レベルのプロバイダプログラム。NativeProvider プログラムは、instanceProvider API と method Provider API を実装し、Native_Example クラスのインスタンスを列挙するメソッドと、取得するメソッドを宣言する。このプログラムは、文字列「Hello World」を出力するメソッドを呼び出すメソッドも宣言する |
Native_Example.mof |
NativeProvider プロバイダを CIM Object Manager に登録するクラスを作成する。Native_Example.mof ファイルは、NativeProvider を、Native_Example クラスの動的データ要求に対してサービスを行うプロバイダとして識別する。この MOF ファイルは、NativeProvider によって実装されるプロパティとメソッドの宣言も行う |
Native_Example.java |
NativeProvider プログラムは、このプロバイダを呼び出して、Native_Example クラスのインスタンスを列挙するメソッドと取得するメソッドを実装する。Native_Example プロバイダは、API を使用してオブジェクトの列挙とオブジェクトインスタンスの作成を行う。Native_Example クラスは、native.c ファイル内の C 関数を呼び出してシステム固有の値 (ホスト名、シリアル番号、リリース、マシン、アーキテクチャ、メーカーなど) を取得するネイティブメソッドの宣言も行う |
native.c |
Native_Example Java プロバイダからの呼び出しをネイティブ C コードで実装する C プログラム |
Native_Example.h |
Native_Example クラスに対して自動的に生成されるヘッダーファイル。Java ネイティブメソッド名とそれらのメソッドを実行するネイティブ C 関数間の対話を定義する |
libnative.so |
native.c ファイルからコンパイルされるバイナリネイティブ C コード |
Java プログラムの作成、および Java プログラムとネイティブメソッドの統合についての詳細は、Java の Web サイト http://www.javasoft.com/docs/books/tutorial/native1.1/TOC.html を参照してください。
プロバイダプログラム例 NativeProvider は、Native_Example クラスのインスタンスの列挙と、インスタンスプロパティの取得を行います。Native_Example クラスとそのインスタンスは、CIM WorkShop を使用して表示できます。
次に示す方法の 1 つを使用して、共有ライブラリファイルの場所を指定します。
LD_LIBRARY_PATH 環境変数を、共有ライブラリファイルの場所に設定します。次に入力例を示します。
% setenv LD_LIBRARY_PATH /install_dir/SUNWconn/wbem/demo/provider/jni/ |
共有ライブラリファイルを、LD_LIBRARY_PATH 環境変数によって指定されているディレクトリにコピーします。WBEM のインストールを行うと、この環境変数は /install_dir/opt/SUNWconn/wbem/lib に設定されます。次に入力例を示します。
% cp libnative.so /install_dir/opt/SUNWconn/wbem/lib % cp native.c /install_dir/opt/SUNWconn/wbem/lib % cp Native_Example.h /install_dir/opt/SUNWconn/wbem/lib |
プロバイダクラスファイルを、 CIM Object Manager が入っているディレクトリに移動させます。次に入力例を示します。
% mv Native*.class /install_dir/opt/SUNWconn/wbem/bin |
CIM Object Manager が動作していることを確認します。
インストールを行うと CIM Object Manager は自動的に起動します。CIM Object Manager が動作していない場合は、「CIM Object Manager の再起動」を参照してください。
Native_Example.mof ファイルをコンパイルします。次に入力例を示します。
% mofcomp Native_Example.mof |
この MOF ファイルをコンパイルすると、CIM Object Manager に Native_Example クラスが読み込まれ、NativeProvider がそのプロバイダとして識別されます。
CIM WorkShop を実行し、Native_Example クラスを表示します。次に入力例を示します。
% /opt/SUNWconn/wbem/bin/cimworkshop & |
ツールバーで「クラスを検索 (Find Class)」アイコンをクリックします。
「入力 (Input)」ダイアログボックスで、Native_Example と入力して「了解 (OK)」をクリックします。
この章では、Solaris WBEM Services と Sun WBEM SDK のコンポーネントが生成するエラーメッセージについて説明します。取り上げる内容は次のとおりです。
CIM Object Manager が、MOF コンパイラと CIM WorkShop で使用されるエラーメッセージを最初に生成します。MOF コンパイラにより、.mof ファイルのどこでそのエラーが発生したかを示す行がそのあとに追加されます。
固有の識別子 - そのエラーメッセージをほかのエラーメッセージと区別するための文字列
例外メッセージ - エラーメッセージの説明
パラメータ - 例外メッセージに示される特定のクラス、メソッド、および修飾子の可変部分
MOF コンパイラは、たとえば次のようなエラーメッセージを返します。
REF_REQUIRED = Association class CIM_Docked needs at least two refs. Error in line 12.
REF_REQUIRED は固有の識別子
Association class CIM_Docked needs at least two refs は、例外メッセージ
CIM_Docked はパラメータです。パラメータは、該当するクラス、プロパティ、メソッド、または修飾子の名前に置換される
WBEM は発生し得るすべてのエラーメッセージを例外テンプレート (API の ErrorMessages_en.properties ファイル) として提供しています。パラメータが必要な例外テンプレートでは、最初のパラメータは {0}、2 つめのパラメータは {1} として示されています。
REF_REQUIRED = Association class {0} needs at least two refs.
Javadoc リファレンスページでエラーメッセージの固有の識別子を検索し、エラーメッセージの説明を表示できます。
次の節では、各エラーメッセージについて詳しく説明しています。これらのエラーメッセージは、固有の識別子で編成されています。各メッセージごとに、次の中から該当する情報を示します。
固有の識別子: ヘッダーとして表示される
説明: エラーメッセージ内に使用されているパラメータの説明
例: ユーザーに表示されるエラーメッセージ例。この例は、エラーメッセージがパラメータを使用する場合に、それらのパラメータが要素 (クラス名など) に置き換わったときにエラーメッセージがどのように表示されるかを示している
原因: そのエラーメッセージが生成された理由と、メッセージの理解に役立つ背景 (参照) 情報を示す
解決方法: そのエラーを解決する方法がある場合、その手順などが示される
この節では、MOF コンパイラ、CIM Object Manager、および CIM WorkShop が生成するエラーメッセージについて説明します。
ABSTRACT_INSTANCE |
ABSTRACT_INSTANCE エラーメッセージは パラメータ {0} を使用しますが、このパラメータは abstract クラスの名前に置換されています。
例:ABSTRACT_INSTANCE = Abstract class ExampleClass cannot have instances.
原因:指定されたクラスにインスタンスが設定されましたが、このクラスは abstract クラスです。abstract クラスは、インスタンスを持てません。
対処方法:設定されたインスタンスを削除します。
CHECKSUM_ERROR |
CHECKSUM_ERROR エラーメッセージは、パラメータを使用しません。
例:CHECKSUM_ERROR = Checksum not valid.
原因:メッセージは、壊れているため送信できませんでした。この損傷は、送信中に偶然に生じたか、あるいは第三者によって故意に壊された可能性があります。
このエラーメッセージは、CIM Object Manager が無効なチェックサムを受ける場合に表示されます。チェックサムは、ネットワーク上で転送されるデータパケットのビット数です。この数は、伝送が安全であり、かつ送信中にデータの破損や意図的な変更がなかったことを情報の送信側と受信側が確認するために使用されます。
送信前に、データに対してアルゴリズムが実行されます。この実行により生成されたチェックサムがデータに含まれ、データパケットのサイズを示します。メッセージを受信すると、受信者はチェックサムを再計算し、送信者のチェックサムと比較できます。チェックサムが一致すれば、送信は安全に行われ、データの破損や変更が起きなかったと言えます。
Solaris WBEM Services のセキュリティ機能を使用してメッセージを再送信します。Solaris WBEM Services のセキュリティの詳細は、第 12 章「セキュリティの管理」を参照してください。
CIM_ERR_ACCESS_DENIED |
CIM_ERR_ACCESS_DENIED エラーメッセージは、パラメータを使用しません。
例:CIM_ERR_ACCESS_DENIED = Insufficient privileges.
原因:このエラーメッセージは、アクションを実行するための適切な特権および権限がユーザーにない場合に表示されます。
対処方法:CIM Object Manager の管理者に、処理を行うための特権を要求します。
CIM_ERR_ALREADY_EXISTS |
例 1: CIM_ERR_ALREADY_EXISTS
説明:この場合の CIM_ERR_ALREADY_EXISTS エラーメッセージはパラメータ {0} を使用しますが、このパラメータは重複したクラスの名前に置換されています。
例:CIM_ERR_ALREADY_EXISTS = Duplicate class CIMRack
原因:作成しようとしたクラスに、既存のクラスと同じ名前が使用されています。
対処方法:CIM WorkShop で既存のクラスを検索して使用されている名前を確認し、固有の名前を使用してクラスを作成します
例 2: CIM_ERR_ALREADY_EXISTS
説明:この場合の CIM_ERR_ALREADY_EXISTS エラーメッセージはパラメータ {0} を使用しますが、このパラメータは重複したインスタンスの名前に置換されています。
例:CIM_ERR_ALREADY_EXISTS = Duplicate instance SolarisRack
原因:作成しようとしたクラスのインスタンスに、既存のインスタンスと同じ名前が使用されています。
対処方法:CIM WorkShop で既存のインスタンスを検索して使用されている名前を確認し、固有の名前を使用してインスタンスを作成します。
例 3: CIM_ERR_ALREADY_EXISTS
説明:この場合の CIM_ERR_ALREADY_EXISTS エラーメッセージはパラメータ {0} を使用しますが、このパラメータは重複したネームスペースの名前に置換されています。
例:CIM_ERR_ALREADY_EXISTS = Duplicate namespace /root/CIMV2
原因:作成が試みられたネームスペースに、既存のネームスペースと同じ名前が使用されています。
対処方法:CIM WorkShop で既存のネームスペースを検索して使用されている名前を確認し、固有の名前を使用してネームスペースを作成します。
例 4: CIM_ERR_ALREADY_EXISTS
説明:この場合の CIM_ERR_ALREADY_EXISTS エラーメッセージはパラメータ {0} を使用しますが、このパラメータは重複した修飾子型の名前に置換されています。
例:CIM_ERR_ALREADY_EXISTS = Duplicate qualifier type Key
原因:作成しようとした修飾子型に、変更されるプロパティの既存の修飾子型と同じ名前が使用されています。
対処方法:CIM WorkShop でプロパティの既存の修飾子型を検索して使用されている名前を確認し、固有の名前を使用して修飾子型を作成します。
CIM_ERR_FAILED |
説明
CIM_ERR_FAILED エラーメッセージはパラメータ {0} を使用しますが、このパラメータは文字列 (エラー状態と推測される原因を説明したメッセージ) に置換されています。
例:例
CIM_ERR_FAILED=Invalid entry
原因:原因
CIM_ERR_FAILED エラーメッセージは、さまざまなエラー状況に対して表示される一般的なメッセージです。
解決方法
CIM_ERR_FAILED は一般的なエラーメッセージであるため、このメッセージの原因となり得る状況は多数考えられます。解決方法は、エラー状況によって異なります。
CIM_ERR_INVALID_PARAMETER |
CIM_ERR_INVALID_PARAMETER エラーメッセージはパラメータ {0} を使用しますが、このパラメータはスキーマ接頭辞が指定されていないクラスの名前に置換されています。
例:CIM_ERR_INVALID_PARAMETER = Class System has no schema prefix.
原因:クラス名の前にスキーマ接頭辞のないクラスが作成されました。Common Information Model では、すべてのクラスにスキーマ接頭辞を付ける必要があります。たとえば、CIM スキーマの一部として開発されるクラスには、CIM 接頭辞 CIM_Container を付けます。Solaris スキーマの一部として開発されたクラスには、Solaris 接頭辞 Solaris_System を付けます。
対処方法:クラス定義に該当するスキーマ接頭辞を指定します。接頭辞のないクラスのインスタンスをすべて見つけ、クラス名と接頭辞に置き換えます。
CIM_ERR_INVALID_SUPERCLASS |
メッセージ CIM_ERR_INVALID_SUPERCLASS は、次の 2 つのパラメータを使用します。
{0} は、指定されたスーパークラスの名前に置換されます。
{1} は、指定されたスーパークラスが存在しないクラスの名前に置換されます。
CIM_ERR_INVALID_SUPERCLASS = Superclass CIM_Chassis for class CIM_Container does not exist.
原因:特定のスーパークラスに属するクラスが指定されましたが、そのスーパークラスは存在しません。指定されたスーパークラスにスペルミスがあるか、あるいは意図したスーパークラス名の代わりに誤って存在しないスーパークラス名が指定されたことが考えられます。また、そのスーパークラスとサブクラスに変更があった可能性もあります。たとえば、指定されたスーパークラスは、実際は指定されたクラスのサブクラスであるかもしれません。この例では、CIM_Container のスーパークラスとして CIM_Chassis が指定されていますが、CIM_Chassis は CIM_Container のサブクラスです。
対処方法:スーパークラスのスペルと名前が正しいか確認し、ネームスペース内にそのスーパークラスが存在することを確認します。
CIM_ERR_NOT_FOUND |
例 1: CIM_ERR_NOT_FOUND
説明:この場合の CIM_ERR_NOT_FOUND エラーメッセージはパラメータ {0} を使用しますが、このパラメータは存在しないクラスの名前に置換されています。
例:CIM_ERR_NOT_FOUND = Class Solaris_Device does not exist.
原因:指定されたクラスが存在しません。指定されたクラスにスペルミスがあるか、あるいは意図したクラス名の代わりに誤って存在しないクラス名が指定されたことが考えられます。
対処方法:クラスのスペルと名前が正しいか確認し、ネームスペース内にそのクラスが存在することを確認します。
例 2: CIM_ERR_NOT_FOUND
説明:この場合の CIM_ERR_NOT_FOUND エラーメッセージ は、次の 2 つのパラメータを使用します。
{0} は、指定されたインスタンスの名前に置換されます。
{1} は、指定されたクラスの名前に置換されます。
CIM_ERR_NOT_FOUND = Instance Solaris_EnterpriseData does not exist for class Solaris_ComputerSystem.
原因:インスタンスが存在しません。
対処方法:インスタンスを作成します。
例 3: CIM_ERR_NOT_FOUND
説明:この場合の CIM_ERR_NOT_FOUND エラーメッセージはパラメータ {0} を使用しますが、このパラメータは指定されたネームスペースの名前に置換されています。
例:CIM_ERR_NOT_FOUND = Namespace verdant does not exist.
原因:指定されたネームスペースが見つかりません。このエラーは、入力ミスまたはスペルミスのために入力されたネームスペースの名前が正しくない場合に発生します。
対処方法:ネームスペースの名前を入力し直し、入力とスペルが正しいことを確認します。
CLASS_REFERENCE |
CLASS_REFERENCE エラーメッセージは、次の 2 つのパラメータを使用します。
{0} パラメータは、参照関係を定義されたクラスの名前に置換されます。
{1} パラメータは、参照の名前に置換されます。
CLASS_REFERENCE = Class SolarisExample1 must be declared as an association to have reference SolarisExample2
原因:あるクラスに、そのクラスが参照を持つことを示すプロパティが定義されました。しかし、そのクラスは関連の一部ではありません。クラスが参照をプロパティとして持つことを定義できるのは、別のクラスとの関連がある場合だけです。
対処方法:関連を作成し、その関連に対する参照をこのクラスのプロパティとして設定します。
INVALID_CREDENTIAL |
INVALID_CREDENTIAL エラーメッセージは、パラメータを使用しません。
例:INVALID_CREDENTIAL = Invalid credentials.
原因:このエラーメッセージは、無効なパスワードが入力された場合に表示されます。
対処方法:このメッセージを CIM WorkShop から受けた場合は、「CIM WorkShop オーセンティケーション (CIM WorkShop authentication)」ダイアログボックスの「パスワード (Password)」フィールドから無効なパスワードを削除し、パスワードを入力し直します。このエラーメッセージを MOF コンパイラから受け取った場合は、システムプロンプトでログインし直し、正しいスペルでパスワードを入力します。
INVALID_QUALIFIER_NAME |
INVALID_QUALIFIER_NAME エラーメッセージはパラメータ {0} を使用しますが、このパラメータは空の修飾子名を表す Managed Object Format 表記に置換されています。
例:INVALID_QUALIFIER_NAME = Invalid qualifier name " "
原因:プロパティの修飾子が作成されましたが、修飾子の名前が指定されませんでした。
対処方法:修飾子の定義文に修飾子の名前を含めます。
KEY_OVERRIDE |
KEY_OVERRIDE エラーメッセージは、次の 2 つのパラメータを使用します。
{0} パラメータは、1 つ以上のキー修飾子を持つクラスとのオーバーライド関係に置かれる非 abstract クラスの名前に置換されます。
{1} パラメータは、キー修飾子を持つ非 abstract クラスの名前に置換されます。
KEY_OVERRIDE = Non-key Qualifier SolarisCard cannot override key Qualifier SolarisLock.
原因:非 abstract クラスが、1 つ以上のキー修飾子を持つ非 abstract クラスをオーバーライドするようになっています。CIM では、すべての非 abstract クラスは 1 つ以上のキー修飾子を必要とし、キークラス以外のクラスはキーを持つクラスをオーバーライドできません。
対処方法:非キークラスにキー修飾子を作成します。
KEY_REQUIRED |
KEY_REQUIRED エラーメッセージはパラメータ {0} を使用しますが、このパラメータはキーを必要とするクラスの名前に置換されています。
例:KEY_REQUIRED = Concrete (non-abstract) class ClassName needs at least one key.
原因:非 abstract にキー修飾子が指定されませんでした。CIM では、非 abstract クラスはすべて、1 つ以上の修飾子を必要とします。
対処方法:クラスにキー修飾子を作成します。
METHOD_OVERRIDDEN |
METHOD_OVERRIDDEN コマンドは、次の 3 つのパラメータを使用します。
{0} は、パラメータ {1} で示されるメソッドのオーバーライドを試みているメソッドの名前に置換されます。
{1} は、パラメータ {2} で示されるメソッドによってすでにオーバーライドされているメソッドの名前に置換されます。
{2} は、パラメータ {1} をオーバーライドしたメソッドの名前に置換されます。
METHOD_OVERRIDDEN = Method Resume () cannot override Stop() which is already overridden by Start()
原因:別のメソッドによってすでにオーバーライドされているメソッドのオーバーライドを試みるメソッドが指定されました。オーバーライド済みのメソッドを再度オーバーライドすることはできません。
対処方法:オーバーライドする別のメソッドを指定します。
NEW_KEY |
NEW KEY エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、キーの名前に置換されます。
{1} は、新しいキーの定義を試みているクラスの名前に置換されます。
NEW_KEY = Class CIM_PhysicalPackage cannot define new key [Key]
原因:あるクラスが新しいキーの定義を試みていますが、スーパークラス内にキーがすでに定義されています。スーパークラスにいったんキーが定義されると、サブクラスに新しいキーを設定することはできません。
対処方法:解決方法はありません。
NO_CIMOM |
NO_CIMOM エラーメッセージはパラメータ {0} を使用しますが、このパラメータは CIM Object Manager の実行ホストに指定されたホストの名前に置換されています。
例:NO_CIMOM = CIMOM molly not detected.
原因:CIM Object Manager が指定されたホストで動作していません。
対処方法:接続を試みているホストで CIM Object Manager が動作していることを確認します。そのホストで CIM Object Manager が動作していない場合は、このソフトウェアが動作しているホストに接続します。
NO_INSTANCE_PROVIDER |
NO_INSTANCE_PROVIDER エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、インスタンスプロバイダが見つからないクラスの名前に置換されます。
{1} は、指定されたインスタンスプロバイダの名前に置換されます。
NO_INSTANCE_PROVIDER = Instance provider RPC_prop for class RPC_Agent not found.
原因:指定されたインスタンスプロバイダの Java クラスが見つかりません。このエラーメッセージは、CIM Object Manager のクラスパスに以下のすべてが適切であるクラスが含まれていないことを示します。
プロバイダクラスの名前
プロバイダクラスのパラメータ
プロバイダが定義される CIM クラス
CIM Object Manager のクラスパスを設定します。
NO_METHOD_PROVIDER |
NO_METHOD_PROVIDER エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、メソッドプロバイダが見つからないクラスの名前に置換されます。
{1} は、指定されたメソッドプロバイダの名前に置換されます。
NO_METHOD_PROVIDER = Method provider Start_prop for class RPC_Agent not found.
原因:指定されたメソッドプロバイダの Java クラスが見つかりません。このエラーメッセージは、CIM Object Manager のクラスパスに以下のすべてが適切であるクラスが含まれていないことを示します。
プロバイダクラスの名前
プロバイダクラスのパラメータ
プロバイダが定義される CIM クラス
CIM Object Manager のクラスパスを設定します。
NO_OVERRIDDEN_METHOD |
エラーメッセージ NO_OVERRIDDEN_METHODは、次の 2 つのパラメータを使用します。
{0} は、{1} で示されるメソッドをオーバーライドしたメソッドの名前に置換されます。
{1} は、オーバーライドされたメソッドの名前に置換されます。
NO_OVERRIDDEN_METHOD = Method Write overridden by Read does not exist in class hierarchy.
原因:サブクラスのメソッドがスーパークラスのメソッドのオーバーライドを試みていますが、スーパークラスのメソッドはすでに別のサブクラスに属しているメソッドによってオーバーライドされています。
メソッドをオーバーライドすると、その実装と署名もオーバーライドされます。
対処方法:スーパークラス内にそのメソッドが存在することを確認します。
NO_OVERRIDDEN_PROPERTY |
NO_OVERRIDDEN_PROPERTY エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、{1} をオーバーライドしたプロパティの名前に置換されます。
{1} は、プロパティをオーバーライドする名前に置換されます。
NO_OVERRIDDEN_PROPERTY = Property A overridden by B does not exist in class hierarchy.
原因:サブクラスのプロパティがスーパークラスのプロパティのオーバーライドを試みていますが、スーパークラスのプロパティはすでにオーバーライドされているため、このオーバーライドは行えません。
対処方法:スーパークラスにそのプロパティが存在することを確認します。
NO_PROPERTY_PROVIDER |
NO_PROPERTY_PROVIDER エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、プロパティプロバイダが見つからないクラスの名前に置換されます。
{1} は、指定されたプロパティプロバイダの名前に置換されます。
NO_PROPERTY_PROVIDER = Property provider Write_prop for class RPC_Agent not found.
原因:指定されたプロパティプロバイダの Java クラスが見つかりません。このエラーメッセージは、CIM Object Manager のクラスパスに以下のすべてが適切であるクラスが含まれていないことを示します。
プロバイダクラスの名前
プロバイダクラスのパラメータ
プロバイダが定義される CIM クラス
CIM Object Manager のクラスパスを設定します。
NO_QUALIFIER_VALUE |
NO_QUALIFIER_VALUE エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、要素 {1} を変更する修飾子の名前に置換されます。
{1} は、修飾子の参照先である要素です。{1} は、修飾子に応じてクラス、プロパティ、メソッド、または参照のいずれかです。
NO_QUALIFIER_VALUE = Qualifier [SOURCE] for Solaris_ComputerSystem has no value.
原因:プロパティまたはメソッドに修飾子が指定されましたが、修飾子に値が含まれていません。たとえば、修飾子 VALUES には文字列配列を指定する必要があります。必要な文字列配列なしで VALUES 修飾子が指定されると、NO_QUALIFIER_VALUE エラーメッセージが表示されます。
対処方法:修飾子に必要なパラメータを指定します。各修飾子に必要な属性については、Distributed Management Task Force による CIM Specification (URL: http://dmtf.org/spec/cims.html) を参照してください。
NO_SUCH_METHOD |
NO_SUCH_METHOD エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、指定されたメソッドの名前に置換されます。
{1} は、指定されたクラスの名前に置換されます。
NO_SUCH_METHOD = Method Configure() does not exist in class Solaris_ComputerSystem
原因:指定されたクラスにメソッドが定義されなかったことが考えられます。指定されたクラスにメソッドが定義されている場合には、定義内でスペルミスにより別のメソッドが指定されたか、入力ミスの可能性があります。
対処方法:指定されたクラスのオペレーションとしてメソッドを定義するか、あるいはメソッド名とクラス名が正しく入力されているか確認します。
NO_SUCH_PRINCIPAL |
NO_SUCH_PRINCIPAL エラーメッセージはパラメータ {0} を使用しますが、このパラメータはプリンシパル (ユーザーアカウント) の名前に置換されています。
例:NO_SUCH_PRINCIPAL = Principal molly not found.
原因:指定されたユーザーアカウントが見つかりません。ログイン時にユーザー名の入力が正しく行われなかったか、あるいはそのユーザーにユーザーアカウントが設定されていません。
対処方法:ログイン時にユーザー名を正しく入力します。そのユーザーにユーザーアカウントが設定されていることを確認します
NO_SUCH_QUALIFIER1 |
NO_SUCH_QUALIFIER1 エラーメッセージはパラメータ {0} を使用しますが、このパラメータは未定義の修飾子の名前に置換されています。
例:NO_SUCH_QUALIFIER1 = Qualifier [LOCAL] not found.
原因:新しい修飾子が指定されましたが、この修飾子は拡張スキーマの一部として定義されていません。特定のクラスのプロパティまたはメソッドに有効な修飾子として認識されるように、この修飾子を CIM スキーマまたは拡張スキーマの一部として定義する必要があります。
対処方法:この修飾子を拡張スキーマの一部として定義するか、あるいは標準の CIM 修飾子を使用します。標準の CIM 修飾子と CIM スキーマの修飾子の使用法については、Distributed Management Task Force による CIM Specification (URL: http://www.dmtf.org/spec/cims.html) を参照してください。
NO_SUCH_QUALIFIER2 |
NO_SUCH_QUALIFIER2 エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、修飾子が変更するクラス、プロパティ、またはメソッドの名前に置換されます。
{1} は、定義されていない修飾子の名前に置換されます。
NO_SUCH_QUALIFIER2 = Qualifier [LOCAL] not found for CIM_LogicalElement
原因:特定のクラスのプロパティまたはメソッドを変更するために新しい修飾子が指定されましたが、その修飾子は拡張スキーマの一部として定義されていません。特定のクラスのプロパティまたはメソッドに有効な修飾子として認識されるように、この修飾子を CIM スキーマまたは拡張スキーマの一部として定義する必要があります。
対処方法:この修飾子を拡張スキーマの一部として定義するか、あるいは標準の CIM 修飾子を使用します。標準の CIM 修飾子と CIM スキーマの修飾子の使用法については、Distributed Management Task Force による CIM Specification (URL: http://www.dmtf.org/spec/cims.html) を参照してください。
NO_SUCH_SESSION |
エラーメッセージ NO_SUCH_SESSION はパラメータ {0} を使用しますが、このパラメータはセッション識別子に置換されています。
例:NO_SUCH_SESSION = No such session 4002.
原因:このメッセージは、セッションが不正侵入者によって侵害された場合に表示されます。CIM Object Manager は、第三者が故意にデータ変更を試みていることを検出すると、セッションを削除します。Solaris WBEM Services のセキュリティ機能の詳細は、第 12 章「セキュリティの管理」を参照してください。
対処方法:CIM 環境のセキュリティが保護されていることを確認します。
NOT_HELLO |
NOT_HELLO エラーメッセージは、パラメータを使用しません。
例:NOT_HELLO = Not a Hello message.
原因:このエラーメッセージは、hello メッセージ (CIM Object Manager に送信される最初のメッセージ) 内のデータが破損している場合にセキュリティが侵害されたことを示すために表示されます。
対処方法:このエラーメッセージに対しての解決方法はありません。Solaris WBEM Services のセキュリティ機能の詳細は、第 12 章「セキュリティの管理」を参照してください。
NOT_INSTANCE_PROVIDER |
NOT_INSTANCE_PROVIDER エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、InstanceProvider インタフェースの定義が試みられているインスタンスの名前に置換されます。
{1} は、InstanceProvider インタフェースを実装していない Java プロバイダクラスの名前に置換されます。指定されたクラスのインスタンスをすべて列挙するには、InstanceProvider インタフェースを指定する必要があります。
NOT_INSTANCE_PROVIDER = device_prop_provider for class Solaris_Provider does not implement InstanceProvider.
原因:CLASSPATH 環境変数で指定されている Java プロバイダクラスが、InstanceProvider インタフェースを実装していません。
対処方法:クラスパスに存在する Java プロバイダクラスが InstanceProvider インタフェースを実装していることを確認します。プロバイダを宣言するには、クラス定義に public class <Solaris> implements InstanceProvider を使用します。Solaris WBEM Services プロバイダの実装方法については、第 7 章「プロバイダプログラムの作成」を参照してください。
NOT_METHOD_PROVIDER |
NOT_METHOD_PROVIDER エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、MethodProvider インタフェースの定義が試みられているメソッドの名前に置換されます。MethodProvider が定義されると、指定されたメソッドがプログラム内で実装され、実行されます。
{1} は、MethodProvider インタフェースを実装していない Java プロバイダクラスの名前に置換されます。
NOT_METHOD_PROVIDER = Provider device_method_provider for class Solaris_Provider does not implement MethodProvider.
原因:クラスパスに存在する Java プロバイダクラスが MethodProvider インタフェースを実装していません。
対処方法:クラスパスに存在する Java プロバイダクラスが MethodProvider インタフェースを実装していることを確認します。プロバイダを宣言するには、クラス定義に public class <Solaris> implements MethodProvider を使用します。Solaris WBEM Services プロバイダの実装方法については、第 7 章「プロバイダプログラムの作成」を参照してください。
NOT_PROPERTY_PROVIDER |
NOT_PROPERTY_PROVIDER エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、PropertyProvider インタフェースの定義が試みられているメソッドの名前に置換されます。PropertyProvider インタフェースは、指定されたプロパティの値の検出に使用されます。
{1}は、PropertyProvider インタフェースを実装していない Java プロバイダクラスの名前に置換されます。
NOT_PROPERTY_PROVIDER = Provider device_property_provider for class Solaris_Provider does not implement PropertyProvider.
原因:クラスパスに存在する Java プロバイダクラスが PropertyProvider インタフェースを実装していません。
対処方法:クラスパスに存在する Java プロバイダクラスが PropertyProvider インタフェースを実装していることを確認します。プロバイダを宣言するには、コマンド public class <Solaris> implements PropertyProvider を使用します。Solaris WBEM Services プロバイダの実装方法については、第 7 章「プロバイダプログラムの作成」を参照してください。
NOT_RESPONSE |
NOT_RESPONSE エラーメッセージは、パラメータを使用しません。
例:NOT_RESPONSE = Not a response message.
原因:このエラーメッセージは、CIM Object Manager からの最初の応答メッセージが破損している場合にセキュリティが侵害されていることを示すために表示されます。
対処方法:このエラーメッセージに対しての解決方法はありません。Solaris WBEM Services のセキュリティ機能の詳細は、第 12 章「セキュリティの管理」を参照してください。
PROPERTY_OVERRIDDEN |
PROPERTY_OVERRIDDEN エラーメッセージは、次の 3 つのパラメータを使用します。
{0} は、パラメータ {1} によって示されるプロパティのオーバーライドを試みているプロパティの名前に置換されます。
{1} は、すでにオーバーライドされているプロパティの名前に置換されます。
{2} は、パラメータ {1} で示されるプロパティをオーバーライドしたプロパティの名前に置換されます。
PROPERTY_OVERRIDDEN = Property Volume cannot override MaxCapacity which is already overridden by RawCapacity
原因:別のプロパティによってすでにオーバーライドされているプロパティのオーバーライドを試みるプロパティが指定されました。オーバーライド済みのプロパティを再度オーバーライドすることはできません。
対処方法:オーバーライドする別のプロパティを指定します。
PS_CONFIG |
PS_CONFIG エラーメッセージは、エラー原因となる状況の説明に置換されるパラメータ {0} を使用します。この説明は、リポジトリに使用されているデータベースの種類と、エラーメッセージを生成する状況の種類によって異なります。
PS_CONFIG = The persistent store configuration is incorrect or has not been completed. You may need to run the wbemconfig script.
原因:Solaris WBEM Services では、インストール後 wbemconfig スクリプトを実行する必要があります。wbemconfig スクリプトは、固定記憶域の設定と、CIM スキーマクラスと Solaris スキーマクラスを提供する MOF ファイルのコンパイルを行います。このエラーメッセージは、Solaris WBEM Services がインストールされたあと wbemconfig スクリプトが実行されなかった場合に表示されます。インストールの後にリポジトリが設定されてからこのエラーメッセージが表示される場合は、データベースの設定が壊れている可能性があります。
対処方法:wbemconfig スクリプトを実行します。wbemconfig スクリプトの詳細は、第 10 章「Solaris WBEM Services のインストール」を参照してください。
PS_UNAVAILABLE |
PS_UNAVAILABLE エラーメッセージはパラメータ {0} を使用しますが、このパラメータは固定記憶域が使用できなくなった理由を説明するメッセージに置換されています。
例:PS_UNAVAILABLE = The persistent store is unavailable. The exception thrown by the repository is 'segmentation fault.'
原因:このエラーメッセージは、CIM Repository が使用できない場合に表示されます。このような状況は、CIM Repository が常駐しているホストが保守のために一時的に停止される場合や、このホストが破損したためにリポジトリが停止されて別のホストに復元される場合などに発生します。
対処方法:CIM WorkShop での作業中にこのメッセージが表示される場合は、「CIM WorkShop オーセンティケーション (CIM WorkShop authentication)」ダイアログボックスを表示するアイコンをクリックします。続いて、「ホスト (Host)」フィールドで、CIM Repository と CIM Object Manager を実行している別のホストの名前を入力します。「ネームスペース (Namespace)」フィールドにネームスペース名を入力し、続いてユーザー名とパスワードを入力してログインします。MOF コンパイラの実行時にこのメッセージを受け取る場合は、CIM Repository と CIM Object Manager を実行している別のホストを指定するコマンド mofcomp -c hostname を入力します。mofcomp は MOF コンパイラを起動するコマンド、-c は CIM Object Manager を実行しているホストコンピュータを指定するためのパラメータ、hostname は指定されるコンピュータの名前です。
QUALIFIER_UNOVERRIDABLE |
QUALIFIER_UNOVERRIDABLE エラーメッセージは、次の 2 つのパラメータを使用します。
{0} は、DisableOverride フレーバが設定されている修飾子の名前に置換されます。
{1} は、{0} によって無効になるように設定されている修飾子の名前に置換されます。
QUALIFIER_UNOVERRIDABLE = Test cannot override qualifier Standard because it has DisableOverride flavor.
原因:指定された修飾子のフレーバが DisableOverride または Override=False に設定されているため、この修飾子は別の修飾子をオーバーライドできません。
対処方法:この修飾子の特性を、EnableOverride または Override=True に設定し直します。
REF_REQUIRED |
REF_REQUIRED エラーメッセージはパラメータ {0} を使用しますが、このパラメータは関連を持つように指定されたクラスの名前に置換されています。
例:REF_REQUIRED = Association class CIM_Chassis needs at least two refs.
原因:関連を持つようにあるクラスが設定されましたが、参照が指定されていません。Common Information Model では、関連は 2 つ以上の参照を含む必要があります。
対処方法:クラスに参照を設定し、その後関連を設定します。
SCOPE_ERROR |
SCOPE_ERROR コマンドは、次の 3 つのパラメータを使用します。
{0} は、指定された修飾子が変更するクラスの名前に置換されます。
{1} は、指定された修飾子の名前に置換されます。
{2} は、修飾子が変更する属性のタイプに置換されます。
SCOPE_ERROR = Qualifier [UNITS] for CIM_Container does not have a Property scope.
原因:CIM Specification に準拠しない方法で修飾子が指定されました。たとえば、[READ] 修飾子は、CIM Specification ではプロパティを変更するように定義されます。[READ] 修飾子のスコープは、プロパティを変更するように [READ] 修飾子に指示する定義です。[READ] 修飾子がそのスコープの指示以外の方法で使用されると (たとえばメソッドを変更するように指定されるなど)、SCOPE_ERROR メッセージが返されます。
CIM Specification は、CIM 修飾子が変更できる CIM 要素の種類を定義しています。修飾子の使用方法についてのこの定義は、修飾子のスコープと呼ばれます。ほとんどの修飾子は、プロパティまたはメソッド、あるいはこの両方の変更を指示するスコープを持ちます。また、ほとんどの修飾子は、パラメータ、クラス、関連、インジケーション、またはスキーマの変更を指示するスコープを持ちます。
指定された修飾子のスコープを確認します。CIM 修飾子の標準の定義については、Distributed Management Task Force により提供されている CIM Specification の「1. Qualifiers」(URL: http://www.dmtf.org/spec/cim_spec_v20) を参照してください。別の修飾子を使用するか、あるいは CIM 定義に従って修飾子を使用するようにプログラムを変更します。
SIGNATURE_ERROR |
SIGNATURE_ERROR エラーメッセージは、パラメータを使用しません。
例:SIGNATURE_ERROR = Signature not verified
原因:このメッセージは、メッセージが偶然に、または故意に破損された場合に表示されます。このメッセージは、メッセージが有効なチェックサムを持つチェックサムエラーとは異なりますが、署名はクライアントの公開鍵では検証できません。この保護により、セッションキーが侵害されることがあっても、セッションを作成した最初のクライアントだけが認証されます。
対処方法:セッションが不正侵入者によって侵害される場合に表示されるこのメッセージに対しての解決方法はありません。Solaris WBEM Services のセキュリティ機能の詳細は、第 12 章「セキュリティの管理」を参照してください。
TYPE_ERROR |
TYPE_ERROR エラーメッセージは、次の 5 つのパラメータを使用します。
{0} は、指定された要素 (プロパティ、メソッド、修飾子など) の名前に置換されます。
{1} は、指定された要素が属するクラスの名前に置換されます。
{2} は、要素に定義されたデータ型に置換されます。
{3} は、割り当てられた値のデータ型に置換されます。
{4} は、割り当てられた実際の値に置換されます。
TYPE_ERROR = Cannot convert sint16 4 to a string for VolumeLabel in class Solaris_DiskPartition
原因:プロパティまたはメソッドのパラメータ値と、定義されたそのデータ型が一致しません。
対処方法:プロパティまたはメソッドの値を、定義されたそのデータ型に一致させます。
UNKNOWNHOST |
UNKNOWNHOST エラーメッセージはパラメータ {0} を使用しますが、このパラメータはホストの名前に置換されています。
例:UNKNOWNHOST = Unknown host molly
原因:指定されたホストが使用できないか、あるいはこのホストが見つかりません。ホスト名のスペルが間違っている可能性もあります。このホストコンピュータが別のドメインに移されたか、あるいはドメインに属するホストのリストにそのホスト名が登録されていない可能性もあります。また、システム状況が原因でそのホストが一時的に使用できないことも考えられます。
対処方法:ホスト名のスペルを調べ、入力ミスがないか確認します。ping コマンドを使用して、そのホストコンピュータが応答していること、そのホストのシステム状況を確認します。また、そのホストが指定されたドメインに属していることを確認します。
VER_ERROR |
VER_ERROR エラーメッセージはパラメータ {0} を使用しますが、このパラメータは動作中の CIM Object Manager のバージョン番号に置換されています。
例:VER_ERROR = Unsupported version 0.
原因:Solaris WBEM Services のこのアップグレードバージョンは、現在の CIM Object Manager をサポートしていません。
対処方法:サポートされているバージョンをインストールします。