Web en Java, cambiando se server...

Iniciado por alki, 30 Octubre 2009, 16:41 PM

0 Miembros y 1 Visitante están viendo este tema.

alki

Buenas.

Tengo una web hecha en parte en Java, y usa MySQL, la web no la he hecho yo.
Me han encargado cambiar de servidor. Tengo un acceso shell a una maquina con CentOS, he instalado el tomcat para los jsp y el jdk.

He trasladado la web y se ve todo, menos las zonas donde accede a la db. He visto que estan incluidas las librerias del driver de java para acceder a MySQL. He pensado que seria problema de la configuracion del acceso a la base de datos. Asi que me he puesto a modificar dicho fichero.

El contenido del fichero es el siguiente:

Código (java) [Seleccionar]

package bbdd;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class GestorBBDD {

public static Connection conectar() throws ClassNotFoundException, SQLException{

try {

Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql://localhost/db","user","pass");
System.out.println("Conexión realizada");
return c;

} catch (ClassNotFoundException e) {
e.printStackTrace();
throw e;
} catch (SQLException e) {

Connection c = DriverManager.getConnection("jdbc:mysql://localhost/db","user","pass");
return c;

}

}


public static void desconectar(Connection c) throws SQLException{

try {
c.close();
} catch (SQLException e) {
e.printStackTrace();
throw e;
}

}
}


Lo modifique a los nuevos datos de la base de datos en el nuevo servidor. Compile con javac, y puse el .class donde debe ir.
Pero seguia sin funcionar..

Asi que me dio por hacer un programita de prueba para depurar mas rapido y saber si esta en este fichero el error.

Código (java) [Seleccionar]

public static void main(String[] args) {
try{
conectar();
}catch (ClassNotFoundException e) {
System.out.println("Excepcion 1");
} catch (SQLException e) {
System.out.println("Excepcion 2");

}
}


Compilo, ejecuto usando "java GestorBBDD" y me dice lo siguiente:

Exception in thread "main" java.lang.NoClassDefFoundError: GestorBBDD (wrong name: bbdd/GestorBBDD)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: GestorBBDD.  Program will exit.


Alguna idea de porque no funciona? He de hacer algo con el tomcat para que reconozca los nuevos .class? He de compilar el resto de los .class en el nuevo servidor?
Alguna idea de porque no se ejecuta este simple programita?

Muchas gracias.

Un Saludo

-Ramc-

¿Cómo tienes el fichero completo? porque al parecer no encuentra el main.

Por otro lado en el main no te desconectas de la BD y para que pones try y catch si usas throws, y por qué en el catch de la SQLException te vuelves a conectar? bueno, esos son otros detalles, pero, básicamente el error, es que no encuentra el main, así que pongo el fichero completo para poder ayudarte mejor.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

alki

Buenas.
Primero que nada, gracias por tu respuesta  :)

Creo que el error del main se debe a lo mejor que esta como package bbdd y solo estoy intentando ejecutar ese ficherito. He quitado eso y me sale un error que a mi parecer es mas interesante:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at GestorBBDD.conectar(GestorBBDD.java:25)
        at GestorBBDD.main(GestorBBDD.java:57)
Excepcion 1


En el main, no desconecto, ya que solo quiero saber si logra logearse.. el main luego lo desechare si funciona la configuracion..
Yo solo he programado el main, el resto es de el tipo que creo la web.. y si cuando lo vi me llamo mucho la atencion la cantidad de burradas que se pueden llegar a hacer jejeje. Pero en teoria funciona ya que en el antiguo servidor funciona bien.

Bueno volviendo a lo de antes.. parece que no encuentra las librerias necesarias. Que tengo que hacer para decirle la ruta de las librerias.. Vengo de eclipse y no tengo ni zorra idea la verdad xDD

Un Saludo

alki

Por cierto el codigo completo es ese.. Metes el main en la clase de arriba y listo  ;D

-Ramc-

No encuentra el Driver, tienes dos opciones para indicarle a tu programa donde está el driver, quizá aún no lo haz agregado a las variables de entorno con las rutas, así que lo más fácil es que en el archivo /etc/profile agregues la ruta de donde tienes el driver.

Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

alki

Hola de nuevo  :)

Tengo todas estas librerias:

activation.jar         commons-collections.jar  commons-fileupload.jar  commons-logging.jar    jakarta-oro.jar  mysql-connector-java-3.1.6-bin.jar
commons-beanutils.jar  commons-digester.jar     commons-io-1.2.jar      commons-validator.jar  mail.jar         struts.jar

Y he añadido lo siguiente en /etc/profile:

export CLASSPATH=$CLASSPATH:/usr/java/tomcat5/lib/

Que es el directorio donde estan todas las librerias, pero no va.

Tambien he probado con:
export CLASSPATH=$CLASSPATH:/usr/java/tomcat5/lib/mysql-connector-java-3.1.6-bin.jar

Que es donde esta el driver que causa el primer error. Pero tampoco.

Que estoy haciendo mal?

Muchas gracias.

Un Saludo

-Ramc-

mm.. que raro, recuerda que debes abrir una nueva terminal, para que detecte las nuevas variables de entorno e intenta con:
   export CLASSPATH=$CLASSPATH:.:/usr/lib/jdk-version/jre/lib/ext/mysql-connector-java-5.1.7-bin.jar:.   

Por cierto, ¿Por qué un conector tan viejo?


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.

alki

Faltaba abrir de nuevo el terminal!!! :D

El conector es el que tenia en las librerias de la web en el servidor viejo.

Bueno hay mejoras.. Ahora tira.. y se ejecuta el programita..

La salida:

Excepcion 2
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:151)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1699)
        at com.mysql.jdbc.Connection.<init>(Connection.java:405)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at GestorBBDD.conectar(GestorBBDD.java:35)
        at GestorBBDD.main(GestorBBDD.java:57)


** END NESTED EXCEPTION **


        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1764)
        at com.mysql.jdbc.Connection.<init>(Connection.java:405)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at GestorBBDD.conectar(GestorBBDD.java:35)
        at GestorBBDD.main(GestorBBDD.java:57)


He probado a cambiar la url de conexion por las siguientes:
localhost:3306/db
ipserver/db
ipserver:3306/db
localhost/db


Los datos no hay mas.. son el usuario y contraseña que les he puesto. Alguna idea sobre como podria averiguar la url de la base de datos?


Muchas gracias

Un Saludo

alki

¿Alguna idea para la configuracion?

A lo mejor al estar todo en la misma maquina, no necesito una url...

Un Saludo

alki

Buenas.

He estado probando y puedo acceder desde la consola de mysql usando
mysql -h localhost -u usuario -ppassword

Despues de esto si hago ->use db; me encuentra la base de datos...

Dejo la traza del programa:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.ConnectException: Connection refused

STACKTRACE:

java.net.SocketException: java.net.ConnectException: Connection refused
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:151)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1699)
        at com.mysql.jdbc.Connection.<init>(Connection.java:405)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at GestorBBDD.conectar(GestorBBDD.java:35)
        at GestorBBDD.main(GestorBBDD.java:57)


** END NESTED EXCEPTION **


        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1764)
        at com.mysql.jdbc.Connection.<init>(Connection.java:405)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at GestorBBDD.conectar(GestorBBDD.java:35)
        at GestorBBDD.main(GestorBBDD.java:57)


Linea que efectua la conexion:

Código (java) [Seleccionar]
Connection c = DriverManager.getConnection("jdbc:mysql://localhost/db","user","pass");


No entiendo que puede fallar :S

Un Saludo