2012-01-31 27 views
1

<jee:jndi-lookup>を使用してJndiルックアップを実行しています。すべて正常に動作しますが、TomcatサイトのJndiリソースreferenceによると、Web.xmlには<resource-ref>が必要です。私はなぜこれが必要なのか理解できません。 web.xml定義なしでconfフォルダの下にcontext.xmlがあると、すべてうまく動作します。Tomcat 5.5とSpringを使用したWeb.xmlでの<resource-ref>の使用

私の質問は、Springからではなく、JndiをプレーンJavaコード(InitialContext().lookup("..."))で検索する場合にのみ、<resource-ref>が必要かどうかです。

私はWhat is resource-ref in web.xml used for?で、この上の議論を見ましたが、私は(WEB-INFの下の)アプリケーションのweb.xmlにそれを使用する場合

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

以下の構成が述べたように動作するようには思えません。 JBoss web.xml固有のものだと思います。私の理解を助けてください。

答えて

4

スプリングは、プレーンJavaコードです。それは黒い魔法ではありません。

resource-refを使用すると、コンテナ内のすべてのWebアプリケーションで共有されるグローバル名を使用するのではなく、Webアプリケーションにローカルな名前を使用できるため、適切な方法です。

同じアプリケーションの2つの異なるバージョンを同じコンテナにデプロイし、両方が同じグローバルJNDI名を使用するとします。彼らは今、間違っている、同じデータベースを使用するように強制されています。一方、web.xmlファイルで宣言されているローカル名を使用する場合は、各バージョンをそれぞれのグローバル名に関連付けることができます。したがって、両方のバージョンで2つの異なるデータベースを使用できます。

完全に異なる2つのアプリケーションをデプロイしても、同じグローバル名のjdbc/OracleDSが使用されます。

+0

どのようにローカル名がグローバル名に接続しますか?タグ「」は ''の子要素ではないようです(Eclipseはそう言います)。それを入れてもエラーは出ませんが、context.xmlファイルのグローバル名と一致しません。 ''の子要素は、res-auth、res-ref-name、res-sharing-scope、res-typeおよびdescriptionのように見えます。 –

+0

これはコンテナ固有です。 Tomcatでは、これはcontext.xmlファイルを使用して行われます。 http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html#JDBC_Data_Sourcesおよびhttp://tomcat.apache.org/tomcat-5.5-doc/config/context.html#Resourceを参照してください。 %20Links –

+0

Tomcatを使っているときにアプリのweb.xmlに ''が重複しているということですか? –

関連する問題