WebLogic jCOM プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
この章では、COM クライアントから WebLogic Server 上のメソッドを呼び出すために WebLogic jCOM を使用する方法について説明します。
COM-to-WLS アプリケーションをネイティブ モードで実行するためには、WebLogic Server を COM クライアント マシンにインストールする必要があります。ただし、COM クライアントを実行するマシンごとに別個の WebLogic Server ライセンスが必要というわけではありません。
ネイティブ モードの詳細については、「ネイティブ モードでの COM-to-WLS アプリケーションの実行」を参照してください。
この節では、COM クライアントから WebLogic Server への呼び出しを行うための主な手順を簡単に説明します。詳細については、以降の節で説明します。
java2com
ツールを実行して Java ラッパー クラスとインタフェース定義言語 (Interface Definition Language: IDL) ファイルを生成し、これらのファイルをコンパイルします。「Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ」を参照してください。上記の手順については、「Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ」を参照してください。
以下の節では、COM クライアントが WebLogic Server オブジェクト上のメソッドを呼び出せるように、WebLogic Server を準備する方法について説明します。
set CLASSPATH=%JAVA_HOME%\lib\tools.jar;
%WL_HOME%\server\lib\weblogic.jar;%CLASSPATH%
JAVA_HOME
は、JDK がインストールされているルート フォルダ (通常は c:\bea\jdk131
) で、WL_HOME
は、WebLogic Platform ソフトウェアがインストールされているルート ディレクトリ (通常は c:\bea\weblogic700
) です。
java com.bea.java2com.Main
Java Classes & Interfaces
: 変換するラッパー クラスのリストName of generated IDL File
: IDL ファイルの名前Output Directory
: ドライブ文字とルートディレクトリ\TLB
java2com ツールは、指定されたクラスとメソッド パラメータで使用される他のすべてのクラスを参照します。この作業は再帰的に行われます。ここでは、複数のクラスまたはインタフェースをスペースで区切って指定できます。
抽象クラスではなく、パラメータ コンストラクタを持たない Java のパブリック クラスはすべて、COM クラスとしてアクセス可能になります。他のパブリック クラス、およびすべてのパブリック インタフェースは、COM インタフェースとしてアクセス可能になります。
この時点で [Generate] ボタンをクリックしてラッパーと IDL を作成する場合、生成されたラッパーと IDL をコンパイルしようとすると、エラーが発生します。これは、java2com
ツールのデフォルトで特定のクラスが省略されているためです。コンパイル中に生成されたエラーを参照することで、どのクラスで問題が発生しているか判別できます。
この問題を修正するには、java2com ツールで [Names] ボタンをクリックして、必要なクラス ファイルへのあらゆる参照を削除します。この例では、次の参照を削除する必要があります。
*.toString->''''
class java.lang.Class->''''
java2com
ツールでは、Java オブジェクトへのアクセスに使用される DCOM マーシャリング コードを含む Java クラスが生成されます。これらの生成されたクラスは、WebLogic jCOM ランタイムによって背後で使用されます。必要なのはこれらのクラスをコンパイルすることだけです。また、これらのクラスが CLASSPATH に含まれていることを確認してください。
COM クライアント アプリケーションがアクセスする必要のあるクラスに、COM クライアント ユーザ アクセスを許可します。特定のアプリケーションによって、どのクラスを公開するかが決定されます。
たとえば、COM クライアントが次の 3 つのクラスにアクセスする必要があるとします。
ejb20.basic.beanManaged
へのアクセスを許可するには、手順 3 の「java.util.*」を「ejb20.basic.beanManaged.*」に置き換えて、「java.util.Collection および java.util.Iterator へのアクセスの許可」の手順を繰り返します。
最後にアスタリスクが付いているため、実際には ejb20.basic.beanManaged パッケージ全体にアクセスを許可しています。
以下の節では、WebLogic Server オブジェクト上のメソッドを呼び出せるように COM クライアントを準備する方法について説明します。
WebLogic Server オブジェクト上のメソッドを呼び出すために、クライアント マシンにインストールしておく必要のあるファイルが多数あります。以下に示すように、このうち一部のファイルは、ネイティブ モードでメソッドを呼び出す場合にのみ必要です。
jCOM ツールを実行するために必要な 5 つのファイルと 3 つのフォルダ (全サブフォルダおよびファイルを含む) があります。これらのファイルは、WebLogic Server がインストールされているマシンの WL_HOME
\server\bin
ディレクトリに格納されています。ファイルは次のとおりです。
JintMk.dll
ntvinv.dll
regjvm.exe
regjvmcmd.exe
regtlb.exe
regjvm
(全サブフォルダおよびファイルを含む)regjvmcmd
(全サブフォルダおよびファイルを含む)regtlb
(全サブフォルダおよびファイルを含む)jCOM ツールの詳細については、「jCOM ツールの詳細」を参照してください。
ネイティブ モードで COM-to-WLS アプリケーションを実行するには、COM クライアント マシンが特定の WebLogic Server クラス ファイルにアクセスできる必要があります。これらのファイルを取得するには、各 COM クライアント マシンに WebLogic Server をインストールします。ただし、COM クライアントを実行するマシンごとに別個の WebLogic Server ライセンスが必要というわけではありません。
オブジェクト参照モニカ (object reference moniker: ORM) は、WebLogic Server から取得できます。COM クライアント アプリケーションからモニカを使用できるので、regjvmcmd
を実行する必要がなくなります。新規サーバを作成しても、サーバのホストとポートが同じである限りモニカは有効なままです。
COM クライアント コードに対して ORM を取得する方法が 2 つあります。
com.bea.jcom.GetJvmMoniker
Java クラスを実行します。 クライアント側に割り当てられたラッパー ファイルおよびインタフェース定義言語 (Interface Definition Language: IDL) ファイルの生成を実行します。
WebLogic Server 上で java2com
ツールの実行 (「WebLogic Server の準備」を参照) に成功した場合、IDL ファイルがサーバ マシン上に作成されています。この IDL ファイルをクライアント マシンにコピーして、この COM アプリケーションの \TLB
サブディレクトリに配置します。
注意 : java2com ツールがサンプルの \TLB
サブディレクトリに出力しているはずなので、同じマシン上でクライアントとサーバを実行している場合、この手順は必要ありません。
このコマンドで Microsoft IDL コンパイラ MIDL.EXE
を呼び出して、コンパイルを実行します。コンパイルの結果、containerManagedTLB.tlb
という型ライブラリが作成されます。
regtlb /unregisterall
registered_jvm
regtlb containerManagedTLB.tlb
1 行目は、登録済みの型ライブラリ バージョンの登録を解除するために regtlb.exe を呼び出します。2 行目は、新しくコンパイルされた型ライブラリを登録します。
regtlb
に渡される 2 番目のパラメータ registered_jvm
は重要です。これは、型ライブラリにリンクされる JVM の名前を指定します。WebLogic jCOM ランタイムでは、型ライブラリで定義されたオブジェクト呼び出しを適切なラッパー クラスにリンクするためにこの情報が必要です。
WebLogic Server JVM は、regjvm ツールを通じてクライアント マシンのレジストリに登録されます。詳細については、「クライアント マシン レジストリへの WebLogic Server JVM の登録」を参照してください。
java2com
ツールを使用して非推奨のメソッドを含む (または参照する) クラスのラッパーを作成する場合、コンパイル時に非推奨の警告が表示されます。これらの警告は無視できます。WebLogic jCOM は、メソッドを COM からアクセス可能にします。 サーバ名を Windows レジストリに追加し、その名前を TCP/IP アドレスおよび WebLogic が受信する COM 要求をリスンするクライアント サーバ間の通信ポートに関連付けることで、ローカル Java Virtual Machine に登録します。デフォルトは、localhost:7001 です。
regjvm
(または regjvmcmd
) ツールでは、古いエントリと同名の新しいエントリが入力されても、古いエントリは上書きされません。このため、通信するマシンのホスト名またはポートを変更する必要がある場合は、古いエントリの登録を解除して新しいエントリを作成する必要があります。
regjvm
ツール ウィンドウで JVM を登録解除するには、登録を解除する JVM を選択して、[Delete] を選択します。
別の方法として、コマンドライン ツール regjvmcmd から JVM の登録を解除します。
regjvmcmd /unregister servername
COM クライアントをネイティブ モードで実行している場合、regjvm
ウィンドウで [Native mode] または [Native mode in process] ラジオ ボタンをクリックするか、または /native
パラメータを使用して regjvmcmd
を呼び出します。この手順に関する詳細については、「ネイティブ モードでの COM-to-WLS アプリケーションの実行」を参照してください。
これで、WebLogic Server オブジェクト上のメソッドを呼び出すことができます。これをコード化する方法は、レイト バインディングを選択するか、アーリー バインディングを選択するかによって異なります。
次に示す Visual Basic アプリケーションのサンプルからの抜粋では、Account
EJB のホーム インタフェース mobjHome
の COM バージョンの宣言に注意してください。この COM オブジェクトは、サーバ側にある AccountHome インタフェースのインスタンスにリンクされます。
Dim mobjHome As Object
Private Sub Form_Load()
'Handle errors
On Error GoTo ErrOut '
Bind the EJB AccountHome object via JNDI
Set mobjHome = CreateObject("examplesServer:jndi:ejb20-containerManaged-AccountHome")
オーバーロードされていながらパラメータの数が同じメソッドを処理する場合、WebLogic jCOM には問題があります。オーバーロードされたメソッド内のパラメータ数が異なる場合、そのような問題はありません。
メソッド InitialContext.lookup
はオーバーロードされています。
public Object lookup(String)
public Object lookup(javax.naming.Name)
ルックアップを実行するには、オブジェクトを作成するために特別な JNDI モニカを使用する必要があります。
Set o = CreateObject("servername:jndi:objectname")
アーリー バインド コードの特徴は、オブジェクトとして宣言される変数の数が少ないことです。以前生成した型ライブラリを使用することにより、ここでオブジェクトを宣言できます。
「Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ」で生成した型ライブラリを使用してオブジェクトを宣言します。この Visual Basic コードからの抜粋では、IDL ファイルは containerManagedTLB
と呼ばれ、EJB は ExamplesEjb20BasicContainerManagedAccountHome
と呼ばれます。
Dim objNarrow As New containerManagedTLB.JCOMHelper
Set mobjHome = objNarrow.narrow(objTemp, "examples.ejb20.basic.containerManaged.AccountHome")
COM-to-WLS アプリケーションでは、ネイティブ モードに「イン プロセス」と「アウト オブ プロセス」の区別があります。
アプリケーションで使用するプロセスを指定するには、regjvm
GUI ツール インタフェースで [Native mode in process] または [Native mode] ラジオ ボタンを選択します。
JVM をアウト オブ プロセスで実行する (ただし、ネイティブ コードを使用して COM クライアントに中の Java オブジェクトへのアクセスを許可する) 場合、次の手順に従います。
注意 : JVM を登録する場合には、[JVM id] フィールドにサーバの名前を指定する必要があります。たとえば、exampleServer
で JCOM ネイティブ モードが有効になっているときに、regjvm
を使用して登録する場合には、[JVM id] ボックスに exampleServer
と入力します。
regjvm
ツールの詳細については、「jCOM ツールの詳細」を参照してください。
このテクニックを使用すると、実際に JVM を COM クライアントのアドレス空間にロードできます。
再び regjvm
コマンドを使用します。ただし、今度は追加パラメータを指定します。
注意 : JVM を登録する場合には、[JVM id] フィールドにサーバの名前を指定する必要があります。たとえば、exampleServer
で JCOM ネイティブ モードが有効になっているときに、regjvm
を使用して登録する場合には、[JVM id] ボックスに exampleServer
と入力します。
最も単純な例は、Visual Basic を使用して Java オブジェクトにレイト バインド アクセスすることです。まず、JVM を登録します。Sun の JDK 1.3.1 (c:\bea\jdk131
にインストールされている) を使用し、WebLogic Server が c:\bea\weblogic700\server\lib\weblogic.jar
にインストールされており、Java クラスが c:\pure
に格納されている場合は、以下の regjvm
ツール画面のように設定します。
JVM 名、CLASSPATH、および JVM bin ディレクトリ パスを指定します。
これで、Visual Basic から GetObject メソッドを呼び出すことができるようになります。
MessageBox GetObject("MyJVM.jndi.ejb20.beanManaged.AccountHome
")
regjvm
ツールの詳細については、「jCOM ツールの詳細」を参照してください。
![]() ![]() |
![]() |
![]() |