Не удается создать PoolableConnectionFactory (доступ запрещен для пользователя " @ 'localhost'

Я пытался настроить DatabaseConnectionPool для веб-приложения в течение последних нескольких дней без успеха. Я прочитал соответствующие разделы документов Tomcat и многое вокруг этой темы и думаю, что я делаю все правильно, но, очевидно, не потому, что я продолжаю получать следующую ошибку:

Cannot create PoolableConnectionFactory (Access denied for user ''@'localhost' (using password: YES))

Я не получаю ошибку при запуске Tomcat, но когда я пытаюсь запустить следующий сервлет:

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();
            }
        }
    }
}

контекст для webapp есть:

<?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>

то, что я действительно не понимаю, почему ошибка не говорит, что доступ запрещен "root" @ "localhost", когда я указал, что это пользователь.

что я пробовал:

у меня есть дубликат контексте.в XML? Нет. Я удалил значение по умолчанию в Tomcat 6.0 / conf. Я попробовал поставить контекст.xml в [mywebappname]/META-INF/context.xml, но это не только не сработало, но и привело к созданию файла с именем TwitterSearch.XML, который был автогенерируется и помещается в каталог Tomcat 6.0/conf/Catalina/localhost. Так что теперь я просто редактирую это, и это единственное, что у меня есть.

Это версия Tomcat? Ну, я полностью переустановил последнюю версию Tomcat 6.0, поэтому я не думаю, что это так.

мы пропустили несколько банок? У меня есть tomcat-dbcp.jar, jconnector.jar и все другие, которые я думаю, что я должен иметь в каталоге Tomcat 6.0/lib.

когда я смотрю на пароли в база данных MySQL, похоже, была закодирована в целях безопасности в длинную Альфа-числовую строку. Это нормально? Должен ли я иметь это в моем контексте.xml или просто обычный пароль?

Я действительно не знаю, как я могу разобраться в этом, и был бы очень признателен некоторые советы экспертов.

заранее большое спасибо.

Джо

2 ответов


настройки выглядит нормально. Это похоже на проблему с разрешениями.

вам нужно предоставить этому пользователю доступ в mysql. Хотя Java будет подключаться к localhost, он будет делать это с помощью tcp/ip - однако в mysql localhost и 127.0.0.1 имеют другое значение. Выдача этого SQL должна сделать трюк.

grant all on twitter.* to 'root'@'127.0.0.1' identified by 'mypwd';

это предполагает, что Java разрешает "localhost" до 127.0.0.1, если все еще не работает, вы можете попробовать изменить строку подключения на "jdbc: mysql: / / 127.0.0.1:3306 / twitter"

должен ли я иметь это в моем контексте.XML или просто обычный пароль?

как у вас есть сейчас, пароль открытого текста.


в контексте конфигурации.xml для webapp вы должны изменить user= "root"по username=" root"