web-dev-qa-db-ja.com

Java:comp / envとは何ですか?

Java:comp/envの意味は?

ルックアップは次のようになります:

Context envContext = (Context)initContext.lookup("Java:comp/env");

行う ?

私は次のようなルックアップを理解しています:

(DataSource)envContext.lookup("jdbc/MyDatasource")

context.xmlまたはweb.xmlで名前MyDatasourceを検索して、データベースのURLを取得します。 そうですか?!!しかし、前者のルックアップは何をしますか?

72
saplingPro

Java:comp/envは、現在のJava EEコンポーネント(webapp、またはEJB))のプロパティを見つけることができるJNDIツリーのノードです。

Context envContext = (Context)initContext.lookup("Java:comp/env");

このノードを直接指す変数を定義できます。できる

SomeBean s = (SomeBean) envContext.lookup("ejb/someBean");
DataSource ds = (DataSource) envContext.lookup("jdbc/dataSource");

のではなく

SomeBean s = (SomeBean) initContext.lookup("Java:comp/env/ejb/someBean");
DataSource ds = (DataSource) initContext.lookup("Java:comp/env/jdbc/dataSource");

絶対パスではなく相対パス。それが使用されているものです。

64
JB Nizet

これは、グローバル変数を名前で保存できるメモリ内グローバルハッシュテーブルです。

「Java:」URLスキームにより、JNDIはjavaURLContextFactoryクラスを検索します。これは通常、アプリコンテナーによって提供されます。 これはTomcatの実装javadocです

NamingManager.getURLContext も参照してください

7
Rich