Oracle® Fusion Middleware Oracle WebLogic Server JCOM プログラマーズ ガイド 11g リリース 1 (10.3.1) B55534-01 |
|
戻る |
次へ |
以下の節では、WLS-to-COM アプリケーションの 1 つである、WebLogic jCOM を使用して WebLogic Server から COM オブジェクト上にメソッドを呼び出すアプリケーションを準備およびデプロイする方法を説明します。
ネイティブ モードを使用する WLS-to-COM アプリケーションには、特別な要件が 2 つあります。
COM アプリケーションをネイティブ モードで実行するには、WebLogic Server が COM アプリケーション マシンにインストールされている必要があります。
ネイティブ モードで実行するには、WebLogic Server が Windows マシンで動作している必要があります。
この節では、WebLogic Server から COM アプリケーションへ呼び出す主な手順を簡単に説明します。詳細については、以降の節で説明します。
COM 側
COM アプリケーションをコード化します。「COM アプリケーションのコード化」を参照してください。
com2java
ツールで COM オブジェクトから Java クラスを生成します。「com2java GUI ツールでの Java クラスの生成」を参照してください。
WebLogic Server 用にクラスをパッケージ化します。「WebLogic Server 用の Java クラスのパッケージ化」を参照してください。
COM アプリケーションを起動します。「COM アプリケーションの起動」を参照してください。
WebLogic Server 側
サーバ リスン ポート上で COM 呼び出しを有効化します。『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「jCOM の有効化」を参照してください。
他の関連するコンソール プロパティをコンフィグレーションします。『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「サーバ : プロトコル : jCOM」を参照してください。
WebLogic Server と COM アプリケーションをネイティブ モードで通信させる場合は、Administration Console で有効化します。ネイティブ モードを使用するかどうかを判断する際は、「DCOM モードとネイティブ モード」を参照してください。
他の Java オブジェクトと同じように COM オブジェクトを使用します。
以下の節では、WebLogic Server がオブジェクトでメソッドを呼び出せるよう COM クライアントを準備する方法について説明します。
必要に応じて COM アプリケーションをコード化します。
COM 型ライブラリに対して com2java
GUI ツールを実行すると、COM 型ライブラリ内のクラスとインタフェースに対応する Java クラス ファイルの集合が生成されます。
以降で、GUI ツールでの Java クラスの生成を示します。WebLogic jCOM ツール全般の詳細については、「5 jCOM ツールの詳細」を参照してください。
com2java
GUI ツールを実行するには、次の手順に従います。
WEBLOGIC_HOME
/server/bin
ディレクトリに移動します (または、このディレクトリを CLASSPATH に追加します)。
COM マシンでコマンド シェルを開き、com2java.exe
ファイルを起動します。
> com2java
一番上のフィールドで適切な型ライブラリを選択し、[Java package] テキスト ボックスに、生成されたファイルを含むパッケージの名前を入力します。com2java
ツールでは、特定の型ライブラリに対して指定した直前のパッケージ名を記憶しています。
[Generate Proxies] をクリックして、Java クラス ファイルを生成します。
COM オブジェクトを EJB から呼び出す場合は、WebLogic Server が検出できるように、com2java
で生成するクラス ファイルを EJB .jar
にパッケージ化する必要があります。生成したファイルは、特定のパッケージに格納できます。たとえば、Excel 型ライブラリのファイルをすべて excel という Java パッケージに格納できます。
EJB .jar
ファイルのパッケージ化の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic エンタープライズ JavaBean (EJB) プログラマーズ ガイド』の「EJB の実装」を参照してください。
Java クラス ファイルを生成して適切にパッケージ化したら、COM アプリケーションを起動すれば、WebLogic Server に公開する COM オブジェクトをインスタンス化および実行できます。
com2java
ツールは、型ライブラリ内で COM クラスを発見するたびにその COM クラスにアクセスするための Java クラスを生成します。生成された Java クラスは、複数のコンストラクタを持ちます。
デフォルト コンストラクタは、認証なしでローカル ホスト上に COM クラスのインスタンスを作成します。
2 番目のコンストラクタは、認証なしで特定のホスト上に COM クラスのインスタンスを作成します。
3 番目のコンストラクタは、特定の認証でローカル ホスト上に COM クラスのインスタンスを作成します。
4 番目のコンストラクタは、特定の認証で特定のホスト上に COM クラスのインスタンスを作成します。
最後のコンストラクタは、返されたオブジェクト参照をラップするために使用できます。これは COM クラスのインスタンスを参照します。
以下に 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 return value. Workbooks への参照
* @exception java.io.IOException 通信に問題がある場合
* @exception com.bea.jcom.AutomationException リモート サーバが例外を送出する場合 */
public Workbooks getWorkbooks () throws java.io.IOException, com.bea.jcom.AutomationException;
生成された _ApplicationProxy Java class : クラスのメソッドの実装が見えるようになります
/**
* getWorkbooks.
*
* @return return value.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 return value. 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);