| 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);