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