Solaris WBEM SDK 開発ガイド

第 2 章 MOF コンパイラを使用した JavaBeans の作成

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


注 -

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


MOF コンパイラについて

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

MOF コンパイラ mofcomp(1M) は、MOF ファイルを構文解析し、クラスおよびインスタンスを Java クラスに変換します。そのあと、クラスをデフォルトの root\cimv2 または他の指定された名前空間に追加します。MOF ファイルは簡単に Java に変換できるので、Java ベースのアプリケーションでは、Java 仮想マシン (JVM) を実行するコンピュータ上の MOF ファイルに含まれるデータを解釈および交換することができます。

Solaris のインストール時に MOF コンパイラにより、CIM スキーマおよび Solaris スキーマを記述する MOF ファイルが自動的にコンパイルされ、それらのファイルが CIM Object Manager Repository に追加されます。

mofcomp を使用した JavaBeans の生成

WBEM、JavaBeansTM または Bean のコンテキストで CIM クラスおよびデータ要素にアクセスし、操作するためのメソッドおよびインスタンスを定義します。mofcomp コマンドで -j オプションを指定すると、MOF ファイルで定義された CIM クラスを表す JavaBeans が自動的に生成されるので、開発作業を簡略化できます。これらの自動生成された JavaBeans によってインタフェースが定義されます。実装コードを追加するかどうかは、開発者によって異なります。


注 -

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


mofcomp コマンドに -j オプションを指定すると、CIMBean.java というベース Java インタフェースと CIMBeanImpl.java というインタフェースを実装するベース Bean が生成されます。CIMBeanImpl.java には、生成された Bean に共通するすべてのコードが含まれます。生成されたすべての Java インタフェースは CIMBean.java から継承され、生成されたすべての Bean は CIMBeanImpl.java から継承されるため、結果的にベース実装から継承されることになります。

MOF ファイルに定義されている各 CIM クラス用に MOF コンパイラの JavaBeans 生成機能は、次の要素で構成される Java インタフェースを生成します。

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

CIM クラスの OUT 修飾子パラメータを含む invokeMethod 用に、メソッドの呼び出し生成出力を保持するコンテナインタフェースが生成されます。これらのインタフェースには、CIMClass_ MethodNameOutput.java という名前が付けられます。この CIMClass_MethodNameOutput.java コンテナインタフェースのインスタンスは、Bean メソッドの最後のパラメータとして必要です。Bean メソッドでパラメータとして使用される 1 つまたは複数の Object データ型は可変データ型ではないため、このコンテナインタフェースが必要になります。そのため、入力および出力データの両方を保持するためには使用できません。

MOF ファイル要素

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

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

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

表 2-1 MOF ファイル要素

要素 

説明 

PACKAGE

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

IMPORTS

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

EXCEPTIONS

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


注 -

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


CIM を Java にマップする方法

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

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

CIM 要素 

Java 要素 

クラス 

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

プロパティ 

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

メソッド 

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

修飾子 

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

関連 

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

インジケーション 

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

参照方法 

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

トリガー 

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

スキーマ 

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

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

表 2-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 構文のオブジェクトクラスまたはプロパティ宣言の実際の使用方法を改良します。

表 2-4 メタ修飾子

修飾子 

スコープ  

型 

意味 

関連 

クラス 

Boolean 

マップに影響しない 

インジケーション 

クラス 

Boolean 

クラスは abstract (抽象) クラス 

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

表 2-5 標準修飾子

修飾子 

スコープ  

意味 

ABSTRACT

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

クラスは abstract クラスなので、Java インタフェースに影響を与えない 

DESCRIPTION

任意 

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

DISPLAYNAME

プロパティ 

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

public String displayNameFor Property();

IN

パラメータ 

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

OUT

パラメータ 

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

TERMINAL

クラス 

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

UNITS

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

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

public String get propertyUnits();

VALUMAP

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

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 要素にマップする方法を説明します。

表 2-6 MOF 要素を Java 要素にマップする方法

MOF 要素 

Java 要素 

説明修飾子 

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

クラスの完全な MOF 表現 

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

JavaBeans の生成の例

ここでは、mofcomp コマンドに -j オプションを指定した場合に生成される JavaBeans の例を示します。

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


注 -

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



例 2-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;

    } // constructor

    /**
     * このメソッドは、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);

} // update

    /**
     * このメソッドは、リモート呼び出しを実行して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));

    } // update

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

	cimomHandle.deleteInstance(getObjectPath());

    } // delete

    /**
     * サブクラスは、この簡易メソッドを使用して指定された 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 に設定する。
     * このメソッドは、Association プロパティのアクセス用メソッド
     * により使用される
     * 
     * @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

} // 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_ClassBeanImpl インタフェースを実装する。
 * 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 を作成し、
     * Java 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 クラス