BEA ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Server > WebLogic jCOM プログラマーズ ガイド > COM クライアント アプリケーションから WebLogic Server への呼び出し |
WebLogic jCOM プログラマーズ ガイド
|
COM クライアント アプリケーションから WebLogic Server への呼び出し
この章では、COM クライアントから WebLogic Server 上のメソッドを呼び出すために WebLogic jCOM を使用する方法について説明します。
COM-to-WLS アプリケーションをネイティブ モードで実行するためには、WebLogic Server を COM クライアント マシンにインストールする必要があります。ただし、COM クライアントを実行するマシンごとに別個の WebLogic Server ライセンスが必要というわけではありません。
ネイティブ モードの詳細については、ネイティブ モードでの COM-to-WLS アプリケーションの実行を参照してください。
COM クライアントから WebLogic Server を呼び出す主な手順
この節では、COM クライアントから WebLogic Server への呼び出しを行うための主な手順を簡単に説明します。詳細については、以降の節で説明します。
上記の手順については、Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみを参照してください。
以下の節では、COM クライアントが WebLogic Server オブジェクト上のメソッドを呼び出せるように、WebLogic Server を準備する方法について説明します。
Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ
set CLASSPATH=%JAVA_HOME%¥lib¥tools.jar;
%WL_HOME%¥server¥lib¥weblogic.jar;%CLASSPATH%
[Java Classes & Interfaces] : jCOMHelper examples.ejb20.basic.containerManaged.AccountHome [ここに変換するラッパー クラスをリストします。]
[Name of generated IDL File] : IDL ファイルの名前
[Output Directory] : ドライブ文字とルート ディレクトリ ¥TLB
java2com ツールは、指定されたクラスとメソッド パラメータで使用される他のすべてのクラスを参照します。この作業は再帰的に行われます。ここでは、複数のクラスまたはインタフェースをスペースで区切って指定できます。
抽象クラスではなく、パラメータ コンストラクタを持たない Java のパブリック クラスはすべて、COM クラスとしてアクセス可能になります。他のパブリック クラス、およびすべてのパブリック インタフェースは、COM インタフェースとしてアクセス可能になります。
この時点で [Generate] ボタンをクリックしてラッパーと IDL を作成する場合、生成されたラッパーと IDL をコンパイルしようとすると、エラーが発生します。これは、java2com ツールのデフォルトで特定のクラスが省略されているためです。コンパイル中に生成されたエラーを参照することにより、どのクラスで問題が発生しているか判別できます。
この問題を修正するには、java2com ツールで [Names] ボタンをクリックして、必要なクラス ファイルへのあらゆる参照を削除します。この例では、次の参照を削除する必要があります。
java2com ツールでは、Java オブジェクトへのアクセスに使用される DCOM マーシャリング コードを含む Java クラスが生成されます。これらの生成されたクラスは、WebLogic jCOM ランタイムによって背後で使用されます。必要なのはこれらのクラスをコンパイルすることだけです。また、これらのクラスが CLASSPATH に含まれていることを確認してください。
WebLogic Server を起動します。「WebLogic Server の起動と停止」を参照してください。
WebLogic Server をインストールすると自動的に jCOM がインストールされますが、jCOM を有効にする必要があります。これによって、リスン ポート上で COM の呼び出しをリスンするようにサーバに知らせます。
COM クライアント アプリケーションがアクセスする必要のあるクラスに、COM クライアント ユーザ アクセスを許可します。特定のアプリケーションによって、どのクラスを公開するかが決定されます。
ここでは、このリリースに付属するゼロ クライアントの例を示します (WL_HOME/samples/server/src/examples/jcom/zeroclient を参照してください)。
ゼロ クライアントの場合、COM クライアントは次の 3 つのクラスにアクセスする必要があります。
java.util.Collection および java.util.Iterator へのアクセスの許可
注意: ゼロ クライアントの例では、「everyone」にアクセスが許可されていますが、アクセスを許可する際には、できるだけ制約を設けることをお勧めします。
ejb20.basic.beanManaged へのアクセスの許可
ゼロ クライアントの例では、ejb20.basic.beanManaged クラスへのアクセスも必要です。
これを実現するには、手順 3 の「java.util.*」を「ejb20.basic.beanManaged.*」に置き換えて、java.util.Collection および java.util.Iterator へのアクセスの許可,の手順を繰り返します。
最後にアスタリスクが付いているため、実際には ejb20.basic.beanManaged パッケージ全体にアクセスを許可していることに注意してください。
クラスへのアクセス許可および取消しに関する詳細については、Console オンライン ヘルプ の 7.x セキュリティに関する節を Web ブラウザで参照してください。
その他の必要な jCOM コンソール プロパティをコンフィグレーションします。詳細については、jCOM プロパティに関する Console オンライン ヘルプを参照してください。
これらのプロパティのいずれかを有効にするためにサーバを起動する必要がある場合は、ここで再起動します。
以下の節では、WebLogic Server オブジェクト上のメソッドを呼び出せるように COM クライアントを準備する方法について説明します。
WebLogic Server オブジェクト上のメソッドを呼び出すために、クライアント マシンにインストールしておく必要のあるファイルが多数あります。以下に示すように、このうち一部のファイルは、ネイティブ モードでメソッドを呼び出す場合にのみ必要です。
jCOM ツールを実行するには、5 つのファイルと 3 つのフォルダ (すべてのサブフォルダとファイルを含む) が必要です。WebLogic Server をインストールしたマシン上の WL_HOME¥server¥bin ディレクトリに、ファイルがあります。ファイルは次のとおりです。
jCOM ツールの詳細については、jCOM ツールの詳細を参照してください。
WebLogic Server クラス ファイル - ネイティブ モードのみ
ネイティブ モードでアプリケーションを実行するには、COM クライアント マシンが特定の WebLogic Server クラス ファイルにアクセスできる必要があります。これらのファイルを取得するには、各 COM クライアント マシンに WebLogic Server をインストールします。ただし、COM クライアントを実行するマシンごとに別個の WebLogic Server ライセンスが必要というわけではありません。
WebLogic Server サーブレットからのオブジェクト参照モニカの取得 - ゼロ クライアントのみ
オブジェクト参照モニカ (ORM) は、WebLogic Server から取得できます。COM クライアント アプリケーションからモニカを使用できるので、regjvmcmd を実行する必要がなくなります。新規サーバを作成しても、サーバのホストとポートが同じである限りモニカは有効なままです。
COM クライアント コードに対して ORM を取得する方法が 2 つあります。
Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ
クライアント側に割り当てられたラッパー ファイルおよびインタフェース定義言語 (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
上の最初の行は、登録済みの型ライブラリ バージョンの登録を解除するために regtlb.exe を呼び出します。2 行目の行は、新しくコンパイルされた型ライブラリを登録します。
regtlb に渡される 2 番目のパラメータ registered_jvm は重要です。これは、型ライブラリにリンクされる JVM の名前を指定します。WebLogic jCOM ランタイムでは、型ライブラリで定義されたオブジェクト呼び出しを適切なラッパー クラスにリンクするためにこの情報が必要となります。
WebLogic Server JVM は、regjvm ツールを通じてクライアント マシンのレジストリに登録されます。詳細については、クライアント マシン レジストリへの WebLogic Server JVM の登録を参照してください。
クライアント マシン レジストリへの WebLogic Server JVM の登録
サーバ名を Windows レジストリに追加し、その名前を TCP/IP アドレスおよび WebLogic が受信する COM 要求をリスンするクライアント サーバ間の通信ポートに関連付けることで、ローカル Java Vertual 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 オブジェクト上のメソッドを呼び出すことができます。これを自然にコード化する方法は、レイト バインディングを選択するか、アーリー バインディングを選択するかによって異なります。
この節で記載するコードは、この製品に付属するアーリー バインドのサンプルとレイト バインドのサンプルからの抜粋です。サンプル コードは SAMPLES_HOME¥server¥src¥examples¥jcom から入手できます。
このレイト バインドのサンプルである 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 アプリケーションの実行
COM-to-WLS アプリケーションでは、ネイティブ モードに「イン プロセス」と「アウト オブ プロセス」の区別があります。
アプリケーションで使用するプロセスを指定するには、regjvm GUI ツール インタフェースで [Native mode in process] または [Native mode] ラジオ ボタンを選択します。
アウト オブ プロセスで JVM を実行するネイティブ モード
JVM をアウト オブ プロセスで実行する (ただし、ネイティブ コードを使用して COM クライアントに中の Java オブジェクトへのアクセスを許可する) 場合、次の手順に従います。
注意: JVM を登録する場合には、[JVM id] フィールドにサーバの名前を指定する必要があります。たとえば、exampleServer で JCOM ネイティブ モードが有効になっているときに、regjvm を使用して登録する場合には、[JVM id] ボックスに exampleServer と入力します。
regjvm ツールの詳細については、jCOM ツールの詳細を参照してください。
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¥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 ツールの詳細を参照してください。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |