ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JCOMのプログラミング
11g リリース1 (10.3.6)
B61628-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
 

5 jCOMツールの詳細

この章では、jCOMアプリケーションによって使用されるツールについて詳しく説明します。ツールは、com2javajava2comregjvmregjvmcmdおよびregtlbです。

com2java

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

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

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

com2javaの使い方

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

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

com2java.gifについては周囲のテキストで説明しています。

タイプ・ライブラリの選択

ツールで処理するタイプ・ライブラリを選択するには、「Select」ボタンをクリックします。

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

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

Javaパッケージ名の指定

com2javaツールは、タイプ・ライブラリのCOMクラスおよびインタフェースに対応するJavaソース・ファイルを生成します。生成されたファイルは、特定のパッケージに格納します。たとえば、Excelタイプ・ライブラリのファイルをすべてexcelというJavaパッケージに格納できます。

「Java package」テキスト・ボックスに、生成されたファイルを格納するパッケージの名前を指定します。

com2javaツールは、特定のタイプ・ライブラリに対して指定した直前のパッケージ名を記憶しています。

オプション

「Options」ボタンをクリックすると、以下で説明するcom2java用のオプションを選択するためのダイアログ・ボックスが表示されます。これらのオプションは、com2javaのセッション間で自動的に保存されます。特定のプロキシの生成処理でのみオプションが必要な場合は、プロキシの生成後にオプションをリセットします。

オプション 説明

Clash Prefix

タイプ・ライブラリに定義されているCOMインタフェースのメソッドがすでにJavaで使用されているメソッド(getClass()メソッドなど)と衝突する場合、com2javaは生成したメソッドの名前の先頭にzz_という文字列(デフォルト)を付けます。

Lower case method names

Javaメソッド名の命名規則では、メソッド名は小文字で開始する必要があります。com2javaツールはデフォルトでこの規則を採用し、それに応じてメソッド名を変更します。com2javaでこの規則を無視する場合は、「Options」ダイアログ・ボックスの「Lower case 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オブジェクトに関するドキュメントを参照してください。たとえば、Excelタイプ・ライブラリでcom2javaを実行した場合、生成されたJavaファイルはMicrosoft Excel COM APIに対応します。詳細は、Microsoft Excelのプログラミング・ドキュメントを参照する必要があります。

列挙値

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ツールは、クラスがインタフェースをソース・インタフェースとして使用していることを検出すると、そのインタフェース用の特殊なコードを生成します。それは、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ツールでは、次のダイアログ・ボックスを表示します。

java2comdefault.gifについては周囲のテキストで説明しています。

このダイアログ・ボックスには、以下のフィールドが存在します(構成の変更は、ダイアログ・ボックスの終了時に自動的に保存されます)。

フィールド 説明

Java Classes and Interfaces

java2comが解析する「ルート」Javaクラスとインタフェースです。これらは、CLASSPATHでアクセスできる必要があります。WebLogic jCOMはこれらのクラスを解析し、COM IDL定義と、COMからJavaクラスにアクセスできるJava DCOMマーシャリング・コードを生成します。次に、そのクラスのパラメータまたはフィールドで使用されるクラスまたはインタフェースに対して同じ解析を再帰的に実行し、同様にアクセスできるすべてのJavaクラスとインタフェースを解析します。

クラス名はスペースで区切って入力します。「...」ボタンをクリックすると、ダイアログにクラスのリストが表示されるので、そのリストに対して追加または削除を実行できます。

Name of generated IDL File

生成されるCOMインタフェース定義言語(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」マップをクリックすることによって、選択したクラス/インタフェースを指定したCOM名にマップします。「Add this Member Name」マップをクリックすると、選択したメンバーを指定した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モード

DCOMモードでは、Javaサーバー・サイド上にネイティブ・コードは不要です。このため、JavaコードをJava仮想マシンがインストールされているUnixマシンや他のマシン上に配置できます。Windowsクライアント・マシン上でJVMを登録する場合、サーバーのホスト・マシン名(ローカル・コンポーネント用のローカル・ホストの場合もあります)とポート番号を定義します。

dcom.gifについては周囲のテキストで説明しています。

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

ネイティブ・モード(アウト・オブ・プロセス)

ネイティブ・モードは現在、ローカル・マシン上でのみ動作します。JVM名以外にパラメータは必要ありません。

native.gifについては周囲のテキストで説明しています。

JVMは、com.bea.jcom.Jvm.register(<jvm id>)を呼び出す必要があります。ここで<jvm id>は、regjvmで定義したJVMのIDです。

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

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

nativeinprocess.gifについては周囲のテキストで説明しています。

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

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

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

regjvm_dcom.gifについては周囲のテキストで説明しています。
  • 上部は、現在のマシン上のすべてのJVMを選択および管理するための部分です。JVMは変更、追加、または削除できます。異なるJVMに切り替える場合は、現在選択されているJVMに対する変更を保存する必要があります。また、JVMモードを選択します。その際、必要な情報がダイアログの下部に表示されます。

  • ダイアログの下部には、それぞれのJVMで必要な詳細が、JVMのモードに従って表示されます。JVMの詳細のほかに、各JVMモードの詳細オプションを表示するためのチェック・ボックスも存在します。

    これらのオプションについては、以下の節で説明します。

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

regjvm_dcom.gifについては周囲のテキストで説明しています。

標準オプション

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

  • Hostname - JVMが存在するホスト名またはIPアドレスです。

  • Port - JVMとの通信を開始するためのポート番号です。

regjvm3.gifについては周囲のテキストで説明しています。

詳細オプション

  • 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の設定を選択するレジストリ・スクリプトを生成できます。

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

regjvm4.gifについては周囲のテキストで説明しています。

標準オプション

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

regjvm5.gifについては周囲のテキストで説明しています。

詳細オプション

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

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

regjvm6.gifについては周囲のテキストで説明しています。

標準オプション

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

regjvm7.gifについては周囲のテキストで説明しています。

詳細オプション

  • 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

regjvmcmdは、regjvmで説明したGUIツールregjvmのコマンド・ライン・バージョンです。パラメータの概要を参照するには、パラメータを指定せずにツールを実行します。

   regjvmcmd

最も単純な形式のregjvmcmdでは、次を指定します:

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

   regjvmcmd /unregister JvmId 

regtlb

WebLogic jCOMのregtlbツールは、COMのアーリー・バインディング・メカニズムを使用してJavaオブジェクトにアクセスする必要のあるCOM Windowsクライアントにタイプ・ライブラリを登録します。regtlbは、2つのパラメータを取ります。最初のパラメータは、登録するタイプ・ライブラリ・ファイルの名前です。2番目は、タイプ・ライブラリに記述されているCOMクラスが存在するJVMのIDです。

regtlb.gifについては周囲のテキストで説明しています。

WebLogic jCOM java2comツールで生成されたIDLファイルからタイプ・ライブラリが生成された場合、regtlbコマンドは、タイプ・ライブラリ内の各COMクラスに対応するJavaクラス名を自動的に調べます。タイプ・ライブラリのCOMクラス記述の形式は次のとおりです。

   Java class java.util.Observable (through jCOM))

java2comで生成されたIDLファイルからタイプ・ライブラリが生成されなかった場合、各COMクラスに対してインスタンス化するJavaクラスの名前を指定する必要があります。

regtlbnj.gifについては周囲のテキストで説明しています。

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