Show Table of Contents

8.4. HTTP 経由の JNDI
ソケットブートストラッププロトコルを持つレガシーな RMI/JRMP に加え、JBoss は HTTP 経由の JNDI ネーミングサービスへのアクセスに対するサポートも提供しています。
8.4.1. HTTP 経由で JNDI にアクセス
この機能は、
http-invoker.sar
により提供されており、http-invoker.sar
の構造は以下の通りです。
http-invoker.sar
+- META-INF/jboss-service.xml
+- invoker.war
| +- WEB-INF/jboss-web.xml
| +- WEB-INF/classes/org/jboss/invocation/http/servlet/InvokerServlet.class
| +- WEB-INF/classes/org/jboss/invocation/http/servlet/NamingFactoryServlet.class
| +- WEB-INF/classes/org/jboss/invocation/http/servlet/ReadOnlyAccessFilter.class
| +- WEB-INF/classes/roles.properties
| +- WEB-INF/classes/users.properties
| +- WEB-INF/web.xml
| +- META-INF/MANIFEST.MF
+- META-INF/MANIFEST.MF
jboss-service.xml
記述子は、HttpInvoker
と HttpInvokerHA
MBean を定義します。これらのサービスは、HTTP経由でJMX バスにある適切な対象の MBean へ送信されるメソッド呼出しルーティングを処理します。
http-invoker.war
Web アプリケーションには、HTTP トランスポートの詳細を処理するサーブレットが含まれています。NamingFactoryServlet
は、JBoss JNDIネーミングサービス javax.naming.Context
実装に対する作成リクエストを処理します。InvokerServlet
は、RMI/HTTP クライアントによる呼出しを処理します。ReadOnlyAccessFilter
により、JNDIネーミングサービスのセキュリティを確保し、未認証のクライアントに読み取り専用のアクセスを提供する JNDI コンテキストを作成することができるようになります。

図8.2 JNDI コンテキストに対する HTTP invoker のプロキシ/サーバーの構成
設定について説明する前に、
http-invoker
サービスの操作について見てみましょう。図8.2「JNDI コンテキストに対する HTTP invoker のプロキシ/サーバーの構成」 で、JBoss JNDIプロキシの構造とJBoss サーバー側のhttp-invoker
コンポーネントとの関係に関する論理的な見解を示しています。このプロキシは、Context.INITIAL_CONTEXT_FACTORY
プロパティがorg.jboss.naming.HttpNamingContextFactory
に設定され、Context.PROVIDER_URL
プロパティがNamingFactoryServlet
のHTTP URL に設定されているInitialContext
を使い、NamingFactoryServlet
から取得します。結果として出たプロキシは Context
実装を提供するorg.jnp.interfaces.NamingContext
インスタンスに組み込まれます。
プロキシは
org.jboss.invocation.http.interfaces.HttpInvokerProxy
のインスタンスで、org.jnp.interfaces.Naming
インターフェースを実装します。内部的にHttpInvokerProxy
は、HTTP ポスト経由で Naming
インターフェースメソッド呼出しをInvokerServlet
にマーシャルする invoker を含みます。InvokerServlet
は、これらのポストを JMX 呼出しをNamingService
に変換し、HTTP ポストのレスポンスにて呼出しの応答をプロキシに返します。
設定値によっては、これらのコンポーネントをすべて連携させるよう設定する必要があります。図8.3「設定ファイルと JNDI/HTTP コンポーネント間の関係」で、設定ファイルと該当のコンポーネントの関係を示しています。

図8.3 設定ファイルと JNDI/HTTP コンポーネント間の関係
http-invoker.sar/META-INF/jboss-service.xml
記述子は、NamingService
のHttpInvokerProxy
を作成するHttpProxyFactory
を定義します。HttpProxyFactory
に対する設定が必要な属性には以下が含まれます:
- InvokerName:
conf/jboss-service.xml
記述子にて定義されるNamingService
のJMXObjectName
。JBoss ディストリビューションで使用される標準設定はjboss:service=Naming
。 - InvokerURL あるいは InvokerURLPrefix + InvokerURLSuffix + UseHostName:完全な HTTP URL を
InvokerURL
属性を使い、InvokerServlet
に指定することができます。あるいは、URLのホスト名に依存しない部分を特定し、HttpProxyFactory
を入力できます。InvokerURL
値の例として、http://jbosshost1.dot.com:8080/invoker/JMXInvokerServlet
などが挙げられます。これは以下に分割できます。- InvokerURLPrefix: ホスト名の前につく URL のプレフィックス。通常、
http://
あるいはhttps://
(SSL が使われている場合) となっています。 - InvokerURLSuffix: ホスト名の後につくURL のサフィックス。これには Web サーバーのポート番号、
InvokerServlet
にデプロイされるパスが含まれます。例えば、InvokerURLSuffix
のInvokerURL
の値は、引用符なしの:8080/invoker/JMXInvokerServlet
となります。ポート番号は Web コンテナサービス設定により決まります。InvokerServlet
へのパスは、http-invoker.sar/invoker.war/WEB-INF/web.xml
の記述子にて指定されます。 - UseHostName: 完全
InvokerURL
のホスト名部分を構築する際、ホスト名をホスト IP アドレスの位置に使用するか示すフラグ。True の場合、InetAddress.getLocalHost().getHostName
メソッドが使われます。True でなければ、InetAddress.getLocalHost().getHostAddress()
メソッドが利用されます。
- ExportedInterface: プロキシがクライアントに対し公開する
org.jnp.interfaces.Naming
インターフェース。このプロキシの実際のクライアントは、JBoss JNDI実装のNamingContext
クラスで、JBoss JNDIプロバイダーを使う場合、JNDI クライアントはInitialContext
ルックアップから取得します。 - JndiName: プロキシがバインドされる場合の JNDI の名前。このインターフェースが JNDI にバインドされないように、この項目はブランク/空の文字列に設定する必要があります。JNDI を使ってそれ自体をブートストラップすることはできません。これは、
NamingFactoryServlet
の役割になります。
http-invoker.sar/invoker.war/WEB-INF/web.xml
記述子は、初期化パラメーターと共にNamingFactoryServlet
と InvokerServlet
のマッピングを定義します。JNDI/HTTP に関連するNamingFactoryServlet
の設定は JNDIFactory
のエントリで以下を定義します。
HttpProxyFactory
MBean 名をマッピングするnamingProxyMBean
の初期化パラメーター。HTTP ポストへの応答時に返すNaming
プロキシを取得するために、NamingFactoryServlet
がこのパラメーターを利用します。デフォルトのhttp-invoker.sar/META-INF/jboss-service.xml
設定は、名前がjboss:service=invoker,type=http,target=Naming
となります。- Naming プロキシ値をクエリするための
namingProxyMBean
属性名を定義するプロキシ初期化パラメーター。属性名がProxy
にデフォルト設定されています。 JNDIFactory
設定のサーブレットマッピング。セキュリティー保護されていないマッピングのデフォルト設定は/JNDIFactory/*
となっています。これは、http-invoker.sar/invoker.war
のコンテキスト root を起点とした相対パスでデフォルトでは、.war
のサフィックスを取ったWAR名となっています。
JNDI/HTTPに関連する
InvokerServlet
設定は JMXInvokerServlet
で以下を定義します。
InvokerServlet
のサーブレットマッピング。セキュリティ保護されていないマッピングのデフォルト設定は/JMXInvokerServlet/*
で、これは、http-invoker.sar/invoker.war
のコンテキスト root を起点とした相対パスでデフォルトでは、.war
のサフィックスを取ったWAR名となっています。