2011-08-04 31 views
5

Estoy tratando de restaurar nuestro servidor tomcat, pero hay una aplicación que no se conecta a MySQL correctamente.La aplicación Java implementada en Tomcat no se conecta a jdbc-mysql

Esto es lo que está sucediendo:

que tenían una aplicación Java + Flex. Toda la aplicación se colocó en un directorio (no en un archivo .war).

$TOMCAT_WEBAPP/myflex_app/WEB-INF/lib/ -> JDBC mysql driver goes here. 

Aquí está mi configuración de la aplicación:

<database> 
      <rpgByMoodle user="moodle" password="moodle"> 
        <url>jdbc:mysql://localhost:3306/rpgbymoodle</url> 
      </rpgByMoodle> 
      <moodle user="moodle" password="moodle"> 
        <url>jdbc:mysql://localhost:3306/moodle</url> 
      </moodle> 
    </database> 

Por lo tanto, soy capaz de conectar MySQL a través del cliente de línea de comandos, pero la aplicación no lo hacen.

Encontré en Internet personas que decían "agregar nueva conexión" usando algunos menús Netbeans (o Eclipse) ... pero no he accedido al código fuente de la aplicación.

Estoy ejecutando tomcat en Linux. Revisé el archivo de registro de Tomcat al /var/log/tomcat6/ y no encontré nada sobre jdbc.

Mi registro catalina:

Aug 4, 2011 9:24:25 AM org.apache.catalina.core.StandardEngine start 
INFO: Starting Servlet Engine: Apache Tomcat/6.0.20 
Aug 4, 2011 9:24:26 AM org.apache.coyote.http11.Http11Protocol start 
INFO: Starting Coyote HTTP/1.1 on http-8080 
Aug 4, 2011 9:24:26 AM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 977 ms 
+0

¿Qué es stacktrace? Considere usar JNDI y DataSource en lugar de crear su propia administración de conexión. –

+0

@ Michael-O lo siento, no tengo acceso al código fuente.Todo lo que sé es que cuando ejecuto la aplicación, aparece un mensaje del usuario "Falló la conexión, póngase en contacto con el administrador". Si pudiera ayudarme a encontrar stacktrace o cualquier archivo de registro que ayude ... –

+0

Compruebe catalina.out y otros archivos en 'logs'. Si no hay nada, no tiene suerte :-(Esto parece ser un recuadro negro. –

Respuesta

4

Trate de poner el archivo jar de JDBC en tomcat-dir/common/lib y reiniciar Tomcat.
Comparar la pregunta Managing libraries in Tomcat.

Si esto sigue ahora funciona, publicar el extracto del archivo de registro de Tomcat, en busca de la conexión no JDBC como palabra clave.

+0

Andreas, copia los archivos lib al directorio 'tomcat-dir/lib' no funciona. Reviso los registros de tomcat y todo lo que obtuve fueron algunos errores de política, que soluciono el establecimiento de' permission java.security.AllPermission; 'para todos los archivos de políticas. Estoy completamente ciego. Los archivos de registro no muestran nada, ningún error. –

+0

OP está utilizando Tomcat 6. La carpeta que está sugiriendo es específica de Tomcat 5.5 o anterior. – BalusC

3

Tuve exactamente el mismo problema antes y logré resolverlo. Apache requiere un paso de configuración adicional para jdbc-msql. En primer lugar, asegúrese de tener los permisos de GRANT correctos configurados para su base de datos SQL.

A continuación, siga su solución que se toma de: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcat

En primer lugar, instale el archivo .jar que viene con Connector/J en $ CATALINA_HOME/common/lib de forma que está disponible para todas las aplicaciones instaladas en el envase.

A continuación, configure el origen de datos JNDI mediante la adición de un recurso de declaración a $ CATALINA_HOME/conf/server.xml en el contexto que define su aplicación web:

<Context ....> 

... 

<Resource name="jdbc/MySQLDB" 
      auth="Container" 
      type="javax.sql.DataSource"/> 

<!-- The name you used above, must match _exactly_ here! 

    The connection pool will be bound into JNDI with the name 
    "java:/comp/env/jdbc/MySQLDB" 
--> 

<ResourceParams name="jdbc/MySQLDB"> 
<parameter> 
    <name>factory</name> 
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> 
</parameter> 

<!-- Don't set this any higher than max_connections on your 
    MySQL server, usually this should be a 10 or a few 10's 
    of connections, not hundreds or thousands --> 

<parameter> 
    <name>maxActive</name> 
    <value>10</value> 
</parameter> 

<!-- You don't want to many idle connections hanging around 
    if you can avoid it, only enough to soak up a spike in 
    the load --> 

<parameter> 
    <name>maxIdle</name> 
    <value>5</value> 
</parameter> 

<!-- Don't use autoReconnect=true, it's going away eventually 
    and it's a crutch for older connection pools that couldn't 
    test connections. You need to decide whether your application 
    is supposed to deal with SQLExceptions (hint, it should), and 
    how much of a performance penalty you're willing to pay 
    to ensure 'freshness' of the connection --> 

<parameter> 
    <name>validationQuery</name> 
    <value>SELECT 1</value> <-- See discussion below for update to this option --> 
</parameter> 

<!-- The most conservative approach is to test connections 
    before they're given to your application. For most applications 
    this is okay, the query used above is very small and takes 
    no real server resources to process, other than the time used 
    to traverse the network. 

    If you have a high-load application you'll need to rely on 
    something else. --> 

<parameter> 
    <name>testOnBorrow</name> 
    <value>true</value> 
</parameter> 

<!-- Otherwise, or in addition to testOnBorrow, you can test 
    while connections are sitting idle --> 

    <parameter> 
    <name>testWhileIdle</name> 
    <value>true</value> 
    </parameter> 

<!-- You have to set this value, otherwise even though 
    you've asked connections to be tested while idle, 
    the idle evicter thread will never run --> 

<parameter> 
    <name>timeBetweenEvictionRunsMillis</name> 
    <value>10000</value> 
</parameter> 

<!-- Don't allow connections to hang out idle too long, 
    never longer than what wait_timeout is set to on the 
    server...A few minutes or even fraction of a minute 
    is sometimes okay here, it depends on your application 
    and how much spikey load it will see --> 

<parameter> 
    <name>minEvictableIdleTimeMillis</name> 
    <value>60000</value> 
</parameter> 

<!-- Username and password used when connecting to MySQL --> 

<parameter> 
<name>username</name> 
<value>someuser</value> 
</parameter> 

<parameter> 
<name>password</name> 
<value>somepass</value> 
</parameter> 

<!-- Class name for the Connector/J driver --> 

<parameter> 
    <name>driverClassName</name> 
    <value>com.mysql.jdbc.Driver</value> 
</parameter> 

<!-- The JDBC connection url for connecting to MySQL, notice 
    that if you want to pass any other MySQL-specific parameters 
    you should pass them here in the URL, setting them using the 
    parameter tags above will have no effect, you will also 
    need to use &amp; to separate parameter values as the 
    ampersand is a reserved character in XML --> 

<parameter> 
    <name>url</name> 
    <value>jdbc:mysql://localhost:3306/test</value> 
</parameter> 

0

En caso de que usted está ejecutando Tomcat con Eclipse Java EE,
1) Ir a la ficha Servidores
2) Haga doble clic en servidor Tomcat
3) en la sección de Información general, haga clic en configuración de lanzamiento abierto.
4) Vaya a la pestaña Classpath y agregue el archivo jdbc jar.
Espero que esto funcione ... Trabajó para mí.

Cuestiones relacionadas