Oracle® Fusion Middleware Oracle WebLogic Server JCOMのプログラミング 11gリリース1 (10.3.6) B61628-04 |
|
![]() 前 |
![]() 次 |
この章では、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 WebLogic Server管理コンソール・ヘルプのjCOMの有効化に関する項を参照してください。
他の関連するコンソール・プロパティを構成します。Oracle WebLogic Server管理コンソール・ヘルプのサーバー: プロトコル: jCOMに関する項を参照してください。
WebLogic ServerとCOMアプリケーションをネイティブ・モードで通信させる場合は、管理コンソールで有効化します。ネイティブ・モードを使用するかどうかを判断する際は、第2章「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 WebLogic Server WebLogic Enterprise JavaBeansのプログラミング』の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. An reference to a Workbooks
* @exception java.io.IOException If there are communications problems.
* @exception com.bea.jcom.AutomationException If the remote server throws an exception. */
public Workbooks getWorkbooks () throws java.io.IOException, com.bea.jcom.AutomationException;
It is revealing to look at the implementation of the method in the generated _ApplicationProxy Java class:
/**
* getWorkbooks.
*
* @return return value. An reference to a Workbooks
* @exception java.io.IOException If there are communications
problems.
* @exception com.bea.jcom.AutomationException If the remote
server throws an exception.
*/
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. An reference to a Workbooks
* @exception java.io.IOException If there are communications
problems.
* @exception com.bea.jcom.AutomationException If the remote server
throws an exception.
*/
public Object getWorkbooks () throws java.io.IOException,
com.bea.jcom.AutomationException;
In this case, you would have to explicitly use the generated proxy class to access the returned Workbooks:
Object wbksObj = app.getWorkbooks();
Workbooks workbooks = new WorkbooksProxy(wbObj);