1. ホーム
  2. java

[解決済み] web.xmlのresource-refは何のためにあるのですか?

2022-08-15 14:43:41

質問

私は、あなたがいつ、どのような理由で <resource-ref> 要素の中で web.xml というファイルを作成できますか?

私は、JNDI を使用して Web/app サーバーで定義し、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 を分離する利点があります。 デベロッパー の役割から デプロイメント の役割から切り離されます。言い換えれば、開発者として、必要なリソースが実運用環境で実際にどう呼ばれているかを知る必要はなく、アプリケーションをデプロイする人として、実際のリソースにマッピングするための素敵な名前のリストを持つことになります。