web.xmlのresource-refは何に使用されますか?


112

なぜあなたは定義する際に/私は思ったんだけど<resource-ref>、あなたの要素をweb.xmlファイル?

私はそれがJNDIを使用してWeb /アプリケーションサーバーで定義され、JavaコードでJNDI参照を検索すると思いましたか?

resource-refの定義は私には少し冗長に思われ、それがいつ役立つかを考えることはできません。例:

<resource-ref>
  <description>Primary database</description>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
</resource-ref>

回答:


156

コンテナーで構成されたJNDI名でアプリケーション内のリソースをいつでも直接参照できますが、そうする場合、基本的にはコンテナー固有の名前をコードに関連付けます。これにはいくつかの欠点があります。たとえば、何らかの理由で後で名前を変更したい場合は、すべてのアプリケーションのすべての参照を更新してから、再構築して再デプロイする必要があります。

<resource-ref>紹介間接の別の層:あなたはあなたが使用する名前を指定web.xmlファイルを、そして、コンテナに応じて、中にバインディングを提供コンテナ固有の設定ファイルを。

だからここに何が起こるかです:java:comp/env/jdbc/primaryDB名前を検索したいとしましょう。コンテナはweb.xmlにの<resource-ref>要素があることを検出するjdbc/primaryDBため、次のような内容を含むコンテナ固有の構成を調べます。

<resource-ref>
  <res-ref-name>jdbc/primaryDB</res-ref-name>
  <jndi-name>jdbc/PrimaryDBInTheContainer</jndi-name>
</resource-ref>

最後に、の名前で登録されたオブジェクトを返しますjdbc/PrimaryDBInTheContainer

これは、web.xmlでリソースを指定すると、開発者の役割とデプロイヤーの役割を分離できるという利点があるという考え方です。言い換えると、開発者は、本番環境で実際に必要なリソースが何と呼ばれるかを知る必要はありません。アプリケーションをデプロイする人として、実際のリソースにマップするための名前の一覧があります。


6
私見、それは役割の分離を超えています。これは、サーバーでjndi名が使用可能であると想定できないため、デプロイヤが選択した「実際の」JNDI名にアプリケーションで使用される名前をマッピングする方法が必要であるという考え方です。
Pascal Thivent、

3
これはGoogleで見つけることができないため、初歩的なものでなければなりませんが、「java:comp / env / jdbc / primaryDB」を検索したい場合、res-ref-nameが「jdbc / primaryDB」になるのはなぜですか。
Torben 2012

4
私の知る限りでは、「jndi-name」要素は標準のweb.xmlの一部ではなく、特定のベンダーのデプロイメント記述子の一部です。
Ramon Chiara 2016年

2
@RaviParekh、彼は「コンテナ固有の構成」に言及しました、それはjboss-web.xmlまたはweblogic.xmlまたは他のベンダー固有のデプロイメント記述子ファイルかもしれません
abhihello123

1
これをtomcatに関連付けることはできますか?Tomcatのcontext.xmlで定義されたデータソースとweb.xmlのresource-refを意味します
Atul
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.