Web アプリで単一の JNDI 名を使用する方法
私はこれに数ヶ月苦労しました。最善の解決策は、Tomcat と Weblogic の両方で同じ JNDI 名を持つように、アプリケーションを移植可能にすることです。
これを行うには、単一の jndi 名を指すようにweb.xml
andを変更し、各ベンダー固有の jndi 名へのマッピングを提供します。spring-beans.xml
以下に各ファイルを配置しました。
必要なもの:
<resource-ref />
アプリが単一の名前を使用するための web.xmlのエントリ
WEB-INF/weblogic.xml
jndi 名を WebLogic が管理するリソースにマップするためのファイル
META-INF/context.xml
jndi 名を Tomcat によって管理されるリソースにマップするため
のファイル
- これは、Tomcat インストールまたはアプリ内のいずれかになります。
原則として、アプリ内の jndi 名は and のようjdbc/MyDataSource
にしjms/ConnFactory
、接頭辞を付けないようにしjava:comp/env/
ます。
また、データ ソースと接続ファクトリは、コンテナーによって管理され、JNDI と共に使用されるのが最適です。アプリケーションでデータベース接続プールをインスタンス化するのはよくある間違いです。
バネ
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
<jee:jndi-lookup jndi-name="jdbc/appds"
id="dataSource" />
</beans>
web.xml
<resource-ref>
<description>My data source</description>
<res-ref-name>jdbc/appds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
weblogic.xml
<?xml version="1.0" encoding="UTF-8" ?>
<weblogic-web-app
xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://xmlns.oracle.com/weblogic/weblogic-web-app http://http://www.oracle.com/technology/weblogic/weblogic-web-app/1.1/weblogic-web-app.xsd">
<resource-description>
<jndi-name>appds</jndi-name>
<res-ref-name>jdbc/appds</res-ref-name>
</resource-description>
</weblogic-web-app>
META-INF/context.xml (Tomcat 用)
<Context>
<ResourceLink global="jdbc/appds" name="jdbc/appds" type="javax.sql.DataSource"/>
</Context>