Solaris WBEM 開発ガイド

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 クラス