2010-09-23 31 views
7

He intentado configurar DatabaseConnectionPool para una aplicación web durante los últimos días sin éxito. He leído las secciones pertinentes de los documentos de Tomcat y una gran cantidad en torno al tema y creen que estoy haciendo todo bien, pero, obviamente, no porque siguen consiguiendo el error siguiente:No se puede crear PoolableConnectionFactory (Acceso denegado para el usuario '' @ 'localhost'

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

ahora no recibo el error cuando comienzo Tomcat correr, pero cuando Intento ejecutar el siguiente 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(); 
      } 
     } 
    } 
} 

contexto para la aplicación de web es:

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

Lo que realmente no entiendo es por qué el error no está diciendo que el acceso es denegado a 'root' @ 'localhost' cuando he especificado que ese es el usuario.

Lo que he intentado:

¿Tengo un context.xml duplicado? No. Eliminé el valor predeterminado en Tomcat 6.0/conf. Traté de poner un context.xml en [mywebappname] /META-INF/context.xml, pero no solo no funcionó, sino que resultó en la creación de un archivo llamado TwitterSearch.xml que se autogeneró y puso en el Tomcat 6.0/conf./Catalina/directorio localhost. Así que ahora solo estoy editando esa y esa es la única que tengo.

¿Es la versión de Tomcat? Bueno, reinstalé por completo la última versión de Tomcat 6.0, así que no creo que sea eso.

¿Nos faltan algunos frascos? Tengo el tomcat-dbcp.jar, jconnector.jar y todos los otros que creo que debo tener en el directorio de Tomcat 6.0/lib.

Cuando miro las contraseñas en la base de datos MySQL parecen haber sido codificadas por motivos de seguridad en una cadena alfanumérica larga. ¿Esto es normal? ¿Debo tener esto en mi context.xml o solo la contraseña normal?

Realmente no sé cómo puedo solucionar esto y realmente agradecería algunos consejos de expertos.

Muchas gracias de antemano.

Joe

Respuesta

9

Su configuración se ve bien. Esto parece ser un problema de permisos.

Debe otorgarle acceso a ese usuario en mysql. Mientras que Java se conectará a localhost, lo hará utilizando tcp/ip; sin embargo, en mysql localhost y 127.0.0.1 tienen un significado diferente. Emitir este SQL debería ser el truco.

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

que asume Java resuelve 'localhost' a 127.0.0.1, si las cosas siguen sin funcionar, podría intentar cambiar la cadena de conexión a "jdbc: mysql: //127.0.0.1: 3306/gorjeo"

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

Como lo tiene ahora, la contraseña de texto simple.

+1

Hola nos, Gracias por su respuesta. Jugué con la declaración GRANT ALL que me proporcionaste.Por alguna razón, lo único que funciona es cuando yo; – Joe

+0

OTORGAR TODO en twitter. * TO '' @ 'localhost' IDENTIFICADO POR 'mypwd'; – Joe

+0

He eliminado el usuario raíz para que el único usuario sea '' @ 'localhost' y funcione. Aunque estoy contento de que esté funcionando, todavía hay algo que no está bien porque he especificado en mis aplicaciones context.xml que el usuario es 'root', así que me pregunto por qué '' funcionará y, de hecho, el mensaje de error que estaba diciendo get bereree siempre negaba el acceso a '' @ 'localhost' y no a 'root' @ 'localhost'. ¿Tienes alguna idea de por qué este podría ser el caso? – Joe

1

En su context.xml de configuración para la aplicación de web que tiene que cambiar de usuario = "raíz" por nombre de usuario = "raíz"

Cuestiones relacionadas