我一直在试图设置一个Web应用程序的DatabaseConnectionPool在过去的几天没有成功我已经阅读了Tomcat文档的相关部分和周围的主题了大量工作,认为我做的一切权利,但显然不是,因为我不断收到以下错误:无法创建PoolableConnectionFactory(访问拒绝用户'''本地主机'
Cannot create PoolableConnectionFactory (Access denied for user ''@'localhost' (using password: YES))
我没有得到的错误,当我启动Tomcat运行,但是当我尝试运行以下servlet:
package twittersearch.web;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
import twittersearch.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/twittersearchdb");
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();
}
}
}
}
上下文对于Web应用程序是:
<?xml version='1.0' encoding='utf-8'?>
<Context>
<!-- Configure a JDBC DataSource for the user database -->
<Resource name="jdbc/twittersearchdb"
type="javax.sql.DataSource"
auth="Container"
user="root"
password="mypwd"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/twitter"
maxActive="8"
maxIdle="4"/>
</Context>
我真不明白的是为什么错误不说,访问被拒绝“根” @“localhost”的时候,我指定这是用户。
我已经试过什么:
我是否有重复的context.xml?不,我删除了Tomcat 6.0/conf中的默认值。我尝试在[mywebappname] /META-INF/context.xml中放置一个context.xml,但不仅这样做不起作用,而且导致创建一个名为TwitterSearch.xml的文件,该文件被自动生成并放入Tomcat 6.0/conf/Catalina/localhost目录。所以现在我只是编辑那个,那是我唯一的一个。
它是Tomcat的版本吗?那么,我完全重新安装了最新版本的Tomcat 6.0,所以我不认为是这样。
我们是否缺少一些罐子?我有tomcat-dbcp.jar,jconnector.jar以及我认为应该在Tomcat 6.0/lib目录中拥有的其他所有其他目录。
当我查看MySQL数据库中的密码时,他们似乎已将安全目的编码为长字母数字字符串。这是正常的吗?我应该在我的context.xml中还是只有普通密码?
我真的不知道如何解决这个问题,真的很感谢一些专家的建议。
非常感谢提前。
Joe
您好,非常感谢您的回复。我玩了你提供的GRANT ALL语句。出于某种原因,唯一可行的是当我; – Joe 2010-09-24 09:07:24
GRANT ALL在Twitter上。*'''localhost'IDENTIFIED BY'mypwd'; – Joe 2010-09-24 09:07:58
我已经删除了root用户,所以唯一的用户是''@ localhost',它的工作原理。虽然我很高兴它的工作原理,但仍然有些不对,因为我在应用程序context.xml中指定用户是'root',所以我想知道为什么''会起作用,而事实上是我的错误信息得到先验总是拒绝访问''@'localhost'而不是'root'@'localhost'。你有什么想法,为什么这可能是这种情况? – Joe 2010-09-24 09:10:55