3 COMクライアント・アプリケーションからWebLogic Serverへの呼出し
注意:
WebLogic Server 12.2.1.4.0でWebLogic jCOMは非推奨になりました。jCOMは、JavaとCOMの統合が必要な中間ソリューションのための移行手段として提供されています。Oracleでは、Microsoftアプリケーションとの推奨される通信方法としてWebサービスおよびRESTを想定しています。このタイプの通信を使用するには、レガシーCOMアプリケーションを.NETに移行することをお薦めします。
この章の内容は以下のとおりです。
ネイティブ・モードの特別な要件
COM-to-WLSアプリケーションをネイティブ・モードで実行するためには、WebLogic ServerをCOMクライアント・マシンにインストールする必要があります。
「ネイティブ・モードでのCOM-to-WLSアプリケーションの実行」を参照してください。
COMクライアントからWebLogic Serverを呼び出す主なステップ
この節では、COMクライアントからWebLogic Serverへの呼出しを行うための主なステップを簡単に説明します。詳細については、以降の節で説明します。
WebLogic Server側
-
アーリー・バインディングを使用している場合、
java2com
ツールを実行してJavaラッパー・クラスとインタフェース定義言語(IDL)ファイルを生成し、これらのファイルをコンパイルします。「JavaラッパーおよびIDLファイルの生成 - アーリー・バインディングのみ」を参照してください -
サーバー・リスニング・ポート上でCOM呼出しを有効化します。Oracle WebLogic Server管理コンソール・オンライン・ヘルプのjCOMの有効化に関する項を参照してください。
-
COMクライアントにサーバー・クラスへのアクセスを許可します。「アクセス制御の構成」を参照してください
-
他の関連するコンソール・プロパティを構成します。Oracle WebLogic Server管理コンソール・オンライン・ヘルプのサーバー: プロトコル: jCOMに関する項を参照してください。
COMクライアント側
WebLogic Serverの準備
以下の節では、COMクライアントがWebLogic Serverオブジェクト上のメソッドを呼び出せるように、WebLogic Serverを準備する方法について説明します。
アクセス制御の構成
COMクライアント・アプリケーションがアクセスする必要のあるクラスへのアクセス権をCOMクライアント・ユーザーに付与します。特定のアプリケーションによって、どのクラスを公開するかが決まります。
たとえば、COMクライアントが次の3つのクラスにアクセスする必要があるとします。
-
java.util.Collection
-
java.util.Iterator
-
ejb20.basic.beanManaged
ejb20.basic.beanManagedへのアクセスの許可
ejb20.basic.beanManaged
へのアクセスを許可するには、ステップ3のjava.util.*をejb20.basic.beanmanagedに置き換えて、「java.util.Collectionおよびjava.util.Iteratorへのアクセスの許可」,のステップを繰り返します。
COMクライアントの準備
以下の節では、WebLogic Serverオブジェクト上のメソッドを呼び出せるようにCOMクライアントを準備する方法について説明します。
必要なファイルのインストール
WebLogic Serverオブジェクト上のメソッドを呼び出すために、クライアント・マシンにインストールしておく必要のあるファイルが多数あります。以下に示すように、このうち一部のファイルは、ネイティブ・モードでメソッドを呼び出す場合にのみ必要です。
jCOMツール・ファイル
jCOMツールを実行するために必要な5つのファイルと3つのフォルダ(全サブフォルダおよびファイルを含む)があります。これらのファイルは、WebLogic ServerがインストールされているマシンのWL_HOME
\server\bin
ディレクトリに格納されています。ファイルは次のとおりです。
-
JintMk.dll
-
ntvinv.dll
-
regjvm.exe
-
regjvmcmd.exe
-
regtlb.exe
-
regjvm
(全サブフォルダおよびファイルを含む) -
regjvmcmd
(全サブフォルダおよびファイルを含む) -
regtlb
(全サブフォルダおよびファイルを含む)
「jCOMツールの詳細」を参照してください。
WebLogic Serverサーブレットからのオブジェクト参照モニカーの取得 - ゼロ・クライアントのみ
オブジェクト参照モニカー(ORM)は、WebLogic Serverから取得できます。COMクライアント・アプリケーションからモニカーを使用できるので、regjvmcmd
を実行する必要がなくなります。新規サーバーを作成しても、サーバーのホストとポートが同じであるかぎりモニカーは有効なままです。
COMクライアント・コードに対してORMを取得する方法が2つあります。
-
WebLogic Server上で実行しているサーブレットを通じて、それを取得します。WebLogic Server上でWebブラウザを開き、
http://[
wlshost
]:[
wlsport
]/bea_wls_internal/com
に移動します。ここで
wlshost
はWebLogic Serverマシンを示し、wlsport
はサーバーのポート番号を示します。 -
WebLogic Serverマシンの完全な名前またはTCP/IPアドレスと、ポート番号をパラメータとして指定して、
com.bea.jcom.GetJvmMoniker
Javaクラスを実行します。java com.bea.jcom.GetJvmMoniker [
wlshost
] [
wlsport
]
objrefモニカーを示し、その使用方法を説明する長いメッセージが表示されます。また、表示されるテキストは自動的にクリップボードにコピーされるので、ソースに直接貼付けできます。戻されたobjrefモニカーを使用すれば、指定したマシンおよびポート上のWebLogic Serverインスタンスにアクセスできます。
JavaラッパーおよびIDLファイルの生成 - アーリー・バインディングのみ
クライアント側に割り当てられたラッパー・ファイルおよびインタフェース定義言語(Interface Definition Language: IDL)ファイルの生成を実行します。
WebLogic Server JVMは、regjvm
ツールを通じてクライアント・マシンのレジストリに登録されます。「クライアント・マシン・レジストリへのWebLogic Server JVMの登録」を参照してください
ラッパー・ファイルに関する注意
-
一般にラッパー・ファイルはサーバー上に配置し、コンパイルしておく必要があります。IDLファイルはクライアント上に配置し、コンパイルしておく必要があります。サーバーとクライアントが別々のマシンに存在するときに、クライアント側でラッパーとIDLを作成した場合、コンパイルしたラッパー・ファイルをサーバーに配布する必要があります。サーバー側でラッパーとIDLを作成した場合、IDLファイルをコンパイルしてタイプ・ライブラリを作成することが可能なクライアントにIDLファイルを移動する必要があります。
-
ラッパー・ファイルとIDLファイルは、
java2com
ツールを1回実行することで作成する必要があります。サーバー上とクライアント上の両方でjava2com
ツールを別々に実行しようとすると、作成されたラッパー・ファイルとIDLファイルが通信できなくなります。IDLとラッパーは識別のために一意なスタンプを持ちます。ラッパーはjava2com
ツールの共通呼出しから作成されるIDLファイルとのみ通信できます。IDLファイルも、通信できるのは同じ条件で作成されたラッパーだけです。その結果、java2com
ツールを1回実行する必要があり、作成されるファイルは後で分散されます。Javaソース・コードに間違いがある場合や変更を加えるために、java2com
ツールを再度実行する必要がある場合は、すべてのラッパー・ファイル、IDLファイル、およびTLBファイルを削除し、ステップをすべてやり直す必要があります。 -
java2com
ツールを使用して非推奨のメソッドを含む(または参照する)クラスのラッパーを作成する場合、コンパイル時に非推奨の警告が表示されます。これらの警告は無視できます。WebLogic jCOMは、メソッドをCOMからアクセス可能にします。 -
生成されたラッパー・クラスは、CLASSPATHに含める必要があります。単にEJB jarに含めることはできません。
クライアント・マシン・レジストリへのWebLogic Server JVMの登録
サーバー名をWindowsレジストリに追加し、その名前をTCP/IPアドレスおよびWebLogicが受信するCOMリクエストをリスニングするクライアント・サーバー間の通信ポートに関連付けることで、ローカルJava仮想マシンに登録します。デフォルトは、localhost:7001です。
JVMの登録解除
regjvm
(またはregjvmcmd
)ツールでは、古いエントリと同名の新しいエントリが入力されても、古いエントリは上書きされません。したがって、通信するマシンのホスト名またはポートを変更する必要がある場合は、古いエントリの登録を解除して新しいエントリを作成します。
Regjvm
ツール・ウィンドウでJVMを登録解除するには、登録を解除するJVMを選択して、「削除」を選択します。
別の方法として、コマンド・ライン・ツールregjvmcmd
からJVMの登録を解除します。
regjvmcmd /unregister servername
ネイティブ・モードを選択している場合
COMクライアントをネイティブ・モードで実行している場合、「regjvm
」ウィンドウで「ネイティブ・モード」または「ネイティブ・モード(アウト・オブ・プロセス)」ラジオ・ボタンをクリックするか、または/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 through 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")
アーリー・バインド・アプリケーション
アーリー・バインド・コードの最も顕著な特徴は、As Object
で宣言される変数の数が少ないことです。以前生成したタイプ・ライブラリを使用することにより、ここでオブジェクトを宣言できます。
「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アプリケーションでは、ネイティブ・モードに「イン・プロセス」と「アウト・オブ・プロセス」の区別があります。
-
アウト・オブ・プロセス - JVMは独自のプロセス内で作成され、COMプロセスとWebLogic Server JVMプロセスの間でプロセス間通信が発生します。
-
イン・プロセス - WebLogic Server JVM全体がCOMプロセスに取り込まれます。つまり、COMクライアントのアドレス空間にロードされます。WebLogic Serverクライアント側クラスはこのJVM内に配置されています。
アプリケーションで使用するプロセスを指定するには、regjvm
GUIツール・インタフェースで「ネイティブ・モード(イン・プロセス)」または「ネイティブ・モード」ラジオ・ボタンを選択します。
アウト・オブ・プロセスでJVMを実行するネイティブ・モード
JVMをアウト・オブ・プロセスで実行する(ただし、ネイティブ・コードを使用してCOMクライアントに中のJavaオブジェクトへのアクセスを許可する)場合、次のステップに従います。
イン・プロセスでJVMを実行するネイティブ・モード
このテクニックを使用すると、実際にJVMをCOMクライアントのアドレス空間にロードできます。
再びregjvm
コマンドを使用します。ただし、今度は追加パラメータを指定します。
注意:
JVMを登録する場合には、「JVM id」フィールドにサーバーの名前を指定する必要があります。たとえば、exampleServer
でJCOMネイティブ・モードが有効になっているときに、regjvm
を使用して登録する場合には、「JV id」ボックスにexampleServer
と入力します。
Visual Basicクライアントから呼び出すクラスがディレクトリc:\pure
内にあり、使用しているJDKがc:\jdk1.7.0_15
内にあり、WebLogic Serverがc:\Oracle\Middleware
にインストールされていることを想定します。次のように、regjvmツール画面に値を入力します。
JVM名、CLASSPATH、およびJVM binディレクトリ・パスを指定します。
これで、Visual BasicからGetObjectメソッドを呼び出すことができるようになります。
MessageBox GetObject("MyJVM.jndi.ejb20.beanManaged.AccountHome")
regjvm
ツールの詳細は、「jCOMツールの詳細」を参照してください。