Oracle® Fusion Middleware Oracle WebLogic Server JCOM プログラマーズ ガイド 11g リリース 1 (10.3.1) B55534-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、jCOM アプリケーションで使用するツールについて詳しく説明します。
WebLogic jCOM の com2java
ツールは、型ライブラリから情報を読み込み、その型ライブラリに定義されている COM クラスおよびインタフェースにアクセスするための Java ファイルを生成します。
型ライブラリには、COM クラス、インタフェース、およびその他のコンストラクトが登録されています。通常、これらは Visual C++ や Visual BASIC などの開発ツールによって生成されます。
このため、一部の型ライブラリは簡単に識別できます。拡張子 olb
または tlb
で終わるファイルは、確実に型ライブラリです。しかし、型ライブラリが実行ファイルなどの他のファイルに格納される場合は、把握しづらくなります。Visual BASIC では、生成した実行ファイルに型ライブラリを格納します。
com2java
は、コマンド シェルで入力するか、そのアイコンをダブルクリックして起動します。
com2java
を起動すると、次のダイアログが表示されます。
ツールで処理する型ライブラリを選択するには、[Select] ボタンをクリックします。
型ライブラリは、COM コンポーネントを含んでいる実行ファイルやダイナミック リンク ライブラリ (dynamic link library: DLL) ファイルなどの内部に隠されている場合もあります。
com2java
ツールは、以前にオープンしてそのプロキシを生成した型ライブラリのリストを記憶しています。
com2java
ツールは、型ライブラリの COM クラスおよびインタフェースに対応する Java ソース ファイルを生成します。生成したファイルは、特定のパッケージに格納できます。たとえば、Excel 型ライブラリのファイルをすべて excel という Java パッケージに格納できます。
[Java package] テキスト ボックスに、生成されたファイルを格納するパッケージの名前を指定します。
com2java
ツールは、特定の型ライブラリに対して指定した直前のパッケージ名を記憶しています。
[Options] ボタンをクリックすると、以下で説明する com2java
用のオプションを選択するためのダイアログ ボックスが表示されます。これらのオプションは、com2java
のセッション間で自動的に保存されます。特定のプロキシの生成処理でのみオプションが必要な場合は、プロキシの生成後にオプションをリセットします。
オプション | 説明 |
---|---|
[Clash Prefix] | 型ライブラリに定義されている COM インタフェースのメソッドがすでに Java で使用されているメソッド (getClass() メソッドなど) と衝突する場合、com2java は生成したメソッドの名前の先頭に zz_ という文字列 (デフォルト) を付ける。 |
[Lowercase method names] | Java メソッド名の命名規則では、メソッド名は小文字で開始する必要がある。com2java ツールはデフォルトでこの規則を採用し、それに応じてメソッド名を変更する。com2java でこの規則を無視する場合は、[Options] ダイアログ ボックスの [Lowercase method names] チェック ボックスを選択解除する。 |
[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 クラスで名前の衝突が検出された場合、com2java はそのメソッドの 1 つの名前を自動的に変更する。このオプションを選択すると、名前の自動変更が無効になる。 |
[Ignore conflicting interfaces] | COM クラスが同名のメソッドを定義する複数のインタフェースを実装する場合、このオプションを選択すると、対応する Java クラスは余計なインタフェースを実装しない。生成される getAsXXX メソッドを使用すれば、これらのインタフェースに引き続きアクセスできる。生成されるコメントを参照のこと。 |
[Generate Java Abstract Window Toolkit (AWT) classes] | Java クラスを GUI クラスとして生成する。ActiveX コントロールを Java フレームに埋め込むために使用する。 |
com2java
ツールは、型ライブラリに含まれる以下の 3 種類のコンストラクトを扱います。
この節では、これらのコンストラクトについて説明します。
生成された Java ファイルを使用して COM オブジェクトを操作する方法については、アクセスする COM オブジェクトに関するドキュメントを参照してください。
たとえば、com2java
を Excel 型ライブラリに対して実行する場合、生成される Java ファイルは Microsoft Excel COM API に対応しています。このため、Microsoft Excel のプログラミング ドキュメントを参照する必要があります。たとえば、Excel 2000 COM API については下記を参照します。
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 クラスのインスタンスは、そのインタフェースに定義されているイベントをサブスクライブできます。サブスクライブしたオブジェクトに対してインタフェース内のメソッドが呼び出されます。
注意 : com2java ツールが型ライブラリ内のインタフェースをイベント インタフェースとして扱うには、そのインタフェースをソース インタフェースとして使用する COM クラスが少なくとも 1 つは型ライブラリに存在している必要があります。 |
COM イベントは接続ポイントとソース インタフェースを使用して動作しますが、Java のイベント メカニズムはそれとは異なります。com2java
ツールは、COM メカニズムを Java プログラムから完全に隠し、標準の Java テクニックを利用してイベントを提供します。
具体的には、com2java
は COM クラスにアクセスするために生成した Java クラスに 2 つのメソッドを追加します。
com2java
ツールは、クラスがインタフェースをソース インタフェースとして使用していることを検出すると、そのインタフェース用の特殊なコードを生成します。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] | java2com で解析する「ルート」Java クラスとインタフェースが存在する。これらは、CLASSPATH でアクセスできる必要がある。WebLogic jCOM はこれらのクラスを解析し、COM IDL 定義と、COM から Java クラスにアクセスするための Java DCOM マーシャリング コードを生成する。次に、そのクラスのパラメータまたはフィールドで使用されるクラスまたはインタフェースに対して同じ解析を再帰的に実行し、同様にアクセスできるすべての Java クラスとインタフェースを解析する。
クラス名はスペースで区切って入力する。[...] ボタンをクリックすると、クラスのリストを表示して、そのリストから追加または削除を行うためのダイアログが表示される。 |
[Name of generated IDL File] | 生成される COM インタフェース定義言語 (Interface Definition Language: IDL) ファイルの名前。myjvm と指定した場合は、myjvm.idl が生成される。この名前は、Microsoft の MIDL コンパイラを使用して myjvm.idl をコンパイルするときに生成される型ライブラリの名前にも使用される。 |
[Output Directory] | java2com が生成したファイルを出力するディレクトリ。デフォルトはカレント ディレクトリ (".")。 |
[Dump Analysis] | java2com が発見したクラスをそのまま表示する。 |
[Save settings] と [Load settings] | [Save settings] ボタンをクリックすると、現在の java2com 設定が保存される。この操作を行ってから、[Generate] をクリックする。
|
[Names] | [Names] ボタンをクリックすると、次のダイアログ ボックスが表示される。
クラス/インタフェース名ドロップダウン リストから「*」を選択すると、メンバー (フィールドまたはクラス) 名の名前を入力するためのテキスト ボックスが表示される。生成するクラスまたはインタフェースでそのメンバー名が見つかったときに使用される対応 COM 名を指定できる。この名前を空白のままにした場合、Java メンバーは COM インタフェースで生成される対応メンバーを持たない。 クラス/インタフェース名ドロップダウン リストから特定の COM クラス名またはインタフェースを選択すると、そのクラスまたはインタフェースのメンバーのセットがその下に表示される。使用する COM 名を指定し、[Add this Class Name map] をクリックすることによって、選択したクラス/インタフェースを指定した COM 名にマップする。[Add this Member Name map] をクリックすると、選択したメンバーを指定した 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 参照を作成および管理できます。
注意 : regjvm ツールでは、古いエントリと同名の新しいエントリが入力されても、古いエントリは上書きされません。このため、通信するマシンのホスト名またはポートを変更する必要がある場合は、古いエントリの登録を解除して新しいエントリを登録する必要があります。そのためには、コマンドライン ツールの regjvmcmd.exe か、または GUI ツールの regjvm.exe を使用します (どちらも WL_HOME\server\bin ディレクトリに格納されています)。 |
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 内の Java コードは、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
")) で使用する名前に対応。
JMV にアクセスするためのバインディング。形式は hostname [port] で、hostname は JMV を実行するマシン名、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 (via jCOM))
java2com
で生成された IDL ファイルから型ライブラリが生成されなかった場合、各 COM クラスに対してインスタンス化する Java クラスの名前を指定する必要があります。
このため、誰かが Atldll.Apple
のインスタンスを作成しようとした場合、WebLogic jCOM によって JVM MyJvm
内の com.bea.MyAppleClass
がインスタンス化されます。MyAppleClass クラスは、COM クラス Atldll.Apple
によって実装される atldll.tlb
から WebLogic jCOM の java2com
ツールで生成された Java インタフェースを実装します。