![]() ![]() ![]() ![]() |
以下の節では、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
のセッション間で自動的に保存されます。特定のプロキシの生成処理でのみオプションが必要な場合は、プロキシの生成後にオプションをリセットします。
[Generate Proxies
] ボタンをクリックすると、com2java
ツールによって生成される Java ファイルを格納するディレクトリを選択できます。
ディレクトリを選択すると、com2java
は型ライブラリを解析し、対応するファイルを指定したディレクトリに出力します。すでにディレクトリに Java ソース ファイルが存在する場合、WebLogic jCOM は警告メッセージを発行し、操作をキャンセルできるようにします。
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 インタフェースを生成します。
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 メカニズムを使用して) 解析し、以下のものを出力します。
これらのファイルを生成した後、Microsoft の MIDL
ツールを使用して IDL ファイルをコンパイルします。
IDL ファイルとラッパーを生成するには、まず次のコマンドを使用して java2com
ツールを起動します。
java com.bea.java2com.Main
java2com
ツールでは、次のダイアログ ボックスを表示します。
このダイアログ ボックスには、以下のフィールドが存在します (コンフィグレーションの変更は、ダイアログ ボックスの終了時に自動的に保存されます)。
WebLogic jCOM を使用して COM をサポートする言語で、あたかも COM オブジェクトであるかのように Java オブジェクトにアクセスできるようにするには、Java オブジェクトが実行される JVM の参照を (COM クライアント マシン上に) 登録する必要があります。regjvm
ツールを使用すると、マシン上ですべての JVM 参照を作成および管理できます。
注意 : | regjvm ツールでは、古いエントリと同名の新しいエントリが入力されても、古いエントリは上書きされません。このため、通信するマシンのホスト名またはポートを変更する必要がある場合は、古いエントリの登録を解除して新しいエントリを登録する必要があります。そのためには、コマンドライン ツールの regjvmcmd.exe か、または GUI ツールの regjvm.exe を使用します (どちらも WL_HOME \server\bin ディレクトリに格納されています)。 |
COM クライアントから JVM には、以下のモードでアクセスできます。
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
ツールを実行すると、以下のダイアログ ボックスが表示されます。
詳細オプションは、DCOM モードの詳細オプションと同じです。「regjvm GUI ツールの DCOM モード オプション」を参照してください。
regjvmcmd は、「regjvm」で説明した GUI ツール、regjvm
のコマンドライン バージョンです。このパラメータの一覧を参照するには、パラメータを指定せずに次のように実行します。
regjvmcmd
最も単純な形式の regjvmcmd
では、以下のものを指定します。
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 インタフェースを実装します。
![]() ![]() ![]() |