ナビゲーションをスキップ

WebLogic jCOM プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

jCOM ツールの詳細

以下の節では、jCOM アプリケーションで使用するツールについて詳しく説明します。

 


com2java

WebLogic jCOM の com2java ツールは、型ライブラリから情報を読み込み、その型ライブラリに定義されている COM クラスおよびインタフェースにアクセスするための Java ファイルを生成します。

型ライブラリには、COM クラス、インタフェース、およびその他のコンストラクトが登録されています。通常、これらは Visual C++ や Visual BASIC などの開発ツールによって生成されます。

このため、一部の型ライブラリは簡単に識別できます。拡張子 olb または tlb で終わるファイルは、確実に型ライブラリです。しかし、型ライブラリが実行ファイルなどの他のファイルに格納される場合は、把握しづらくなります。Visual BASIC では、生成した実行ファイルに型ライブラリを格納します。

com2java の使い方

com2java は、コマンド シェルで入力するか、そのアイコンをダブルクリックして起動します。

com2java を起動すると、次のダイアログが表示されます。


 

型ライブラリの選択

ツールで処理する型ライブラリを選択するには、[Select] ボタンをクリックします。

型ライブラリは、COM コンポーネントを含んでいる実行ファイルやダイナミック リンク ライブラリ (dynamic link library: DLL) ファイルなどの内部に隠されている場合もあります。

com2java ツールは、以前に開いてそのプロキシを生成した型ライブラリのリストを記憶しています。

Java パッケージ名の指定

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 は単一要素配列を受け渡したと仮定して対応するプロトタイプを生成する。

このオプションを選択し、com2java で、たとえば「String[]」の代わりに「Object」を生成することにより、自由に 2D 文字列配列を受け渡すことができる。

[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 フレームに埋め込むために使用する。


プロキシの生成

[Generate Proxies] ボタンをクリックすると、com2java ツールによって生成される Java ファイルを格納するディレクトリを選択できます。

ディレクトリを選択すると、com2java は型ライブラリを解析し、対応するファイルを指定したディレクトリに出力します。すでにディレクトリに Java ソース ファイルが存在する場合、WebLogic jCOM は警告メッセージを発行し、操作をキャンセルできるようにします。

com2java により生成されたファイル

com2java ツールは、型ライブラリに含まれる以下の 3 種類のコンストラクトを扱います。

この節では、これらのコンストラクトについて説明します。

生成された Java ファイルを使用して COM オブジェクトを操作する方法については、アクセスする COM オブジェクトに関するドキュメントを参照してください。

たとえば、com2java を Excel 型ライブラリに対して実行する場合、生成される Java ファイルは Microsoft Excel COM API に対応しています。このため、Microsoft Excel のプログラミング ドキュメントを参照する必要があります。たとえば、Excel 2000 COM API については下記を参照します。

http://msdn.microsoft.com/library/default.asp?URL=/library/officedev/off2000/xltocobjectmodelapplication.htm

列挙値

Java では、列挙値は java.util.Enumeration で表されるリストです。型ライブラリに列挙値が含まれている場合、WebLogic jCOM はその列挙中の要素ごとの定数定義を含んだ Java インタフェースを生成します。

COM インタフェース

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 クラス

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

java2com は、どのプラットフォームでも実行できます。WebLogic jCOM ランタイム weblogic.jarCLASSPATH 環境変数に含まれていることを確認してください。

java2com ツールは、Java クラスを (Java reflection メカニズムを使用して) 解析し、以下のものを出力します。

これらのファイルを生成した後、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] をクリックする。

java2com は、起動時にカレント ディレクトリに java2com.ser 設定ファイルが存在するかどうかをチェックする。存在する場合、そのファイルから設定を自動的にロードする。

[Names]


[Names] ボタンをクリックすると、次のダイアログ ボックスが表示される。

クラス/インタフェース名ドロップダウン リストから「*」を選択すると、メンバー (フィールドまたはクラス) 名の名前を入力するためのテキスト ボックスが表示される。生成するクラスまたはインタフェースでそのメンバー名が見つかったときに使用される対応 COM 名を指定できる。この名前を空白のままにした場合、Java メンバーは COM インタフェースで生成される対応メンバーを持たない。

