WebLogic jCOM プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、WLS-to-COM アプリケーションの 1 つである、WebLogic jCOM を使用して WebLogic Server から COM オブジェクト上にメソッドを呼び出すアプリケーションを準備およびデプロイする方法を説明します。
ネイティブ モードを使用する WLS-to-COM アプリケーションには、特別な要件が 2 つあります。
この節では、WebLogic Server から COM アプリケーションへ呼び出す主な手順を簡単に説明します。詳細については、以降の節で説明します。
com2java
ツールで COM オブジェクトから Java クラスを生成します。「com2java GUI ツールでの Java クラスの生成」を参照してください。
以下の節では、WebLogic Server がオブジェクトでメソッドを呼び出せるよう COM クライアントを準備する方法について説明します。
COM 型ライブラリに対して com2java
GUI ツールを実行すると、COM 型ライブラリ内のクラスとインタフェースに対応する Java クラス ファイルの集合が生成されます。
以降で、GUI ツールでの Java クラスの生成を示します。WebLogic jCOM ツール全般の詳細については、「jCOM ツールの詳細」を参照してください。
COM オブジェクトを EJB から呼び出す場合は、WebLogic Server が検出できるように、com2java
で生成するクラス ファイルを EJB .jar
にパッケージ化する必要があります。生成したファイルは、特定のパッケージに格納できます。たとえば、Excel 型ライブラリのファイルをすべて excel という Java パッケージに格納できます。
EJB .jar
ファイルのパッケージ化の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「エンタープライズ JavaBean の実装」を参照してください。
Java クラス ファイルを生成して適切にパッケージ化したら、COM アプリケーションを起動すれば、WebLogic Server にエクスポーズする COM オブジェクトをインスタンス化および実行できます。
以下の節では、COM アプリケーションのオブジェクト上のメソッドを呼び出せるよう 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
ツールは、型ライブラリ内で 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 インタフェースのメソッドは、特定のインタフェースを介してオブジェクトの参照を返すことができます。
たとえば、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);
COM アプリケーション オブジェクトの管理の詳細については、J-Integra の Web サイトで提供されている COM のドキュメント (http://j-integra.intrinsyc.com/support/com/doc/index.htm) を参照してください。
![]() ![]() |
![]() |
![]() |