Solaris WBEM 開発ガイド

第 7 章 MOF コンパイラを使用した JavaBeans 構成要素の作成

この章では、MOF (Managed Object Format) コンパイラの概要を説明します。また、mofcomp コマンドで -j オプションを使用して JavaBeans 構成要素を作成する方法についても説明します。この章の内容は次のとおりです。


注 –

MOF コンパイラの詳細については、mofcomp(1M) のマニュアルページを参照してください。


MOF コンパイラについて

MOF (Managed Object Format) は、Distributed Management Task Force (DMTF) によって開発されたコンパイラ言語です。MOF 言語は、CIM と WBEM の静的クラス、動的クラス、およびインスタンスを定義します。Solaris WBEM サービス付属の CIM および Solaris MOF ファイルを使用できます。また、独自の MOF ファイルを作成することもできます。DMTF の MOF 言語を使用して独自の MOF ファイルを作成する方法の詳細については、DMTF の Web サイト (http://www.dmtf.org) を参照してください。

MOF コンパイラ (mofcomp(1M)) は、次のタスクを実行します。

MOF ファイルは、簡単に Java プログラミング言語に変換できます。その結果、Java テクノロジベースのアプリケーションは、Java 仮想マシンを実行する任意のマシン上で MOF ファイル内のデータを解釈したり、交換したりできます。

Solaris OS のインストール時に、MOF コンパイラは、CIM スキーマおよび Solaris プラットフォームスキーマを記述する MOF ファイルをコンパイルし、これらのファイルを CIM オブジェクトマネージャリポジトリに追加します。

mofcomp を使用した JavaBeans 構成要素の生成

JavaBeans 構成要素 (Bean) は、WBEM のコンテキストで、CIM クラスおよびデータにアクセスしたり、これらを操作したりするためのメソッドを定義します。開発作業の効率化のため、mofcomp コマンドに -j オプションを指定して、MOF ファイル内の CIM クラスから Bean を生成できます。これらの自動生成された Bean はインタフェースを定義します。実装コードは追加する必要があります。


注 –

プログラムが、基盤となる JavaBeans 実装に対して行なった変更の影響を受けないようにするため、元の JavaBeans 構成要素の代わりにインタフェースを使用します。


mofcomp コマンドに -j オプションを指定した場合、Java インタフェース CIMBean.java と、このインタフェースを実装する Bean、CIMBeanImpl.java が生成されます。CIMBeanImpl.java には、生成された Bean に共通するすべてのコードが含まれます。生成されるすべての Java インタフェースは、CIMBean.java から拡張されます。生成されるすべての Bean は、CIMBeanImpl.java から拡張され、元となる実装を継承します。

MOF コンパイラの JavaBeans 生成機能では、MOF ファイルに定義された各 CIM クラスに対して、次のメソッドを含む Java プログラミング言語インタフェースを生成します。

Java インタフェースには、CIMClassBean.java という名前が付けられます。これらの Java インタフェースを実装した Bean クラス名は、CIMClassBeanImpl.java です。また CIM DisplayNameUnits、および Version 修飾子を含むプロパティのアクセス用メソッドも生成されます。

CIM クラスの OUT 修飾子パラメータを含む invokeMethod 用に、メソッドの呼び出し生成出力を保持するコンテナインタフェースが生成されます。これらのインタフェースには、CIMClass_MethodNameOutput.java という名前が付けられます。この CIMClass_MethodNameOutput.java コンテナインタフェースのインスタンスは、Bean メソッドの最後のパラメータとして必要です。オブジェクトデータ型や Bean メソッドのパラメータのデータ型は変更できないのでこのコンテナインタフェースは必須です。よってこれらのデータ型は、データの入出力には使用できません。

MOF ファイル要素

-j オプションを利用するには、MOF ファイルに PACKAGE 要素を含める必要があります。また次の形式で IMPORTS および EXCEPTIONS 要素も指定できます。

PACKAGE=NameOfJavaPackage
IMPORTS=JavaClassName1:JavaClassName2:...
EXCEPTIONS=Exception1:Exception2:...

次の表では、これらの要素について説明します。

表 7–1 MOF ファイル要素

要素 

説明 

PACKAGE

必須。MOF コンパイラによって生成されたソースファイルを含む Java パッケージ名を指定する 

IMPORTS

任意。生成されたソースファイルにインポートする Java クラスの名前を指定する。複数のクラスを指定する場合はコロン (:) で区切る。必要な数の Java クラスを複数行にわたって指定できる 

EXCEPTIONS

任意。生成されたソースファイルに追加する Java 例外の名前を指定する。複数の例外を指定する場合はコロン (:) で区切る。必要な数の Java クラス例外を複数行にわたって指定できる 


注 –

EXCEPTIONS を指定する場合、IMPORTS を指定する必要がある


CIM を Java プログラミング言語にマップする方法

次の表に、CIM 要素を Java プログラミング言語の要素にマップする方法を示します。

表 7–2 CIM 要素を Java 要素にマップする方法

CIM 要素 

Java 要素 

クラス 

生成された Java ソースファイル名のベースとして、CIM クラス名が使用される。生成された Java クラスは、MOF のクラスとサブクラスの関係に定義された継承に従う 

プロパティ 

各 CIM プロパティにアクセス用メソッドおよび変更メソッドが作成される。関連するアクセス用メソッドおよび変更メソッドのベースとして、CIM プロパティ名が使用される 

ソート方法 

各 CIM メソッドに対応する Java メソッドが作成される。関連した Java メソッド名のベースとして CIM メソッド名が使用される。戻り値は同様の Java データ型にマップされる。入力および出力パラメータが Java メソッドの引数として使用される。出力パラメータはメソッドシグニチャーに直接追加されずに、メソッドパラメータとして追加される出力コンテナオブジェクトにカプセル化される 

修飾子 

修飾子については 表 7–4 および 表 7–5 を参照

関連 

特定の要素は要求されていない 

インジケーション 

特定の要素は要求されていない 

参照方法 

それぞれの CIM 参照に対して、生成された Java インタフェースへの参照が作成される 

トリガー 

特定の要素は要求されていない 

スキーマ 

特定の要素は要求されていない 

次の表では、CIM データ型を Java データ型にマップする方法を説明します。

表 7–3 CIM データ型を Java データ型にマップする方法

CIM データ型 

Java データ型 

アクセス用メソッド 

変更メソッド 

uint8 X

UnsignedInt8

UnsignedInt8 getX();

void setX(UnsignedInt8 x);

sint8 X

Byte

Byte getX();

void setX(Byte x);

uint16 X

UnsignedInt16

UnsignedInt16 getX();

void setX(UnsignedInt16 x);

sint16 X

Short

Short getX();

void setX(Short x);

uint32 X

UnsignedInt32

UnsignedInt32 getX();

void setX(UnsignedInt32 x);

sint32 X

Integer

Integer getX();

void setX(Integer x);

uint64 X

UnsignedInt64

UnsignedInt64 getX();

void setX(UnsignedInt64 x);

sint64 X

Long

Long getX();

void setX(Long x);

String X

String

String getX();

void setX(String x);

Boolean X

Boolean

Boolean isX();

void setX(Boolean x);

real32 X

Float

Float getX();

void setX(Float x);

real64 X

Double

Double getX();

void setX(Double x);

DateTime X

CIMDateTime

CIMDateTime getX();

void setX(CIMDateTime x);

Reference X

CIMObjectPath

CIMObjectPath getX();

void setX(CIMObjectPath x);

char16 X

Character

Character getX();

void setX(Character x);

次の表にモデルのメタ構造体の定義を改良するメタ修飾子のリストを示します。これらの修飾子は、互いに排他的で、MOF 構文のオブジェクトクラスまたはプロパティ宣言の実際の使用方法を改良します。

表 7–4 メタ修飾子

修飾子 

スコープ 

型 

意味 

関連 

クラス 

Boolean 

マップに影響しない 

インジケーション 

クラス 

Boolean 

クラスは abstract クラス 

次の表では、標準修飾子と CIM オブジェクトを Bean にマップする際に与える影響について説明します。オプションの修飾子はサポートされていません。このマッピングに基づいて、個々のインタフェースおよびクラスの Javadoc API ドキュメンテーションが生成されます。

表 7–5 標準修飾子

修飾子 

スコープ 

意味 

ABSTRACT 

クラス、関連、インジケーション 

クラスは abstract クラスなので、Java プログラミング言語インタフェースに影響を与えない 

DESCRIPTION 

任意 

提供される情報によって、ソースファイルに Javadoc コメントが生成される 

DISPLAYNAME 

プロパティ 

表示名のアクセス用メソッドが作成される 

public String displayNameForProperty();

IN 

パラメータ 

メソッドシグニチャーを決定する 

OUT 

パラメータ 

メソッドパラメータシグニチャーおよび戻り値を決定する 

TERMINAL 

クラス 

クラスまたはインタフェースは、final 

UNITS 

プロパティ、メソッド、パラメータ 

ほかのアクセス用メソッドが作成される 

public String getpropertyUnits();

VALUEMAP 

プロパティ、メソッド、パラメータ 

Bean には、CIM ValueMap または Values 修飾子が設定されている CIM クラスの各プロパティの生成された定数が含まれる。定数の名前と値を取得してこれらのクラス変数を生成する方法は、プロパティとその修飾子のデータ型によって異なる


注 –

CIM 仕様で定義されている ValueMap および Values 修飾子は、修飾子名から予想される意味とは異なる場合がある。ValueMap はプロパティの正当な値セットを定義する。Values は、整数値と文字列の相互変換を行う


VALUES 

プロパティ、メソッド、パラメータ 

Bean には、CIM ValueMap または Values 修飾子が設定されている CIM クラスの各プロパティの生成された定数が含まれる。定数の名前と値を取得してこれらのクラス変数を生成する方法は、プロパティとその修飾子のデータ型によって異なる


注 –

CIM 仕様で定義されている ValueMap および Values 修飾子は、修飾子名から予想される意味とは異なる場合がある。ValueMap はプロパティの正当な値セットを定義する。Values は、整数値と文字列の相互変換を行う


VERSION 

クラス、スキーマ、関連、インジケーション 

クラスには、getClassVersion() メソッドが設定されている

次の表では、MOF 要素を Java 要素にマップする方法を説明します。

表 7–6 MOF 要素を Java 要素にマップする方法

MOF 要素 

Java 要素 

説明修飾子 

クラス、プロパティ、またはメソッドの説明 

クラスの完全な MOF 表現 

Java インタフェースと実装される Bean を指定する Javadoc クラスの説明 

JavaBeans 構成要素の生成例

次の例では、mofcomp コマンドに -j オプションを使用したときに生成される JavaBeans を示します。

mofcomp コマンドは、スーパーユーザーとして実行するか、コンパイルを実行中の名前空間に書き込み権を持つユーザーとして実行する必要があります。


注 –

mofcomp コマンドに -u (ユーザー) オプションと -p (パスワード) オプションの両方を指定することは避けてください。コマンド行に直接パスワードを入力する代わりに、-u オプションだけを指定して、暗号化されたパスワードの入力プロンプトが表示されるようにすることができます。



例 7–1 JavaBeans 構成要素の生成


/usr/sadm/bin/mofcomp -u root p mypassword -o /tmp \
-j /tmp/bean.txt /usr/sadm/mof/Simple.mof

/usr/sadm/mof/Simple.mof の内容は次のとおりです。


/usr/sadm/mof/Simple.mof
-------------------
#pragma include ("CIM_Core26.mof")

class Simple_Class {

      [Key, Description ("Name of the class.") ]
   string Name;

      [Description ("Method to print the contents of the class.") ]
   string printClass();

};

/tmp/bean.txt の内容は次のとおりです。


/tmp/bean.txt
----------
PACKAGE=foo.com
IMPORTS=java.lang.Exception
EXCEPTIONS=Exception

CIMBean.java の内容は次のとおりです。

package foo.com;

import javax.wbem.cim.CIMException;
import javax.wbem.client.CIMOMHandle;
import javax.wbem.cim.CIMInstance;

/**
 * このインタフェースは、CIMBeanImpl とそのサブクラスに 
 * よって実装されるメソッドを定義する。CIMBeanImpl は、 
 * 'mofcomp -j' によって生成される Java ソースの基底クラスで構成される
 */
public interface CIMBean {

    /**
     * このメソッドは CIMBean の CIMOMHandle を返す
     * 
     * @return	CIMOMHandle	CIMOM のハンドル
     */
    public CIMOMHandle getCIMOMHandle();

    /**
     * このメソッドは、CIMBean の CIMOMHandle を指定の値に設定する
     * 
     * @param	CIMOMHandle	CIMOM のハンドル
     */
    public void setCIMOMHandle(CIMOMHandle handle);

    /**
     * このメソッドは CIMBean の CIMInstance を返す
     * 
     * @return	CIMInstance	 管理されている CIMInstance のハンドル
     */
    public CIMInstance getCIMInstance();

    /**
     * このメソッドは、CIMBean の CIMInstance を指定の値に設定する
     * 
     * @param	CIMInstance	 管理されている CIMInstance のハンドル
     */
    public void setCIMInstance(CIMInstance instance);

    /**
     * このメソッドは、リモート呼び出しを実行して
     * CIMOM の CIMInstance を更新する
     */
    public void update() throws CIMException;

    /**
     * このメソッドは、リモート呼び出しを実行して
     * CIMOM の CIMInstance の指定された CIMProperty を更新する
     * 
     * @param	String	CIMInstance では、このプロパティ名が
     * 更新される
     * @param	Object	CIMProperty では、このプロパティ値が
     * 更新される
     */
    public void update(String propName, Object value) throws CIMException;

    /**
     * このメソッドは、リモート呼び出しを実行して
    * CIMOM の CIMInstance を削除する
     */
    public void delete() throws CIMException;

    /**
     * このメソッドは、CIMInstance のキー修飾プロパティ
     * 名の文字列型の配列を返す。これは、CIMInstance に
     * 修飾子情報が含まれない場合に CIMInstance の
     * CIMObjectPath を作成するために必要
     * 
     * @return String Version  修飾子の値または "-1" (値が
     * 指定されていない場合)
     */
    public String[] getBeanKeys();

    /**
     * このメソッドは、CIM クラスの Version 修飾子の値または
     * "-1" (この修飾子に値が設定されていない場合) を返す
     * 
     * @return	String[]	キー修飾プロパティ名
     */
    public String getBeanVersion();

    /**
     * このメソッドは CIMBean の文字列表現を返す。 
     * このメソッドは、デバッグ用。文字列の
     * 形式は、実装ごとに異なる場合がある。空の文字列が
     * 返されるかもしれないが、NULL 文字は返されない 
     * 
     * @return	String	Bean の文字列表現
     */
    public String toString();

} // CIMBean インタフェース

CIMBeanImpl.java の内容は次のとおりです。

package foo.com;

import java.io.Serializable;
import java.util.*;
import javax.wbem.client.CIMOMHandle;
import javax.wbem.cim.CIMException;
import javax.wbem.cim.CIMInstance;
import javax.wbem.cim.CIMObjectPath;
import javax.wbem.cim.CIMValue;
import javax.wbem.client.CIMOMHandle;

/**
 * このクラスは CIMBean インタフェースを実装する。'mofcomp -j' によって
 * 生成される Java ソースコードの基底クラス 
 */
public class CIMBeanImpl implements CIMBean, Serializable {

    private CIMInstance	cimInstance = null;
    private CIMOMHandle	cimomHandle = null;

    /**
     * このデフォルトコンストラクタはパラメータを取らず、 
     * CIMBeanImpl の空のインスタンスを作成する
     */
    public CIMBeanImpl() {

	super();

    } // コンストラクタ

    /**
     * このコンストラクタは指定の CIMOMHandle および CIMInstance を取り、
     * CIMBeanImpl を作成する
     * 
     * @param	CIMOMHandle	CIMOM のハンドル
     * @param	CIMInstance	管理対象の CIMInstance のハンドル
     */
    public CIMBeanImpl(CIMOMHandle handle, CIMInstance instance) {

	super();
	cimomHandle = handle;
	cimInstance = instance;

    } // コンストラクタ

    /**
     * このメソッドは CIMBean の CIMOMHandle を返す
     * 
     * @return	CIMOMHandle	CIMOM のハンドル
     */
    public CIMOMHandle getCIMOMHandle() {

	return (cimomHandle);

    } // getCIMOMHandle

    /**
     * このメソッドは CIMBean の CIMOMHandle に指定された値を設定する
     * 
     * @param	CIMOMHandle	CIMOM のハンドル
     */
    public void setCIMOMHandle(CIMOMHandle handle) {

	this.cimomHandle = handle;

    } // setCIMOMHandle

    /**
     * このメソッドは CIMBean の CIMInstance を返す
     * 
     * @return	CIMInstance	管理対象の CIMInstance のハンドル
     */
    public CIMInstance getCIMInstance() {

	return (cimInstance);

    } // getCIMInstance

    /**
     * このメソッドは CIMBean の CIMInstance を指定された値に設定する
     * 
     * @param	CIMInstance	管理対象の CIMInstance のハンドル
     */
    public void setCIMInstance(CIMInstance instance) {

	this.cimInstance = instance;

    } // setCIMInstance

    /**
     * このメソッドはリモート呼び出しを実行して、CIMOM 内の CIMInstance を
     * 更新する 
     */
    public void update() throws CIMException {

	cimomHandle.setInstance(getObjectPath(), cimInstance);

} // 更新

    /**
     *このメソッドはリモート呼び出しを実行して、CIMOM 内の CIMInstance の
     * 指定の CIMProperty を更新する 
     * 
     * @param	String	CIMInstance 内の更新されるプロパティの名前
     * @param	Object	CIMProperty 内の更新されるプロパティの値
     */
    public void update(String propName, Object value) throws CIMException {

	cimomHandle.setProperty(getObjectPath(), propName, new CIMValue(value));

    } // 更新

    /**
     * このメソッドはリモート呼び出しを実行して、CIMOM 内の CIMInstance を
     * 削除する
     */
    public void delete() throws CIMException {

	cimomHandle.deleteInstance(getObjectPath());

    } // 削除

    /**
     * サブクラスが指定の CIMProperty の CIMValue 内の
     * オブジェクトを取得するときに使用できる簡易メソッド。
     * 注: 返されるオブジェクトは NULL の可能性がある 
     * 
     * @param	String	プロパティ名。このプロパティ名の値が取得される
     * @return	Object	CIMProperty の CIMValue に含まれるオブジェクト
     */
    protected Object getProperty(String propName) {

	try {

	    return (cimInstance.getProperty(propName).getValue().getValue());

	} catch (NullPointerException npe) {
	}
	return ((Object)null);

    } // getProperty

    /**
     * サブクラスが指定の CIMProperty の CIMValue 内の
     * Vector に等しい String[] を取得するときに使用できる簡易メソッド。
     * 
     * 注: 返される String[] は NULL の可能性もある 
     * 
     * @param	String	このプロパティ名の値を取得する
     * @param	String[]	プロパティ Values の修飾子データ
     * @param	Object[]	プロパティ ValueMap の修飾子データ
     * @return	String[]	プロパティ値の定数コンテナ
     */
    protected String[] getArrayProperty(String propName, String[] 
    valueArr,	Object[] valueMapArr) {

	List propList = null;
	try {

	    propList =
		((List)cimInstance.getProperty(propName).getValue().getValue());

	} catch (NullPointerException npe) {
	}

	if (propList != null) {

	    String[] returnArr;
	    returnArr = new String[propList.size()];
	    ListIterator listIterator = propList.listIterator();
	    int counter = 0;
	    while (listIterator.hasNext()) {

		returnArr[counter] = valueArr[getArrayIndex(valueMapArr,
		    listIterator.next())];
		counter++;

	    }
	    return (returnArr);

	}
	return ((String[])null);

    } // getArrayProperty

    /**
     * このメソッドはプロパティ値によって参照される
     * CIMInstance (指定されたオブジェクトパス) を取得し、これを
     * 指定の Bean 内に設定する。関連プロパティのアクセスメソッド
     * によって使用されるメソッド
     * @param	CIMObjectPath	CIMInstance のオブジェクトパス
     * @param	CIMBeanImpl	 取得される CIMInstance の Bean コンテナ
     */
    protected void getAssociationProperty(CIMObjectPath cop, 
    CIMBeanImp	bean) throws CIMException {

	cop.setNameSpace("");
	CIMInstance ci = cimomHandle.getInstance(cop, false, true, true,
	    (String[])null);
	bean.setCIMInstance(ci);
	bean.setCIMOMHandle(cimomHandle);

    } // getAssociationProperty

    /**
     * サブクラスが、指定の名前の CIMProperty 内に指定の Object 値を
     * 含む CIMValue を設定するときに使用できる簡易メソッド 
     * 
     * 
     * @param	String	新しい値を設定されるプロパティの名前
     * @param	Object	CIMInstance で更新されるプロパティ値
     */
    protected void setProperty(String propName, Object propValue)throws
	IllegalArgumentException {

	cimInstance.setProperty(propName, new CIMValue(propValue));

    } // setProperty

    /**
     * サブクラスが指定の名前の CIMProperty 内に指定の String[] に
     * 等しい Vector を含む CIMValue を設定するときに使用できる
     * 簡易メソッド 
     * 
     * @param	String	値を取得されるプロパティの名前
     * @param	String[]	プロパティ Values の修飾子のデータ
     * @param	Object[]	プロパティ ValueMap の修飾子のデータ
     * @param	String[]	CIMInstance 内に設定されるプロパティ値
     */
    protected void setArrayProperty(String propName, String[] valueArr,
	Object[] valueMapArr, String[] propValues) {

	Vector vPropValue = new Vector(propValues.length);
	for (int i = 0; i < propValues.length; i++) {

	    vPropValue.addElement(valueMapArr[getArrayIndex(valueArr,
		propValues[i])]);

	}
	setProperty(propName, vPropValue);

    } // setArrayProperty

    /**
     * このメソッドはCIMInstance 内の Key 修飾プロパティ名の文字列配列を返す。
     * これは、CIMInstance に修飾子の情報が含まれていない場合に、その、CIMObjectPath
     * を構築するために必要
     * 
     * 
     * @return	String[]	Key 修飾プロパティ名の配列
     */
    public String[] getBeanKeys() {

	return ((String[])null);

    } // getBeanKeys

    /**
     * このメソッドはクラスの CIMInstance の CIMObjectPath を返す
     * 
     * @return	CIMObjectPath	 CIMInstance のオブジェクトパス
     */
    protected CIMObjectPath getObjectPath() {

	CIMObjectPath cop = new CIMObjectPath(cimInstance.getClassName());
	Vector vKeys = cimInstance.getKeyValuePairs();
	if ((vKeys != null) && (vKeys.size() > 0)) {

	    cop.setKeys(vKeys);

	} else {

	    String[] keyArr = getBeanKeys();
	    if (keyArr != null) {

		String keyProperty;
		for (int i = 0; i < keyArr.length; i++) {

		    keyProperty = keyArr[i];
		    cop.addKey(keyProperty,
			(cimInstance.getProperty(keyProperty)).getValue());

		}

	    }

	}
	return (cop);

    } // getObjectPath

    /**
     * 指定の配列内の指定のオブジェクトのインデックスを返す
     * 簡易メソッド。オブジェクトが配列内に存在しない
     * 場合は "-1" を返す
     * 
     * @param	Object[]	オブジェクトのインデックスの検索先となるオブジェクト配列
     * @param	Object	インデックスを検索するオブジェクト配列内のオブジェクト
     * @return	int	オブジェクト配列内のオブジェクトのインデックス
     */
    protected int getArrayIndex(Object[] objArr, Object obj) {

	List arrList = Arrays.asList(objArr);
	return (arrList.indexOf(obj));

    } // getArrayIndex

    /**
     * このメソッドは CIM クラスの Version 修飾子の値、または "-1"
     * (修飾子が存在しない場合) を返す
     * 
     * @return	String	Version 修飾子の値、または "-1"
     * (修飾子が存在しない場合)
     */
    public String getBeanVersion() {

	return ("-1");

    } // getBeanVersion

    /**
     * このメソッドは、CIMBean の文字列表現を返す。 
     * このメソッドは、デバッグの目的で使用される。
     * 文字列の形式は、実装によって異なる。空白文字列が
     * 返される場合もあるが、NULL は返されない
     * 
     * @return	String	Bean の文字列表現
     */
    public String toString() {

	return (cimInstance.toString());

    } // toString

} // Class CIMBeanImpl

Simple_ClassBean.java の内容は次のとおりです。

package foo.com;

import javax.wbem.client.*;
import javax.wbem.cim.*;
import java.util.*;
import java.lang.Exception;

/**
 * このインタフェースには、CIM class Simple_Class で定義された
* すべてのプロパティのアクセス用メソッドおよび変更メソッドが含まれる。
* またこのクラスに定義された invokeMethods と等価のメソッドも含まれる。
* このインタフェースは、Simple_ClassBeanImpl によって実装される。
* CIM class Simple_Class は、次のように記述される
 */
public interface Simple_ClassBean extends CIMBean {

    /**
     * このメソッドは、Simple_Class.Name プロパティ値を返す。
     * このプロパティは、次のように記述される 
     * 
     * クラス名
     * 
     * @return	String	現在の Name プロパティ値
     * @exception	Exception	
     */
    public String getName() throws Exception;

    /**
     * このメソッドは、Simple_Class.Name プロパティ値を設定 
     * する。このプロパティは、次のように記述する 
     * 
     * クラス名
     * 
     * @param	String	新しい Name プロパティ値
     * @exception	Exception	
     */
    public void setName(String name) throws Exception;


    /**
     * このメソッドは、Simple_Class.printClass() メソッドを 
     * 呼び出す。このメソッドは、次のように記述する 
     * 
     * クラスのコンテンツを出力するメソッド
     * 
     * @return	String	printClass() 呼び出しの戻り値
     * @exception	Exception	
     */
    public String printClass() throws Exception, CIMException;

} // Simple_ClassBean インタフェース

Simple_ClassBeanImpl.java の内容は次のとおりです。

package foo.com;

import javax.wbem.client.*;
import javax.wbem.cim.*;
import java.util.*;
import java.lang.Exception;

/**
 * このクラスには、CIM class Simple_Class で定義された
 * すべてのプロパティのアクセス用メソッドおよび変更メソッドが含まれる。
 * またこのクラスに定義された invokeMethods と等価のメソッドも含まれる。
 * このクラスは、Simple_ClassBean インタフェースを実装する。
 * CIM class Simple_Class は、次のように記述される
 */
public class Simple_ClassBeanImpl extends CIMBeanImpl implements 
    Simple_ClassBean {

     private CIMOMHandle cimomHandle = null;
    private CIMInstance cimInstance = null;
    private final static String[] keysArr = {"Name"};

    /**
     * このコンストラクタは、Simple_ClassBean インタフェースを
     * 実装する Simple_ClassBeanImpl Class を作成し、
     * Bean に CIM class Simple_Class をカプセル化する。
     * CIM class Simple_Class は次のように記述される
     * 
     * @param	CIMOMHandle	CIMOM のハンドル
     * @param	CIMInstance 	管理されている CIMInstance のハンドル
     */
    public Simple_ClassBeanImpl(CIMOMHandle handle, CIMInstance instance) 
	{

 	super(handle, instance);

	this.cimomHandle = handle;
	this.cimInstance = instance;

    } // コンストラクタ

    /**
     * このメソッドは、CIM クラスに定義された Key
     * 修飾プロパティの名前で文字列の配列を返す。
     * Key 修飾子が CIMInstance に含まれない場合、この
     * メソッドを使用して Bean によって管理される
     * CIMInstance の CIMObjectPath を構築する
     * 
     * @return	String[]	Key 修飾プロパティ名の配列
     */
    public String[] getBeanKeys() {

	return keysArr;

    } // getBeanKeys

    /**
     * このメソッドは、Simple_Class.Name プロパティ値を返す。 
     * このプロパティは次のように記述される
     * 
     * クラス名
     * 
     * @return	String	現在の Name プロパティ値
     * @exception	Exception	
     */
    public String getName() throws Exception {

	return (String)getProperty("Name");

    } // getName

    /**
     * このメソッドは、Simple_Class.Name プロパティ値を設定 
     * する。このプロパティは、次のように記述される
     * 
     * クラス名
     * 
     * @param	String	新しい Name プロパティ値
     * @exception	Exception	
     */
    public void setName(String name) throws Exception {

	setProperty("Name", name);

    } // setName


    /**
     * このメソッドは Simple_Class.printClass() メソッドを 
     * 呼び出す。このメソッドは、次のように記述される
     * 
     * クラスのコンテンツを出力するメソッド
     * 
     * @return	String	printClass() 呼び出しの戻り値
     * @exception	Exception	
     */
    public String printClass() throws Exception, CIMException {

	Vector vInParams = new Vector();
	Vector vOutParams = new Vector();

	CIMValue cv = cimomHandle.invokeMethod(cimInstance.getObjectPath(), 
 "printClass", vInParams, vOutParams);
	return (String)cv.getValue();

    } // printClass
} // Simple_ClassBeanImpl クラス