| Oracle® Fusion Middleware Oracle WebLogic Server JCOMのプログラミング 11g リリース1 (10.3.6) B61628-05 |
|
![]() 前 |
この章では、jCOMアプリケーションによって使用されるツールについて詳しく説明します。ツールは、com2java、java2com、regjvm、regjvmcmdおよびregtlbです。
WebLogic jCOMのcom2javaツールは、タイプ・ライブラリから情報を読み込み、そのタイプ・ライブラリに定義されているCOMクラスおよびインタフェースにアクセスするためのJavaファイルを生成します。
タイプ・ライブラリには、COMクラス、インタフェース、およびその他のコンストラクトが登録されています。通常、これらはVisual C++やVisual BASICなどの開発ツールによって生成されます。
このため、一部のタイプ・ライブラリは簡単に識別できます。拡張子olbまたはtlbで終わるファイルは、確実にタイプ・ライブラリです。しかし、タイプ・ライブラリが実行ファイルなどの他のファイルに格納される場合は、把握しづらくなります。Visual BASICでは、生成した実行ファイルにタイプ・ライブラリを格納します。
com2javaは、コマンド・シェルで入力するか、そのアイコンをダブルクリックして起動します。
com2javaを起動すると、次のダイアログが表示されます。

ツールで処理するタイプ・ライブラリを選択するには、「Select」ボタンをクリックします。
タイプ・ライブラリは、COMコンポーネントを含んでいる実行ファイルやダイナミック・リンク・ライブラリ(DLL)ファイルなどの内部に隠されている場合もあります。
com2javaツールは、以前にオープンしてそのプロキシを生成したタイプ・ライブラリのリストを記憶しています。
com2javaツールは、タイプ・ライブラリのCOMクラスおよびインタフェースに対応するJavaソース・ファイルを生成します。生成されたファイルは、特定のパッケージに格納します。たとえば、Excelタイプ・ライブラリのファイルをすべてexcelというJavaパッケージに格納できます。
「Java package」テキスト・ボックスに、生成されたファイルを格納するパッケージの名前を指定します。
com2javaツールは、特定のタイプ・ライブラリに対して指定した直前のパッケージ名を記憶しています。
「Options」ボタンをクリックすると、以下で説明するcom2java用のオプションを選択するためのダイアログ・ボックスが表示されます。これらのオプションは、com2javaのセッション間で自動的に保存されます。特定のプロキシの生成処理でのみオプションが必要な場合は、プロキシの生成後にオプションをリセットします。
| オプション | 説明 |
|---|---|
|
Clash Prefix |
タイプ・ライブラリに定義されているCOMインタフェースのメソッドがすでにJavaで使用されているメソッド( |
|
Lower case method names |
Javaメソッド名の命名規則では、メソッド名は小文字で開始する必要があります。 |
|
Only generate IDispatch |
WebLogic jCOMは、IDispatchおよびvtableアクセスを使用したCOMオブジェクトの呼出しをサポートしています。このオプションを選択すると、すべての呼出しはIDispatchインタフェースを使用して行われます。 |
|
Generate retry code on '0x80010001 - Call was rejected by callee' |
COMサーバーがビジーの場合、エラー・コードを受け取る場合があります。このオプションを選択すると、このエラー・コードを受け取るたびにコードが再試行されます。 |
|
Generate Arrays as Objects |
SAFEARRAYのパラメータは、生成されるjava.lang.Object型の対応するJavaパラメータを持っています。これは、Variantの外部の2次元配列をJavaからCOMオブジェクトに受け渡す場合、またはCOMオブジェクトから受け渡す場合に必要です。 このオプションは、実際に渡されるものを変更しません - それは依然として配列であり、生成されたJavaインタフェースに存在します。生成されたメソッド・プロトタイプで配列型を生成せずに、「Object」を指定します。これは、2D配列を受け渡すときに役立ちます - COM IDLでは、次元の数はSAFEARRAYに対して指定されず、また、「Generate Arrays as Objects」オプションをチェックしなかった場合、WebLogic jCOMは単一要素配列を受け渡して対応するプロトタイプを生成するものと見なします。 このオプションを選択し、 |
|
Prompt for names for imported tlbs |
タイプ・ライブラリは、別のタイプ・ライブラリをインポートする場合があります。インポートされたタイプ・ライブラリのプロキシも生成する場合、このオプションを選択するとこれらのプロキシのパッケージ名を指定できます。 |
|
Don't generate dispinterfaces |
このオプションを選択すると、ディスパッチ・インタフェースとして定義されているインタフェースのプロキシの生成が禁止されます。 |
|
Generate deprecated constructors |
生成されるプロキシには、現在は非推奨のコンストラクタがいくつか含まれます。これら非推奨のコンストラクタを生成したくない場合は、このオプションを選択します。 |
|
Don't rename methods with same names |
COMクラスで名前の競合が検出された場合、 |
|
Ignore conflicting interfaces |
COMクラスが同名のメソッドを定義する複数のインタフェースを実装する場合、このオプションを選択すると、対応するJavaクラスは余計なインタフェースを実装しません。生成される |
|
Generate Java Abstract Window Toolkit (AWT) classes |
JavaクラスをGUIクラスとして生成します。ActiveXコントロールをJavaフレームに埋め込むために使用します。 |
com2javaツールは、タイプ・ライブラリに含まれる以下の3種類のコンストラクトを扱います。
生成されたJavaファイルを使用してCOMオブジェクトを操作する方法については、アクセスするCOMオブジェクトに関するドキュメントを参照してください。たとえば、Excelタイプ・ライブラリでcom2javaを実行した場合、生成されたJavaファイルはMicrosoft Excel COM APIに対応します。詳細は、Microsoft Excelのプログラミング・ドキュメントを参照する必要があります。
Javaでは、列挙値はjava.util.Enumerationで表されるリストです。タイプ・ライブラリに列挙値が含まれている場合、WebLogic jCOMはその列挙中の要素ごとの定数定義を含んだJavaインタフェースを生成します。
WebLogic jCOMは、2種類のインタフェースを処理します。1つはディスパッチ・インタフェースです。このメソッドにはCOM IDispatchメカニズムを使用しないとアクセスできません。もう1つはデュアル・インタフェースです。このメソッドは直接呼び出すことができます(vtblアクセス)。
タイプ・ライブラリに定義されているCOMインタフェースごとに、com2javaツールはJavaインタフェースとJavaクラスの2つのJavaファイルを生成します。
生成されるJavaインタフェースの名前は、COMインタフェースの名前と同じです。たとえば、COMインタフェース名がIMyInterfaceの場合、com2javaツールはIMyInterfaceというJavaインタフェースをIMyInterface.javaファイルに生成します。
com2javaが生成するもう1つのファイルはJavaクラスです。このファイルには、インタフェースを実装するCOMオブジェクトにアクセスするためのコードと、インタフェースを実装するJavaクラスのメソッドをCOMオブジェクトが呼び出すためのコードが含まれます。生成されるJavaクラスの名前は、インタフェースの名前の末尾に「Proxy」を付加したものです。前項の例では、WebLogic jCOMはIMyInterfaceProxyというJavaクラスをIMyInterfaceProxy.javaというファイルに生成します。
COMインタフェースのメソッドごとに、WebLogic jCOMはJavaインタフェース内に対応するメソッドを生成します。インタフェース内に生成される一部の定数は、生成されるコメントが示すように無視して構いません。
WebLogic jCOMは、インタフェースとそのメソッドを記述したタイプ・ライブラリからコメントを取り出し、生成されるjavadocコメントで使用します。
COMクラスは、1つまたは複数のCOMインタフェースを実装します。これは、Javaクラスが1つまたは複数のJavaインタフェースを実装できるのと同じです。
タイプ・ライブラリのCOMクラスごとに、com2javaツールは、そのCOMクラスと同名の対応するJavaクラスを生成します。WebLogic jCOMは、複数のインタフェースを実装するクラスもサポートしています。
WebLogic jCOMが生成するJavaクラスを使用すると、対応するCOMクラスにアクセスできます。
COMクラスは、インタフェースをソース・インタフェースとして指定できます。このため、そのインタフェースを実装するCOMクラスのインスタンスは、そのインタフェースに定義されているイベントをサブスクライブできます。サブスクライブしたオブジェクトに対してインタフェース内のメソッドが呼び出されます。
|
注意:
|
COMイベントは接続ポイントとソース・インタフェースを使用して動作しますが、Javaのイベント・メカニズムはそれとは異なります。com2javaツールは、COMメカニズムをJavaプログラムから完全に隠し、標準のJavaテクニックを利用してイベントを提供します。
具体的には、com2javaはCOMクラスにアクセスするために生成したJavaクラスに2つのメソッドを追加します。
com2javaツールは、クラスがインタフェースをソース・インタフェースとして使用していることを検出すると、そのインタフェース用の特殊なコードを生成します。それは、Javaイベントの命名規則に従って、インタフェースをjava.util.EventListener Javaインタフェースから導出します。
もう1つのJavaイベントの規則は、インタフェースの各メソッドは単一のパラメータを持つ必要があるということです。これは、java.util.EventObject Javaクラスから派生したクラスのインスタンスです。
Javaイベント関連の規則の3つめは、アダプタ・クラスの使用です。このクラスは、イベント・インタフェースを実装し、インタフェースのメソッド用の空のデフォルト実装を提供します。イベントにサブスクライブされるクラスを作成する開発者は、インタフェースのすべてのメソッドを実装する必要がありません(特に大規模なインタフェースを使用するときに手間になります)。
イベント・インタフェースごとに、WebLogic jCOMはアダプタ・クラスを生成します。
java2comは、どのプラットフォームでも実行できます。WebLogic jCOMランタイムweblogic.jarがCLASSPATH環境変数に含まれていることを確認してください。
java2comツールは、Javaクラスを(Java reflectionメカニズムを使用して)解析し、以下のものを出力します:
COMインタフェース定義言語(Interface Definition Language: IDL)ファイル
pure Java DCOMマーシャリング・コード(ラッパー)。これは、vtable (レイト・バインド)アクセスを使用してCOMからJavaオブジェクトへのアクセスを容易にするためにWebLogic jCOMランタイムによって使用されます。
これらのファイルを生成した後、MicrosoftのMIDLツールを使用してIDLファイルをコンパイルします。
IDLファイルとラッパーを生成するには、まず次のコマンドを使用してjava2comツールを起動します。
java com.bea.java2com.Main
java2comツールでは、次のダイアログ・ボックスを表示します。

このダイアログ・ボックスには、以下のフィールドが存在します(構成の変更は、ダイアログ・ボックスの終了時に自動的に保存されます)。
| フィールド | 説明 |
|---|---|
|
Java Classes and Interfaces |
クラス名はスペースで区切って入力します。「...」ボタンをクリックすると、ダイアログにクラスのリストが表示されるので、そのリストに対して追加または削除を実行できます。 |
|
Name of generated IDL File |
生成されるCOMインタフェース定義言語(IDL)ファイルの名前。myjvmと指定した場合は、myjvm.idlが生成されます。この名前は、MicrosoftのMIDLコンパイラを使用してmyjvm.idlをコンパイルするときに生成されるタイプ・ライブラリの名前にも使用されます。 |
|
Output Directory |
|
|
Dump Analysis |
|
|
「Save Settings」/「Load Settings」 |
「Save Settings」ボタンをクリックすると、現在の
|
|
Names |
「Names」ボタンをクリックすると、次のダイアログ・ボックスが表示されます。 クラス/インタフェース名ドロップダウン・リストから「*」を選択すると、メンバー(フィールドまたはクラス)名の名前を入力するためのテキスト・ボックスが表示されます。生成するクラスまたはインタフェースでそのメンバー名が見つかったときに使用される対応COM名を指定できます。この名前を空白のままにした場合、JavaメンバーはCOMインタフェースで生成される対応メンバーを持ちません。 クラス/インタフェース名ドロップダウン・リストから特定のCOMクラス名またはインタフェースを選択すると、そのクラスまたはインタフェースのメンバーのセットがその下に表示されます。使用するCOM名を指定し、「Add this Class Name」マップをクリックすることによって、選択したクラス/インタフェースを指定したCOM名にマップします。「Add this Member Name」マップをクリックすると、選択したメンバーを指定したCOM名にマップできます。 |
|
「Generate」ボタン |
このボタンをクリックすると、ラッパーおよびIDLファイルが生成されます。
JavaクラスがJavaイベントを生成する場合、生成されるCOMクラスは、Javaクラスがサポートするイベントに対応したソース・インタフェース(COMイベント)を持ちます。 生成されたIDLファイルは、MicrosoftのMIDLツールを使用してコンパイルします。このツールはVisual C++に付属しており、Microsoft Webサイトからダウンロードできます。コマンド midl procdServ.idl は、 |
WebLogic jCOMを使用してCOMをサポートする言語で、あたかもCOMオブジェクトであるかのようにJavaオブジェクトにアクセスできるようにするには、Javaオブジェクトが実行されるJVMの参照を(COMクライアント・マシン上に)登録する必要があります。regjvmツールを使用すると、マシン上ですべてのJVM参照を作成および管理できます。
|
注意:
|
COMクライアントからJVMには、以下のモードでアクセスできます。
DCOMモード
ネイティブ・モード(アウト・オブ・プロセス)
ネイティブ・モード(イン・プロセス)
DCOMモードでは、Javaサーバー・サイド上にネイティブ・コードは不要です。このため、JavaコードをJava仮想マシンがインストールされているUnixマシンや他のマシン上に配置できます。Windowsクライアント・マシン上でJVMを登録する場合、サーバーのホスト・マシン名(ローカル・コンポーネント用のローカル・ホストの場合もあります)とポート番号を定義します。

JVM内のJavaコードは、com.bea.jcom.Jvm.register(<jvm id>)を呼び出す必要があります。ここで<jvm id>は、regjvmで定義したJVMのIDです。
ネイティブ・モードは現在、ローカル・マシン上でのみ動作します。JVM名以外にパラメータは必要ありません。

JVMは、com.bea.jcom.Jvm.register(<jvm id>)を呼び出す必要があります。ここで<jvm id>は、regjvmで定義したJVMのIDです。
regjvmツールを実行すると、以下のダイアログ・ボックスが表示されます。

上部は、現在のマシン上のすべてのJVMを選択および管理するための部分です。JVMは変更、追加、または削除できます。異なるJVMに切り替える場合は、現在選択されているJVMに対する変更を保存する必要があります。また、JVMモードを選択します。その際、必要な情報がダイアログの下部に表示されます。
ダイアログの下部には、それぞれのJVMで必要な詳細が、JVMのモードに従って表示されます。JVMの詳細のほかに、各JVMモードの詳細オプションを表示するためのチェック・ボックスも存在します。
これらのオプションについては、以下の節で説明します。

標準オプション
JVM id(必須) - JVMを指定する必要があります。「Browse」ボタンをクリックすると、独自のJVMを選択できます。「Scan」ボタンをクリックすると、ローカル・マシンからJVMを探して(数分かかる場合があります)、それを選択用のリストボックスに挿入します。
Hostname - JVMが存在するホスト名またはIPアドレスです。
Port - JVMとの通信を開始するためのポート番号です。

詳細オプション
Launch Command(必須) - JVMが自動的に起動する場合に使用されるコマンドです。通常、このコマンドは次のようになります。
c:\Oracle\Middleware\jdk160\bin\java -classpath c:\Oracle\Middleware\wlserver_10.3\server\lib\weblogic.jar;c:\pure MyMainClass
weblogic.jarおよび該当するjdkファイルがCLASSPATHにあることが重要です。
Generate Script(オプション) - JVMの設定を選択するレジストリ・スクリプトを生成できます。

標準オプション
JVM id(必須) - JVMを指定する必要があります。「Browse」ボタンをクリックすると、独自のJVMを選択できます。「Scan」ボタンをクリックすると、ローカル・マシンからJVMを探して(数分かかる場合があります)、それを選択用のリストボックスに挿入します。

詳細オプション
詳細オプションは、DCOMモードの詳細オプションと同じです。「regjvm GUIツールのDCOMモード・オプション」を参照してください。

標準オプション
JVM id(必須) - JVMを指定する必要があります。「Browse」ボタンをクリックすると、独自のJVMを選択できます。「Scan」ボタンをクリックすると、ローカル・マシンからJVMを探して(数分かかる場合があります)、それを選択用のリストボックスに挿入します。

詳細オプション
Classpath(オプション) - JVMのCLASSPATHです。空白のままにすると、実行時のCLASSPATH環境変数が使用されます。それ以外の場合、内容がCLASSPATH環境変数に追加されます。
Main Class(オプション) - 呼び出すMainメソッドを含むクラスの名前です。
Properties(オプション) - 設定する必要があるプロパティです。次の構文が必要です: prop1=value1 prop2=value2...
Java 2(オプション) - プロパティを設定する場合、Java 2 (JDK 1.2.x、1.3.x)を使用するときはオンにし、1.1.xを使用するときはオフにする必要があります。
Generate Script(オプション) - DCOMモードの場合と同じです。「regjvm GUIツールのDCOMモード・オプション」を参照してください。
regjvmcmdは、regjvmで説明したGUIツールregjvmのコマンド・ライン・バージョンです。パラメータの概要を参照するには、パラメータを指定せずにツールを実行します。
regjvmcmd
最も単純な形式のregjvmcmdでは、次を指定します:
jvm ID (com.bea.jcom.Jvm.registerで使用される名前("JvmId")に対応)
バインディングはhostname[port]の形式でJVMにアクセスできます(ここで、hostnameはJVMを実行するマシンの名前、portはWebLogic Serverの起動時に指定するTCP/IPポートです)。
JVMを登録する必要がないか、またはその登録を変更する場合、最初に次のコマンドを使用してその登録を解除しておく必要があります。
regjvmcmd /unregister JvmId
WebLogic jCOMのregtlbツールは、COMのアーリー・バインディング・メカニズムを使用してJavaオブジェクトにアクセスする必要のあるCOM Windowsクライアントにタイプ・ライブラリを登録します。regtlbは、2つのパラメータを取ります。最初のパラメータは、登録するタイプ・ライブラリ・ファイルの名前です。2番目は、タイプ・ライブラリに記述されているCOMクラスが存在するJVMのIDです。

WebLogic jCOM java2comツールで生成されたIDLファイルからタイプ・ライブラリが生成された場合、regtlbコマンドは、タイプ・ライブラリ内の各COMクラスに対応するJavaクラス名を自動的に調べます。タイプ・ライブラリのCOMクラス記述の形式は次のとおりです。
Java class java.util.Observable (through jCOM))
java2comで生成されたIDLファイルからタイプ・ライブラリが生成されなかった場合、各COMクラスに対してインスタンス化するJavaクラスの名前を指定する必要があります。

このため、ユーザーがAtldll.Appleのインスタンスを作成しようとした場合、WebLogic jCOMによってJVM MyJvm内のクラスがインスタンス化されます。MyAppleClassクラスは、COMクラスAtldll.Appleによって実装されるatldll.tlbからWebLogic jCOMのjava2comツールで生成されたJavaインタフェースを実装します。