![]() ![]() ![]() ![]() |
この章では、COM クライアントから WebLogic Server オブジェクト上のメソッドを呼び出すために WebLogic jCOM を使用する方法について説明します。
COM-to-WLS アプリケーションをネイティブ モードで実行するためには、WebLogic Server を COM クライアント マシンにインストールする必要があります。ただし、COM クライアントを実行するマシンごとに別個の WebLogic Server ライセンスが必要というわけではありません。
ネイティブ モードの詳細については、「ネイティブ モードでの COM-to-WLS アプリケーションの実行」を参照してください。
この節では、COM クライアントから WebLogic Server への呼び出しを行うための主な手順を簡単に説明します。詳細については、以降の節で説明します。
上記の手順については、「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\wlserver_10.00) です。
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 ディレクトリに格納されています。ファイルは次のとおりです。
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 つあります。
ここで wlshost は WebLogic Server マシンを示し、wlsport はサーバのポート番号を示します。
java com.bea.jcom.GetJvmMoniker [wlshost] [wlsport]
objref モニカを示し、その使い方を説明する長いメッセージが表示されます。また、表示されるテキストは自動的にクリップボードにコピーされるので、ソースに直接貼り付けできます。指定したマシンとポートで WebLogic Server にアクセスするために、返された objref モニカを使用できます。
クライアントサイドに割り当てられたラッパー ファイルおよびインタフェース定義言語 (Interface Definition Language: IDL) ファイルの生成を実行します。
WebLogic Server 上で java2com ツールの実行 (「WebLogic Server の準備」を参照) に成功した場合、IDL ファイルがサーバ マシン上に作成されています。この IDL ファイルをクライアント マシンにコピーして、この COM アプリケーションの \TLB サブディレクトリに配置します。
注意 : | java2com ツールがサンプルの \TLB サブディレクトリに出力しているはずなので、同じマシン上でクライアントとサーバを実行している場合、この手順は必要ありません。 |
このコマンドで Microsoft IDL コンパイラ MIDL.EXE を呼び出して、コンパイルを実行します。コンパイルの結果、containerManagedTLB.tlb という型ライブラリが作成されます。
regtlb /unregisterall
regtlb containerManagedTLB.tlb registered_jvm
1 行目は、登録済みの型ライブラリ バージョンの登録を解除するために regtlb.exe を呼び出します。2 行目は、新しくコンパイルされた型ライブラリを登録します。
regtlb に渡される 2 番目のパラメータ registered_jvm は重要です。これは、型ライブラリにリンクされる JVM の名前を指定します。WebLogic jCOM ランタイムでは、型ライブラリで定義されたオブジェクト呼び出しを適切なラッパー クラスにリンクするためにこの情報が必要です。
WebLogic Server JVM は、regjvm ツールを通じてクライアント マシンのレジストリに登録されます。詳細については、「クライアント マシン レジストリへの WebLogic Server JVM の登録」を参照してください。
サーバ名を Windows レジストリに追加し、その名前を TCP/IP アドレスおよび WebLogic が受信する COM 要求をリスンするクライアント サーバ間の通信ポートに関連付けることで、ローカル Java 仮想マシンに登録します。デフォルトは、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 ツールの詳細」を参照してください。
com.bea.jcom.Jvm.register("MyJvm"):
public class MyJvm {
public static void main(String[] args) throws Exception {
// "firstjvm" の名前で JVM を登録
com.bea.jcom.Jvm.register("firstjvm");
Thread.sleep(6000000); // 1 時間の休止
}
Set acctEJB = CreateObject("firstjvm.jndi.ejb20.beanManaged.AccountHome")
また、独自のインスタンシエータ (com.bea.jcom.Jvm.register(...) への追加パラメータ) を JVM に関連付けることによって、COM クライアントの代わりに Java オブジェクトのインスタンス化を制御できます。これは、オブジェクト ファクトリの一種です。
このテクニックを使用すると、実際に 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\wlserver_10.00\server\lib\weblogic.jar にインストールされており、Java クラスが c:\pure に格納されている場合は、以下の regjvm ツール画面のように設定します。
JVM 名、CLASSPATH、および JVM bin ディレクトリ パスを指定します。
これで、Visual Basic から GetObject メソッドを呼び出すことができるようになります。
MessageBox GetObject("MyJVM.jndi.ejb20.beanManaged.AccountHome
")
regjvm ツールの詳細については、「jCOM ツールの詳細」を参照してください。
![]() ![]() ![]() |