ナビゲーションをスキップ

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 への呼び出しを行うための主な手順を簡単に説明します。詳細については、以降の節で説明します。

WebLogic Server 側

  1. アーリー バインディングを使用している場合、java2com ツールを実行して Java ラッパー クラスとインタフェース定義言語 (Interface Definition Language: IDL) ファイルを生成し、これらのファイルをコンパイルします。「Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ」を参照してください。
  2. サーバを起動します。「サーバの起動」を参照してください。
  3. サーバ リスン ポート上で COM 呼び出しを有効化します。「サーバ リスン ポート上での COM 呼び出しの有効化」を参照してください。
  4. COM クライアントにサーバ クラスへのアクセスを許可します。「アクセス制御のコンフィグレーション」を参照してください。
  5. 他の関連するコンソール プロパティをコンフィグレーションします。「その他のコンソール プロパティのコンフィグレーション」を参照してください。
  6. 静的コンソール プロパティの値を変更した場合、新しい値を有効にするためにサーバを再起動します。

COM クライアント側

  1. jCOM ツール ファイルおよび WebLogic Server クラス ファイル (ネイティブ モードの場合のみ) をインストールします。「必要なファイルのインストール」を参照してください。
  2. ゼロ クライアント インストールの場合
  3. アーリー バインディングを使用している場合
  4. 上記の手順については、「Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ」を参照してください。

  5. レジストリに WebLogic Server JVM を登録します。ネイティブ モードで WebLogic Server と通信する場合、ここで設定します。「クライアント マシン レジストリへの WebLogic Server JVM の登録」を参照してください。
  6. COM クライアント アプリケーションをコード化します。「COM クライアント アプリケーションのコード化」を参照してください。
  7. COM クライアントを起動します。「COM クライアントの起動」を参照してください。

 


WebLogic Server の準備

以下の節では、COM クライアントが WebLogic Server オブジェクト上のメソッドを呼び出せるように、WebLogic Server を準備する方法について説明します。

Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ

  1. JDK ライブラリへのパスと weblogic.jar へのパスを CLASSPATH に追加します。たとえば、次のように指定します。
  2. 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) です。

  3. java2com ツールで java ラッパー ファイルと IDL ファイルを生成します。
  4. java com.bea.java2com.Main

java2com GUI が表示されます。


 
  1. 次のように入力します。
  2. Java Classes & Interfaces: jCOMHelper examples.ejb20.basic.containerManaged.AccountHome [ここに変換するラッパー クラスをリストします。]
    Name of generated IDL File: IDL ファイルの名前
    Output Directory: ドライブ文字とルートディレクトリ\TLB

    TLB は OLE 型ライブラリです。

    java2com ツールは、指定されたクラスとメソッド パラメータで使用される他のすべてのクラスを参照します。この作業は再帰的に行われます。ここでは、複数のクラスまたはインタフェースをスペースで区切って指定できます。

    抽象クラスではなく、パラメータ コンストラクタを持たない Java のパブリック クラスはすべて、COM クラスとしてアクセス可能になります。他のパブリック クラス、およびすべてのパブリック インタフェースは、COM インタフェースとしてアクセス可能になります。

    この時点で [Generate] ボタンをクリックしてラッパーと IDL を作成する場合、生成されたラッパーと IDL をコンパイルしようとすると、エラーが発生します。これは、java2com ツールのデフォルトで特定のクラスが省略されているためです。コンパイル中に生成されたエラーを参照することで、どのクラスで問題が発生しているか判別できます。

    この問題を修正するには、java2com ツールで [Names] ボタンをクリックして、必要なクラス ファイルへのあらゆる参照を削除します。この例では、次の参照を削除する必要があります。

    *.toString->'''' 
    class java.lang.Class->''''


     
  3. これらの参照が削除されると、ラッパーと IDL を生成できます。java2com GUI で [Generate] をクリックします。

java2com ツールでは、Java オブジェクトへのアクセスに使用される DCOM マーシャリング コードを含む Java クラスが生成されます。これらの生成されたクラスは、WebLogic jCOM ランタイムによって背後で使用されます。必要なのはこれらのクラスをコンパイルすることだけです。また、これらのクラスが CLASSPATH に含まれていることを確認してください。

サーバの起動

WebLogic Server を起動します。「サーバの起動と停止」を参照してください。

サーバ リスン ポート上での COM 呼び出しの有効化

WebLogic Server をインストールすると自動的に jCOM がインストールされますが、jCOM を有効にする必要があります。これによって、リスン ポート上で COM の呼び出しをリスンするようにサーバに知らせます。

  1. WebLogic Server Administration Console を起動します。
  2. 左ペインで、サーバの名前をクリックします。
  3. 右ペインの [プロトコル] タブをクリックした後で [jCOM] タブをクリックして、jCOM プロパティ画面を表示します。
  4. [COM を有効化] ボックスをチェックします。
  5. サーバを再起動して設定を有効にします。コンソールで jCOM プロパティを設定する予定がある場合、サーバを再起動する前に行ってください (「その他のコンソール プロパティのコンフィグレーション」を参照)。

