【发布时间】:2010-09-22 14:56:00
【问题描述】:
配置 Tomcat 以设置连接池我真的做噩梦了。我已经阅读了大量的各种论坛和来自 Tomcat 的文件,但作为最后的手段,我不得不在这里提问。这是我第一次尝试从容器中获取连接,所以这对我来说是全新的。
我一直有 NameNotFoundException,它似乎只有在我将 context.xml 文件从 MyApp/META-INF/context.xml 放回 Tomcat 6.0/conf/context.xml 时才得到修复,所以由于某种原因它没有看到MyApp 的 META-INF 目录中的 context.xml 文件。有什么想法吗?
现在我得到一个 SQLNestedException: Cannot create PoolableConnectionFactory (''@'localhost' (using password:YES))
首先让我感到惊讶的是,用户是空白的,因为我在 context.xml 中指定了“root”。至于无法创建 PoolableConnectionFactory,我已经看到了几个具有工厂属性的示例 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>
我看到了一个 context.xml,它带有一个用于 META-INF/context.xml 的 WatchedResource 元素。我试过了,但它似乎没有什么不同,而且对我来说似乎很奇怪,所以我把它注释掉了。我真的应该包括它吗?
我的测试 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 文件中设置某种身份验证?
【问题讨论】:
标签: datasource tomcat6