クラス/インタフェース名ドロップダウン リストから特定の COM クラス名またはインタフェースを選択すると、そのクラスまたはインタフェースのメンバーのセットがその下に表示される。使用する COM 名を指定し、[Add this Class Name map] をクリックすることによって、選択したクラス/インタフェースを指定した COM 名にマップする。[Add this Member Name map] をクリックすると、選択したメンバーを指定した COM 名にマップできる。

[Generate] ボタン


このボタンをクリックすると、ラッパーおよび IDL ファイルが生成される。

java2com が発見するパブリック Java インタフェースごとに、対応する COM インタフェース定義が作成される。Java インタフェース名が com.bea.finance.Bankable の場合、生成される COM インタフェースの名前は、[Names] ダイアログで異なる名前を指定しない限り、ComBeaFinanceBankable となる。

java2com が発見するパブリック Java クラスごとに、対応する COM インタフェース定義が作成される。Java クラス名が com.bea.finance.Account の場合、生成される COM インタフェースの名前は、[Names] ダイアログで異なる名前を指定しない限り、IComBeaFinanceAccount となる。また、Java クラスがパブリック デフォルト コンストラクタを持つ場合、java2com では、[Names] ダイアログで異なる名前を指定しない限り、COM クラス ComBeaFinanceAccount を生成する。

Java クラスが Java イベントを生成できる場合、生成される COM クラスは Java クラスによってサポートされるイベントに対応するソース インタフェース (COM イベント) を持つ。

生成された IDL ファイルは、Microsoft の MIDL ツールを使用してコンパイルする。このツールは Visual C++ に付属しており、Microsoft Web サイトからダウンロードできる。次のコマンド、

midl procdServ.idl

は、prodServ.tlb という型ライブラリを生成する。このライブラリは、「regtlb」に記載されているように登録する必要がある。

 


regjvm

WebLogic jCOM を使用して COM をサポートする言語で、あたかも COM オブジェクトであるかのように Java オブジェクトにアクセスできるようにするには、Java オブジェクトが実行される JVM の参照を (COM クライアント マシン上に) 登録する必要があります。regjvm ツールを使用すると、マシン上ですべての JVM 参照を作成および管理できます。

注意 : regjvm ツールでは、古いエントリと同名の新しいエントリが入力されても、古いエントリは上書きされません。このため、通信するマシンのホスト名またはポートを変更する必要がある場合は、古いエントリの登録を解除して新しいエントリを登録する必要があります。そのためには、コマンドライン ツールの regjvmcmd.exe か、または GUI ツールの regjvm.exe を使用します (どちらも WL_HOME\server\bin ディレクトリに格納されています)。

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 内の Java コードは、com.bea.jcom.Jvm.register(<jvm id>) を呼び出す必要があります。ここで <jvm id> は、regjvm で定義した JVM の ID です。

ネイティブ モード (イン プロセス)

イン プロセスのネイティブ モードを使用すると、Java オブジェクトを COM クライアントと同じプロセスに実際にロードできます。もちろん、どちらのオブジェクトも同じマシン上に配置する必要があります。


 

JVM は、com.bea.jcom.Jvm.register() を呼び出す必要はなく、クライアントの追加プロセスとして開始する必要もありません。

regjvm GUI ツールのユーザ インタフェース

regjvm ツールを実行すると、以下のダイアログ ボックスが表示されます。


 

regjvm GUI ツールの DCOM モード オプション


 

標準オプション

詳細オプション

regjvm GUI ツールのネイティブ モード オプション


 

標準オプション

詳細オプション

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

regjvm GUI ツールのネイティブ モード イン プロセス オプション


 

標準オプション

詳細オプション

 


regjvmcmd

regjvmcmd は、「regjvm」で説明した GUI ツール、regjvm のコマンドライン バージョンです。このパラメータの一覧を参照するには、パラメータを指定せずに次のように実行します。

regjvmcmd

最も単純な形式の regjvmcmd では、以下のものを指定します。

JVM を登録する必要がないか、またはその登録を変更する場合、最初に次のコマンドを使用してその登録を解除しておく必要があります。

regjvmcmd /unregister JvmId 

 


regtlb

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 インタフェースを実装します。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次