我一直在試圖設置一個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