![]() ![]() ![]() ![]() |
以下の節では、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 アプリケーションをネイティブ モードで通信させる場合は、Administration Console で有効化します。ネイティブ モードを使用するかどうかを判断する際は、「WebLogic jCOM について」の「DCOM モードとネイティブ モード」を参照してください。
以下の節では、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 オブジェクトをインスタンス化および実行できます。
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);
![]() ![]() ![]() |