Oracle® Fusion Middleware Oracle WebLogic Server JCOMのプログラミング 11gリリース1 (10.3.6) B61628-06 |
|
前 |
この章では、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で使用されているメソッド(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は単一要素配列を受け渡して対応するプロトタイプを生成するものと見なします。 このオプションを選択し、 |
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オブジェクトに関するドキュメントを参照してください。たとえば、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クラスのインスタンスは、そのインタフェースに定義されているイベントをサブスクライブできます。サブスクライブしたオブジェクトに対してインタフェース内のメソッドが呼び出されます。
注意: 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
は、どのプラットフォームでも実行できます。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インタフェース定義言語(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」マップをクリックすることによって、選択したクラス/インタフェースを指定した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参照を作成および管理できます。
注意: 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です。
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インタフェースを実装します。