web-dev-qa-db-ja.com

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

Web.xmlファイルでresource-ref要素をいつ/なぜ定義するのか疑問に思っています。

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>
107
JMM

コンテナで設定された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でリソースを指定すると、開発者deployerロールからのロール。言い換えると、開発者として、必要なリソースが実際に本番で呼び出されるものを知る必要はなく、アプリケーションをデプロイする人として、実際のリソースにマップする名前の素敵なリストがあります。

148
candiru