如何在 Web 应用程序中使用单个 JNDI 名称
我自己已经为此苦苦挣扎了几个月。最好的解决方案是使您的应用程序可移植,以便在 Tomcat 和 Weblogic 中拥有相同的 JNDI 名称。
为此,您将web.xml
and更改spring-beans.xml
为指向单个 jndi 名称,并提供到每个供应商特定 jndi 名称的映射。
我已将每个文件放在下面。
你需要:
- web.xml 中的
<resource-ref />
条目,供您的应用使用单个名称
WEB-INF/weblogic.xml
将 jndi 名称映射到 WebLogic 管理的资源的文件
META-INF/context.xml
将您的 jndi 名称映射到 Tomcat 管理的资源
的文件
- 这可以在 Tomcat 安装中或在您的应用程序中。
作为一般规则,更喜欢在您的应用程序中使用您的 jndi 名称,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>