2010-09-23 2 views
7

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

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

Контекст для веб-приложение является:

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

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

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

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

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

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

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

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

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

Joe

ответ

9

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

Необходимо предоставить этот пользовательский доступ в 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 решает «локальный» на 127.0.0.1, если все еще не работает, вы можете попробовать изменить строку подключения к «JDBC: MySQL: //127.0.0.1: 3306/твиттер»

Should I have this in my context.xml or just the normal password?

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

+1

Привет н.у.к., Спасибо за ваш ответ. Я играл с заявлением GRANT ALL, которое вы предоставили.По какой-то причине единственное, что работает, это когда я; – Joe

+0

GRANT ALL на твиттере. * TO '' @ 'localhost' IDENTIFIED BY 'mypwd'; – Joe

+0

Я удалил пользователя root так, чтобы единственным пользователем был «@» localhost », и он работает. Хотя я рад, что он работает, что-то все еще не так, потому что я указал в своих приложениях context.xml, что пользователь «root», поэтому мне интересно, почему »будет работать, и на самом деле сообщение об ошибке, которое я получение pree всегда отрицало доступ к «@» localhost », а не« root »@« localhost ». У вас есть идеи, почему это может быть так? – Joe

1

В вашей конфигурации context.xml для веб-приложение, вы должны изменить пользователь = «корень» по имени пользователя = «корень»

Смежные вопросы