BEA ホーム | 製品 | dev2dev | support | askBEA |
|
e-docs > WebLogic Server > WebLogic jCOM プログラマーズ ガイド > WebLogic Server から COM アプリケーションへの呼び出し |
WebLogic jCOM プログラマーズ ガイド |
WebLogic Server から COM アプリケーションへの呼び出し
以下の節では、WLS-to-COM アプリケーション、すなわち、WebLogic jCOM を使用して WebLogic Server から COM オブジェクト上にメソッドを呼び出すアプリケーションを準備およびデプロイする方法を説明します。
ネイティブ モードを使用する WLS-to-COM アプリケーションには、特別な要件が 2 つあります。
WebLogic Server から COM アプリケーションを呼び出す主な手順
この節では、WebLogic Server から COM アプリケーションへ呼び出す主な手順を簡単に説明します。詳細については、以降の節で説明します。
以下の節では、WebLogic Server がオブジェクトでメソッドを呼び出せるよう COM クライアントを準備する方法について説明します。
com2java GUI ツールでの Java クラスの生成
COM 型ライブラリに対して com2java GUI ツールを実行すると、COM 型ライブラリ内のクラスとインタフェースに対応する Java クラス ファイルの集合が生成されます。
以降で、GUI ツールでの Java クラスの生成を示します。WebLogic jCOM ツール全般の詳細については、jCOM ツールの詳細を参照してください。
WebLogic Server 用の Java クラスのパッケージ化
COM オブジェクトを EJB から呼び出す場合は、WebLogic Server が検出できるように、com2java で生成するクラス ファイルを EJB .jar にパッケージ化する必要があります。生成したファイルは、特定のパッケージに格納できます。たとえば、Excel 型ライブラリのすべてのファイルを excel という Java パッケージに格納できます。
EJB .jar ファイルのパッケージ化の詳細については、『WebLogic エンタープライズ JavaBeans プログラマーズ ガイド』の「WebLogic Server コンテナ用の EJB のパッケージ化」の章を参照してください。
Java クラス ファイルを生成してそれを適切にパッケージ化したら、あとは COM アプリケーションを起動すれば、WebLogic Server に公開する COM オブジェクトをインスタンス化および実行できます。
以下の節では、COM アプリケーションのオブジェクトにメソッドを呼び出せるよう WebLogic Server を準備する方法を説明します。
WebLogic Server を起動します。「WebLogic Server の起動と停止」を参照してください。
WebLogic Server をインストールすると自動的に jCOM がインストールされますが、jCOM を有効にする必要があります。これによって、リスン ポート上で COM の呼び出しをリスンするようにサーバに知らせます。
WebLogic Server と COM アプリケーションをネイティブ モードで通信させる場合は、WebLogic Server コンソールを介してすぐに有効化します。ネイティブ モードを使用するかどうかを判断する際は、WebLogic jCOM の概要,のDCOM モードとネイティブ モードを参照してください。
その他の関連するコンソール プロパティのコンフィグレーション
その他の必要な jCOM コンソール プロパティをコンフィグレーションします。詳細については、jCOM プロパティに関する Console オンライン ヘルプを参照してください。
jCOM コンフィグレーションを変更した場合は、サーバを再起動する必要があります。Administration Console からも、変更を有効にするためにサーバを再起動する必要のあることが示されます。
COM オブジェクトを呼び出すためにサーバ コードを準備します。
com2java により生成された Java クラスの使い方
com2java ツールは、型ライブラリ内で COM クラスを発見するたびにその COM クラスにアクセスするための Java クラスを生成します。生成された Java クラスは、複数のコンストラクタを持ちます。
以下に DataLabelProxy クラスから生成されたコンストラクタのサンプルを示します。
public DataLabelProxy() {}
public DataLabelProxy(Object obj) throws java.io.IOException {
super(obj, DataLabel.IID);
}
protected DataLabelProxy(Object obj, String iid) throws
java.io.IOException
{
super(obj, iid);
}
public DataLabelProxy(String CLSID, String host, boolean
deferred) throws java.net.UnknownHostException,
java.io.IOException{ super(CLSID, DataLabel.IID, host, null);
}
protected DataLabelProxy(String CLSID, String iid, String host,
AuthInfo authInfo) throws java.io.IOException { super(CLSID,
iid, host, authInfo);
}
COM インタフェースから com2java により生成された Java インタフェースの使い方
COM インタフェースのメソッドは、特定のインタフェースを介してオブジェクトの参照を返すことができます。
たとえば、Excel 型ライブラリ (Excel8.olb) は、_Application COM インタフェースを定義し、そのメソッド Add は COM IDL で次のように定義されます。
[id(0x0000023c), propget, helpcontext(0x0001023c)]
HRESULT Workbooks([out, retval] Workbooks** RHS);
このメソッドは、Workbooks COM インタフェースを実装するオブジェクトの参照を返します。Workbooks インタフェースは _Application インタフェースと同じ型ライブラリに定義されているので、com2java ツールは作成する _Application Java インタフェースに次のメソッドを生成します。
/** * getWorkbooks.
*
* @return Workbooks への参照
* @exception java.io.IOException 通信に問題がある場合
* @exception com.bea.jcom.AutomationException リモート サーバが例外を送出する場合 */
public Workbooks getWorkbooks () throws java.io.IOException, com.bea.jcom.AutomationException;
生成された _ApplicationProxy Java クラスのメソッドの実装が見えるようになります。
/**
* getWorkbooks.
*
* @return Workbooks への参照
* @exception java.io.IOException 通信に問題が
ある場合
* @exception com.bea.jcom.AutomationException リモート サーバが
例外を送出する場合
*/
public Workbooks getWorkbooks () throws java.io.IOException,
com.bea.jcom.AutomationException{ com.bea.jcom.MarshalStream
marshalStream = newMarshalStream("getWorkbooks");
marshalStream = invoke("getWorkbooks", 52, marshalStream);
Object res = marshalStream.readDISPATCH("return value");
Workbooks returnValue = res == null ? null :new
WorkbooksProxy(res);
checkException(marshalStream,
marshalStream.readERROR("HRESULT"));
return returnValue;
}
見て分かるとおり、getWorkbooks メソッドは生成された WorkbooksProxy Java クラスを内部的に利用します。前述のとおり、com2java ツールは、Workbooks 戻り値型を持つメソッドを生成します。Workbooks インタフェースは _Application と同じ型ライブラリに定義されているからです。
Workbooks インタフェースが異なる型ライブラリに定義されている場合、WebLogic jCOM は次のコードを生成します。
/**
* getWorkbooks.
*
* @return Workbooks への参照
* @exception java.io.IOException 通信に問題が
ある場合
* @exception com.bea.jcom.AutomationException リモート サーバが
例外を送出する場合
*/
public Object getWorkbooks () throws java.io.IOException,
com.bea.jcom.AutomationException;
この場合、生成されたプロキシ クラスを明示的に使用して返された Workbooks にアクセスする必要があります。
Object wbksObj = app.getWorkbooks();
Workbooks workbooks = new WorkbooksProxy(wbObj);