アクセス制御のコンフィグレーション

COM クライアント アプリケーションがアクセスする必要のあるクラスに、COM クライアント ユーザ アクセスを許可します。特定のアプリケーションによって、どのクラスをエクスポーズするかが決定されます。

ここでは、このリリースに付属するゼロ クライアントの例を示します (WL_HOME\samples\server\examples\src\examples\jcom/zeroclient を参照)。

ゼロ クライアントの場合、COM クライアントは次の 3 つのクラスにアクセスする必要があります。

java.util.Collection および java.util.Iterator へのアクセスの許可

  1. WebLogic Server Administration Console の左ペインで [サービス] ノードをクリックしてから、その下の [jCOM] ノードをクリックします。
  2. 右ペインで、次のように入力します。
  3. java.util.*

  4. [セキュリティ ポリシーを定義] をクリックします。
  5. [ポリシー条件] ボックスで、[呼び出し側をメンバーとするグループは] をダブルクリックします。
  6. [グループ名の入力] フィールドに、アクセスを許可するユーザ グループの名前を入力します。

注意 : ゼロ クライアントの例では、「everyone」にアクセスが許可されていますが、アクセスを許可する際には、できるだけ制約を設けることをお勧めします。

  1. [追加] をクリックします。
  2. [OK] をクリックします。
  3. ウィンドウの右下にある [適用] をクリックします。

ejb20.basic.beanManaged へのアクセスの許可

ゼロ クライアントの例では、ejb20.basic.beanManaged クラスへのアクセスも必要です。

この作業を行うには、手順 3 の「java.util.*」を「ejb20.basic.beanManaged.*」に置き換えて、「java.util.Collection および java.util.Iterator へのアクセスの許可」の手順を繰り返します。

最後にアスタリスクが付いているため、実際には ejb20.basic.beanManaged パッケージ全体にアクセスを許可しています。

クラスへのアクセス許可および取消しに関する詳細については、Administration Console オンライン ヘルプの「セキュリティ」を参照してください。

その他のコンソール プロパティのコンフィグレーション

その他の必要な jCOM コンソール プロパティをコンフィグレーションします。詳細については、jCOM プロパティに関する Administration Console オンライン ヘルプを参照してください。

これらのプロパティのいずれかを有効にするためにサーバを起動する必要がある場合は、ここで再起動します。

 


COM クライアントの準備

以下の節では、WebLogic Server オブジェクト上のメソッドを呼び出せるように COM クライアントを準備する方法について説明します。

必要なファイルのインストール

WebLogic Server オブジェクト上のメソッドを呼び出すために、クライアント マシンにインストールしておく必要のあるファイルが多数あります。以下に示すように、このうち一部のファイルは、ネイティブ モードでメソッドを呼び出す場合にのみ必要です。

jCOM ツール ファイル

jCOM ツールを実行するために必要な 5 つのファイルと 3 つのフォルダ (全サブフォルダおよびファイルを含む) があります。これらのファイルは、WebLogic Server がインストールされているマシンの WL_HOME\server\bin ディレクトリに格納されています。ファイルは次のとおりです。

jCOM ツールの詳細については、「jCOM ツールの詳細」を参照してください。

WebLogic Server クラス ファイル - ネイティブ モードのみ

ネイティブ モードで COM-to-WLS アプリケーションを実行するには、COM クライアント マシンが特定の WebLogic Server クラス ファイルにアクセスできる必要があります。これらのファイルを取得するには、各 COM クライアント マシンに WebLogic Server をインストールします。ただし、COM クライアントを実行するマシンごとに別個の WebLogic Server ライセンスが必要というわけではありません。

WebLogic Server サーブレットからのオブジェクト参照モニカの取得 - ゼロ クライアントのみ

オブジェクト参照モニカ (object reference moniker: ORM) は、WebLogic Server から取得できます。COM クライアント アプリケーションからモニカを使用できるので、regjvmcmd を実行する必要がなくなります。新規サーバを作成しても、サーバのホストとポートが同じである限りモニカは有効なままです。

COM クライアント コードに対して ORM を取得する方法が 2 つあります。

Java ラッパーおよび IDL ファイルの生成 - アーリー バインディングのみ

クライアント側に割り当てられたラッパー ファイルおよびインタフェース定義言語 (Interface Definition Language: IDL) ファイルの生成を実行します。

  1. IDL をクライアント マシンにコピーします。
  2. WebLogic Server 上で java2com ツールの実行 (「WebLogic Server の準備」を参照) に成功した場合、IDL ファイルがサーバ マシン上に作成されています。この IDL ファイルをクライアント マシンにコピーして、この COM アプリケーションの \TLB サブディレクトリに配置します。

