|
|
WebOTX Manual V10.1 (第7版) 目次を表示 |
Java EE 環境下におけるネームサービスは、Enterprise Bean や Web コンポーネントに、JNDI ネーミング 環境へのアクセスを提供します。
Java EE コンポーネントは、ネーミング機能とディレクトリ機能を持つサーバへのアプリケーションインタ フェースである JNDI を使用して Java プログラミングします。任意の部品コンポーネントを JNDI で登録す ることで名前を指定してターゲットのクラスオブジェクトを取得することができ、アプリケーションのポータ ビリティの向上を図ることができます。
WebOTX では、JNDI のサービスを提供するサーバ(JNDI サーバ)として CosNaming サーバ(CORBA 用) と Serial Context Provider (RMI 用)を提供しています。WebOTX では、JNDI サーバ (CosNaming サーバ、Serial Context Provider)の二重化運用をサポートしており、システム全体の可用性を確 保することができます。WebOTX はJNDI 1.2 仕様に準拠しています。
あらゆるコンピューティングシステムの基本機能は、ネームサービスです。ネームサービスによって、名前とオブジェクトを関連付け、名前をもとにしてオブジェクトを検出する方法が提供されます。 従来のシステムでは、多くの場合、ネームサービスは単体では機能しません。 通常は、ファイルシステム、ディレクトリサービス、データベース、デスクトップ、メールシステム、カレンダなど、その他のサービスと統合されます。 たとえば、ファイルシステムには、ファイルとディレクトリ用のネームサービスが組み込まれています・
Java Naming and Directory Interface (JNDI) は、Java プラットフォーム用の標準拡張機能で、Java テクノロジ に対応したアプリケーションに、企業内の複数のネーミングおよびディレクトリサービスへの統一したインタフェ ースを提供します。 JNDI は、Java Enterprise API セットの一部として、異機種システムの混在したネーミン グおよびディレクトリサービスへのスムーズな接続を可能にします。開発者は、この業界標準機能を使用する ことで、強力かつ移植性の高いディレクトリ対応アプリケーションを構築することができます。
Java EE では、JNDI がさまざまな場面で用いられています。例えば、EJB のホームインタフェースの取得、Java EE アプリケーションで使用するリソースの取得、環境エントリ取得などで使用されます。
JNDI アーキテクチャは、JNDI API およびJNDI SPI から構成されます。 JNDI API とは、JNDI を使用するためのインタフェースを定義しているクラスライブラリです。 JNDI SPI とは、JNDI の実装を提供するクラスライブラリで、JNDI の提供ベンダから提供されます。 JNDI の利用者は環境プロパティによってどの SPI を使用するかを指定することにより、使用する JNDI の実装を選択して使用します。
WebOTX のJNDI サーバは、RMI-IIOP 通信を行うサーバプロセスで、名前空間の情報をメモリ中に保持します。JNDIクライアントは、
通信先の JNDI サーバのホスト名、ポート番号を接続先 URL に指定することによってJNDIサーバにアクセスすることができます。
WebOTX V8 までのJNDI サーバは、既定で Object Broker の CosNaming サーバをバックエンドの名前サーバとして使用していました。 WebOTX V9 以降で、 CosNaming サーバを介した JNDI サーバアクセスを行う場合は、JNDIサービスの設定で CosNaming サーバへの登録を有効にし、JNDIクライアントの接続先 URL に corbaname 形式を使用する必要があります。 設定の詳細については [ アプリケーション開発 > その他のアプリケーション > JNDIアプリケーションの開発 > 環境設定 > 環境プロパティの必須プロパティ の 2.corbaname形式 ] を、動作の概要について[CosNaming サーバを使用した場合の動作 ] を参照してください。
WebOTX のJNDI サーバは複数のサーバで同じ名前空間を管理することができます。これをレプリケーションと 呼びます。
JNDI サーバのレプリケーションを行うためには、クライアント側で接続先URL にレプリケーション対象 のJNDI サーバのホスト名、ポート番号をすべて列挙します。 設定の詳細については [ アプリケーション開発 > その他のアプリケーション > JNDIアプリケーションの開発 > 環境設定 > 環境プロパティの必須プロパティ の 1.rmiiiop形式 ] を参照してください。
レプリケーションを行った場合、各JNDI サーバで保持している情報が同じものでなければなりません。この同 期処理はJNDI クライアントが行います。つまりbind、unbind などの名前空間の情報を変更するようなメソッドを 実行する際は JNDI クライアントはその名前空間を管理しているJNDI サーバ全てに対してメソッド実行を行い ます。

