| Oracle® Fusion Middleware Oracle WebLogic Server JCOMのプログラミング 11g リリース1 (10.3.6) B61628-05 |
|
![]() 前 |
![]() 次 |
この章では、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パッケージ」テキスト・ボックスに、生成されたファイルを格納するパッケージの名前を入力します。com2javaツールは、特定のタイプ・ライブラリに対して指定した直前のパッケージ名を記憶しています。
「プロキシの生成」をクリックして、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);