注意 : java2com ツールがサンプルの \TLB サブディレクトリに出力しているはずなので、同じマシン上でクライアントとサーバを実行している場合、この手順は必要ありません。

  1. IDL ファイルをコンパイルして、型ライブラリを作成します。
  2. midl containerManagedTLB.idl

    このコマンドで Microsoft IDL コンパイラ MIDL.EXE を呼び出して、コンパイルを実行します。 コンパイルの結果、containerManagedTLB.tlb という型ライブラリが作成されます。

  3. 型ライブラリを登録し、サービスする JVM を設定します。
  4. 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 の登録」を参照してください。

ラッパー ファイルに関する注意

クライアント マシン レジストリへの WebLogic Server JVM の登録

サーバ名を Windows レジストリに追加し、その名前を TCP/IP アドレスおよび WebLogic が受信する COM リクエストをリスンするクライアント サーバ間の通信ポートに関連付けることで、ローカル Java Vertual Machine に登録します。デフォルトは、localhost:7001 です。

  1. regjvm GUI ツールを呼び出すと、次の画面が表示されます。

  2.  
  3. WebLogic Server がローカルホスト以外で実行しており、7001 以外のポートをリスンしている場合、ホスト名 (または IP アドレス) およびポート番号を入力します。
  4. regjvm のコマンドライン バージョンを使用することもできます。

    regjvmcmd servername localhost[7001]

JVM の登録解除

regjvm (または regjvmcmd) ツールでは、古いエントリと同名の新しいエントリが入力されても、古いエントリは上書きされません。このため、通信するマシンのホスト名またはポートを変更する必要がある場合は、古いエントリの登録を解除して新しいエントリを作成する必要があります。


 

regjvm ツール ウィンドウで JVM を登録解除するには、登録を解除する JVM を選択して、[Delete] を選択します。

別の方法として、コマンドライン ツール regjvmcmd から JVM の登録を解除します。

regjvmcmd /unregister servername

ネイティブ モードを選択している場合

COM クライアントをネイティブ モードで実行している場合、regjvm ウィンドウで [Native mode] または [Native mode in process] ラジオ ボタンをクリックするか、または /native パラメータを使用して regjvmcmd を呼び出します。この手順に関する詳細については、「ネイティブ モードでの COM-to-WLS アプリケーションの実行」を参照してください。

COM クライアント アプリケーションのコード化

これで、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 クライアントの起動

COM クライアント アプリケーションを起動します。

 


ネイティブ モードでの COM-to-WLS アプリケーションの実行

COM-to-WLS アプリケーションでは、ネイティブ モードに「イン プロセス」と「アウト オブ プロセス」の区別があります。

アプリケーションで使用するプロセスを指定するには、regjvm GUI ツール インタフェースで [Native mode in process] または [Native mode] ラジオ ボタンを選択します。

アウト オブ プロセスで JVM を実行するネイティブ モード

JVM をアウト オブ プロセスで実行する (ただし、ネイティブ コードを使用して COM クライアントに中の Java オブジェクトへのアクセスを許可する) 場合、次の手順に従います。

  1. regjvm GUI ツールを呼び出して、JVM をネイティブとして登録します。regjvm では、さまざまなレジストリ エントリが設定され、WebLogic jCOM の COM と WLS 間のメカニズムが容易になります。

注意 : JVM を登録する場合には、[JVM id] フィールドにサーバの名前を指定する必要があります。たとえば、exampleServer で JCOM ネイティブ モードが有効になっているときに、regjvm を使用して登録する場合には、[JVM id] ボックスに exampleServer と入力します。


 
  1. JVM が実行されていない場合は、[Advanced] ラジオ ボタンをクリックして、[Launch Command] フィールドに JVM のパスを入力します。

  2.  

    regjvm ツールの詳細については、「jCOM ツールの詳細」を参照してください。

  3. アプリケーション コードの main セクションに次のコードを挿入して、WebLogic jCOM ランタイムに JVM が呼び出しを受け取る準備ができていることを知らせます。
  4. 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 時間の休止

    }

  5. これで、Visual Basic からレイト バインディングを使用して、JVM にロードできる Java クラスのインスタンスをインスタンス化できます。
  6. Set acctEJB = CreateObject("firstjvm.jndi.ejb20.beanManaged.AccountHome")

  7. JVM を指定したら、標準 WebLogic jCOM regtlb コマンドを使用して Java オブジェクトにアーリー バインド アクセスします (regtlb はパラメータとして型ライブラリの名前と JVM 名を取り、その型ライブラリに定義されているすべての COM オブジェクトをその JVM に存在するものとして登録します)。
  8. また、独自のインスタンシエータ (com.bea.jcom.Jvm.register(...) への追加パラメータ) を JVM に関連付けることによって、COM クライアントの代わりに Java オブジェクトのインスタンス化を制御できます。これは、オブジェクト ファクトリの一種です。

イン プロセスで JVM を実行するネイティブ モード

このテクニックを使用すると、実際に 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 ツールの詳細」を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次