Tomcat中Java Web应用DB2连接池poolName的正确取值
Tomcat部署Java应用:DB2连接池配置匹配问题
我正尝试在Tomcat部署的Java应用中配置DB2数据库连接池,当前web.xml、context.xml及Java代码这三部分配置存在不匹配问题,请问source.java中的poolName变量应设置为哪个正确值?
现有配置
web.xml
<resource-ref> <description>Connection pool to SFEAAPPDB database</description> <res-ref-name>jdbc/SFEAAPPDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
context.xml
<Resource name="jdbc/SFEAAPPDB" auth="Container" type="javax.sql.ConnectionPoolDataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://someplacesomewhere.es:50001/DESA" username="admin" password="admin" />
source.java
String poolName = "jdbc/SFEAAPPDB"; DataSource ds = new InitialContext().lookup(poolName);
正确配置及poolName值
1. 修正context.xml的类型不匹配问题
你的context.xml中Resource的type设置为javax.sql.ConnectionPoolDataSource,但web.xml中声明的res-type是javax.sql.DataSource,两者类型不匹配。Tomcat的org.apache.tomcat.jdbc.pool.DataSourceFactory返回的是标准javax.sql.DataSource实现,所以需要修改context.xml的type:
<Resource name="jdbc/SFEAAPPDB" auth="Container" type="javax.sql.DataSource" <!-- 修正此处 --> factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://someplacesomewhere.es:50001/DESA" username="admin" password="admin" />
2. 正确的poolName值
在Java代码中通过JNDI查找Web应用内的资源时,必须使用**java:comp/env/前缀**加上web.xml中声明的res-ref-name,所以poolName应设置为:
String poolName = "java:comp/env/jdbc/SFEAAPPDB"; DataSource ds = new InitialContext().lookup(poolName);
如果你的Resource配置在Tomcat全局context.xml而非Web应用的META-INF/context.xml中,还需要在web.xml的resource-ref中添加<res-link>标签关联全局资源,但通常Web应用内的资源直接使用上述前缀即可正常查找。
内容的提问来源于stack exchange,提问作者JLLMNCHR
相关产品推荐
相关产品推荐

