Oracle® Fusion Middleware Oracle WebLogic Server JCOMのプログラミング 11gリリース1 (10.3.6) B61628-04 |
|
![]() 前 |
この章では、jCOMアプリケーションで使用されるツールの詳細を示します。これらのツールは、com2java
、java2com
、regjvm
、regjvmcmd
、regtlb
などです。
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_という文字列(デフォルト)を付けます。 |
Lower case 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
ツールは、クラスがインタフェースをソース・インタフェースとして使用していることを検出すると、そのインタフェース用の特殊なコードを生成します。それは、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 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は、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インタフェースを実装します。