我真的在配置Tomcat来设置连接池。我已经完成了很多关于各种论坛和Tomcat文档的阅读,但我不得不在这里作为最后的手段。这是我第一次尝试从容器中获取连接,所以这对我来说都是新的。
我一直在使用NameNotFoundException,当我将context.xml文件从MyApp / META-INF / context.xml恢复到Tomcat 6.0 / conf / context.xml时,似乎只是修复了,所以出于某种原因它没有看到MyApp的META-INF目录中的context.xml文件。有什么想法吗?
现在我收到一个SQLNestedException:无法创建PoolableConnectionFactory(''''localhost'(使用密码:YES))
首先,我很惊讶用户是空白的,因为我在context.xml中指定了“root”。至于无法创建PoolableConnectionFactory,我看到了几个具有factory属性的示例context.xml文件。我需要这个吗?如果是的话,我应该指定哪个类?
我的context.xml是:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<!-- Configure a JDBC DataSource for the user database -->
<Resource name="jdbc/searchdb"
type="javax.sql.DataSource"
auth="Container"
user="root"
password="mypassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/search"
maxActive="8"
maxIdle="4"/>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!--<WatchedResource>META-INF/context.xml</WatchedResource>-->
</Context>
我已经看到了一个带有WatedResource元素的context.xml,用于META-INF / context.xml。我尝试了但它似乎没有什么区别,我觉得很奇怪,所以我已经评论过了。我真的要包括它吗?
我的测试servlet:
package search.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import search.model.*;
public class ConPoolTest extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
Context ctx = null;
DataSource ds = null;
Connection conn = null;
try {
ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/searchdb");
conn = ds.getConnection();
if(conn != null) {
System.out.println("have a connection from the pool");
}
} catch(SQLException e) {
e.printStackTrace();
} catch(NamingException e) {
e.printStackTrace();
} finally {
try {
if(conn!=null) {
conn.close();
}
} catch(SQLException e) {
e.printStackTrace();
}
}
}
}
我期待你的建议。
非常感谢
乔
PS我还会列出堆栈跟踪,但由于某种原因它会出现在控制台中,但不会出现在日志中。
更新
现在我再次查看错误消息,我想知道是什么让我无法访问。我以为它是数据库,但它实际上是容器吗?我是否需要在tomcatusers.xml文件中设置某种身份验证?
答案 0 :(得分:2)
Tomcat docs for JNDI Datasources包含如何在context.xml
对您的问题提出一些意见:
Tomcat应该在部署期间(解压缩应用程序时)将context.xml
从应用程序的WAR复制到conf/Catalina/localhost/app.xml
。该文件应该不转到conf/
。检查这些地方是否有旧的副本并清理干净。
使用错误用户的错误也表明存在多个context.xml
并且您看错了。
你不需要PoolableConnectionFactory
与Tomcat 6.这可能是从Tomcat 5的更新或其他东西遗留下来的东西,他们尝试了几件事,忘了清理配置文件。
Tomcat会自动监视web.xml
;没有必要再次WatchedResource
。