このとき、それぞれのJNDI サーバに対するメソッド呼び出しは非同期に行われるため、メソッド実行が複数の JNDI サーバに対して行われることによる性能劣化は最小限に抑えられています。 lookup などの名前空間の情報を参照する処理は、どれかひとつのJNDI サーバに対してメソッド実行を行いま す。障害などによりそのJNDI サーバが停止している場合は、別のJNDI サーバに対してメソッド実行を行いま す。

これらの処理はWebOTX JNDI が提供するSPI クラスの中で行われます。つまり、JNDI クライアント側では通 常のJNDI メソッドを呼び出すだけです。
JNDI サーバは起動時に CosNaming サーバの特定のコンテキスト配下に自身のホスト名で自身の RMI-IIOP サーバオブジェクトを登録します。 JNDI サーバを使用するクライアントは CosNaming サーバの特定のコンテキ スト配下から JNDI サーバオブジェクトの参照を取得します。そして、JNDI サーバオブジェクトに対してバイン ド、アンバインドなどの名前空間にアクセスするメソッド要求を実行します。


JNDI サーバのレプリケーションを行うためには、各JNDI サーバが使用するCosNaming サーバを同一の設定 にします。このように設定して各JNDI サーバを起動すると、CosNaming サーバの特定のコンテキスト配下に複 数のJNDI サーバの参照が登録されます。これらのJNDI サーバは同じ名前空間を管理することになります。
ただしCosNaming サーバを1つしか指定していない場合、JNDI サーバ全てがそのCosNaming サーバに依存 することになってしまいます。よって通常はそれぞれのJNDI サーバで動作しているCosNaming サーバを全て 列挙して指定します。このように指定するとJNDI サーバは起動時に、列挙した全てのCosNaming サーバに自身の RMI-IIOP サーバオブジェクトを登録します。このため一つのCosNaming サーバが停止しても、別の CosNaming サーバからJNDI サーバのリファレンスを取得することができます。
クライアント側でも同様に接続先URL に複数のURL を列挙して指定することにより、動作中のCosNaming サ ーバからJNDI サーバのリファレンスを取得します。
レプリケーションを行った場合、各JNDI サーバで保持している情報が同じものでなければなりません。この同 期処理はJNDI クライアントが行います。つまりbind、unbind などの名前空間の情報を変更するようなメソッドを 実行する際は JNDI クライアントはその名前空間を管理しているJNDI サーバ全てに対してメソッド実行を行い ます。

このとき、それぞれのJNDI サーバに対するメソッド呼び出しは非同期に行われるため、メソッド実行が複数の JNDI サーバに対して行われることによる性能劣化は最小限に抑えられています。 lookup などの名前空間の情報を参照する処理は、どれかひとつのJNDI サーバに対してメソッド実行を行いま す。障害などによりそのJNDI サーバが停止している場合は、別のJNDI サーバに対してメソッド実行を行いま す。

これらの処理はWebOTX JNDI が提供するSPI クラスの中で行われます。つまり、JNDI クライアント側では通 常のJNDI メソッドを呼び出すだけです。
JNDI サーバは名前空間の情報をメモリ中に保持しているため、障害などによって再起動された場合、登録さ れていた名前が全て消えてしまいます。このため、再起動時にCosNaming サーバの特定のコンテキスト配下 に登録されている JNDI サーバから名前空間の情報を全て取得し、自身の名前空間の情報とマージします。 これによって他のJNDI サーバとの同期を行います。