Solaris WBEM SDK 開発ガイド

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