8.2. JBoss Naming Service アーキテクチャー


JBoss Naming Service (JBossNS) アーキテクチャーは、javax.naming.Context インターフェースのJava ソケット/RIM ベース実装となっています。JBossNS はリモートからアクセス可能なクライアント/サーバー実装で、この実装は最適化されており、ソケットを必要とせずに、JBossNS サーバーが稼働している同じVM からアクセスすることができます。グローバルシングルトンとして利用可能なオブジェクト参照を使うことで同じVM アクセスが発生します。図8.1「JBoss Naming Service アーキテクチャーで主要なコンポーネント」 では、JBossNS 実装およびその関係において重要となるキーの一部を図解しています。

図8.1 JBoss Naming Service アーキテクチャーで主要なコンポーネント

まず、NamingService MBeanから見ていきます。NamingService MBean は、JNDI ネーミングサービスを提供しており、J2EE テクノロジーコンポーネントで広範利用されている主要サービスです。NamingService の設定可能な属性を以下に示します。
  • Port: NamingServiceのポートをリッスンする jnp プロトコル。指定がない場合は、RMI レジストリのデフォルトポートと同じ 1099 がデフォルトになります。
  • RmiPort: RMI ネーミング実装がエクスポートされるRMI ポート。指定がない場合、デフォルトは0で、利用可能なポートはどれでも利用するという意味です。
  • BindAddress: NamingService がリッスンする特定のアドレス。ソケットアドレスの1つに関する接続リクエストしか受け付けない java.net.ServerSocket のマルチホームホスト上で利用可能です。
  • RmiBindAddress: NamingService の RIM サーバー部分がリッスンする特定のアドレスです。ソケットアドレスの1つに関する接続リクエストしか受け付けない java.net.ServerSocket のマルチホームホスト上で利用可能です。指定されていず、BindAddress が指定されている場合、RmiBindAddressBindAddress 値にデフォルト設定されます。
  • Backlog: 受信接続の表示 (接続要求) に対する最大長はbacklog パラメーターに設定します。キューがフルの状態で接続表示を受けると、その接続は拒否されます。
  • clientSocketFactory: オプションのカスタム java.rmi.server.RMIClientSocketFactory 実装クラス名。指定されていない場合、デフォルトのRMIClientSocketFactory が利用されます。
  • ServerSocketFactory: オプションのカスタム java.rmi.server.RMIServerSocketFactory 実装名。指定されていない場合、デフォルトのRMIServerSocketFactory が利用されます。
  • JNPServerSocketFactory: オプションのカスタム javax.net.ServerSocketFactory 実装クラス名。JBoss Naming Service Naming インターフェースのダウンロードをブートストラップするために利用する ServerSocketのファクトリ。指定されていない場合、javax.net.ServerSocketFactory.getDefault() メソッド値が利用されます。
java:compコンテキストへアクセスするスレッドのコンテキストクラスローダーに基づき、このコンテキストへのアクセスが隔離されるように、NamingServicejava:compを作成します。こうすることで J2EE 仕様で必要なアプリケーションコンポーネントのプライベートENC を提供します。このような隔離は、javax.naming.Referenceorg.jboss.naming.ENCFactoryを使用するコンテキストにjavax.naming.ObjectFactoryとしてバインドすることで行うことができます。クライアントがjava:compやサブコンテキストのルックアップを行う場合、ENCFactory はスレッドコンテキストClassLoaderをチェックし、ClassLoader をキーとして使いマップ内でルックアップを実行します。
クラスローダーインスタンスに対しコンテキストインスタンスが存在しない場合、ENCFactory マップ内にコンテキストインスタンスが作成されクラスローダーと紐付けられます。そのため、実行中のコンポーネントスレッドに紐付いた固有のClassLoader を受け取る各コンポーネントにより、正確にアプリケーションコンポーネントのENC を隔離されるか左右されます。
NamingService はその機能をorg.jnp.server.Main MBean に委譲します。MBean が重複する理由には、JBoss Naming Service が最初はスタンドアローンの JNDI 実装として開始され、そのまま実行することができるという点が挙げられます。NamingService MBean はMain インスタンスを JBoss サーバーに埋め込むため、JBossサーバーと同じ VM とJNDI を利用しても、ソケットのオーバーヘッドは発生しません。実際は、NamingService の設定可能な属性は、JBoss Naming Service Main MBean の設定可能な属性なのです。NamingService MBean 上の属性設定は、単に NamingService 内のMain MBean にある該当属性を設定するだけです。NamingService が起動すると、包含するMain MBean を開始し JNDI のネーミングサービスを有効にします。
さらに、NamingService は、JMX detyped 呼出し操作によりNaming インターフェースの操作を公開します。これにより、任意のプロトコルに対する JMX アダプタを経由でネーミングサービスにアクセスできるようになります。HTTP が呼出し操作を使ってネーミングサービスにアクセスする方法について、一例を本章で後述します。
Main MBeanが開始されると、以下のタスクを実行します。
  • org.jnp.naming.NamingService インスタンスをインスタンス化し、これをローカルのVM サーバーインスタンスとして設定します。これは、JBoss サーバーのVM内に作成されたorg.jnp.interfaces.NamingContext インスタンスのいずれかが使用しTCP/IP でのRMI 呼出しが回避されるようにします。
  • 設定されたRmiPortClientSocketFactoryServerSocketFactory 属性を使って、NamingServer インスタンスのorg.jnp.naming.interfaces.Naming RMI インターフェースをエクスポートします。
  • BindAddressPort 属性により与えられたインターフェースをリッスンするソケットを作成します。
  • ソケットで接続を受け取るスレッドを生成します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat