【发布时间】:2017-05-21 21:09:51
【问题描述】:
使用 Java SE 8 在 Linux CentOS 7 上使用 Tomcat (8.5.9) 的新用户。我一定是犯了一个简单的错误。这应该是一个教科书的例子,如何为tomcat配置一个JDBC连接池。
我有这个错误:
javax.naming.NameNotFoundException: Name [jdbc/pool1] is not bound in this Context. Unable to find [jdbc]
知道我会做错什么吗? Tomcat states It is NOT recommended to place <Context> elements directly in the server.xml file. 因此,我的设置:
$CATALINA_HOME/webapps/myapp/META-INF/context.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/pool1"
auth="Container"
type="javax.sql.DataSource"
username="xx"
password="xx"
driverClassName="oracle.jdbc.OracleDriver"
url="xx"
maxTotal="256"
maxIdle="8"
initialSize="4"
removeAbandonedTimeout="7200"
removeAbandonedOnBorrow="true"/>
<Resource name="jdbc/pool2"
auth="Container"
type="javax.sql.DataSource"
username="xx"
password="xx"
driverClassName="oracle.jdbc.OracleDriver"
url="xx"
maxTotal="256"
maxIdle="8"
initialSize="4"
removeAbandonedTimeout="7200"
removeAbandonedOnBorrow="true"/>
<ResourceLink name="jdbc/pool1"
global="jdbc/pool1"
type="javax.sql.DataSource"/>
<ResourceLink name="jdbc/pool2"
global="jdbc/pool2"
type="javax.sql.DataSource"/>
</Context>
$CATALINA_HOME/webapps/myapp/WEB-INF/web.xml如下:
...
<resource-ref>
<description>xxx</description>
<res-ref-name>jdbc/pool1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>xxx</description>
<res-ref-name>jdbc/pool1</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
...
导致异常的代码:
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jdbc/pool1");
conn = ds.getConnection();
我根本没有修改 $CATALINA_HOME/conf/server.xml。我是否配置错误,或者我错过了在某处设置另一个文件?
更新 1
我尝试将上述 ResourceLinks 添加到 $CATALINA_HOME/conf/server.xml 文件中的 GlobalNamingResources 标记,然后停止/启动 Tomcat,但我得到了同样的错误。
更新 2
然后我将上面 context.xml 中的资源标签也添加到 server.xml 文件(GlobalNamingResources 标签)中,停止/启动 tomcat,并得到同样的错误。
更新 3
通过更改 java 调用池的方式,我得到了 Andreas 专家帮助(谢谢!)的一切工作:
Context initCtx = new InitialContext();
Context context = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) context.lookup("jdbc/pool1");
conn = ds.getConnection();
此外,ResourceLinks 不应该在 server.xml 中(它们只是在 tomcat 日志中生成警告)。
【问题讨论】:
-
什么代码抛出异常?
-
@EJP 当然,我在更新 1 上方添加了引发异常的代码。
标签: java tomcat servlets jdbc web.xml