Java, .jar cliente servidor

Estimados amigos del foro una consulta...

Como puedo hacer una simple aplicación que desde una pc cliente consulte a la bdd, por ejemplo: usuario y contraseña, y se ejecute mi aplicación (trabaje en la bdd, etc)

Debo hacerlo con sockets??

Ahora mi aplicación ya la desarrollé, funciona perfectamente en el servidor (mi compu), pero un amigo me dijo que haga la aplicación en mi máquina, le pruebe y vea que funcine bien, después genero el ejecutable (.jar en este caso), comparto la carpeta donde está mi jar y voy a la otra máquina mapeo un disco con dirección donde está mi jar (en mi máquina) y que funcionará, pero sorpresa... no funcionó... por favor su ayuda ya que necesito presentar este proyecto y no me funciona como debería...

Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Nopalin

Lee los lineamientos de publicación

Antes de hacer preguntas, seria bueno que leyeras los lineamientos de publicación (y de paso busca en el internet un documento que se titula 'Como hacer preguntas inteligentes').

Ahora, dices que ya hiciste que tu aplicación e comunicara con una base de datos, ¿con cual?, como le hiciste? si se usan sockets pero solo para la conexión, cada base de datos trae su propio protocolo para la comunicación. Esto generalmente lo implementan el jdbc de cada base de datos y tu te evitas de hacer muchisisisisisimo trabajo.

Ahora, en que lo programaste en tu maquina, ¿netbeans?, ¿eclipse?, ¿jcreator?, ¿jEdit?, ¿block de notas?, estoy casi 100% seguro que no haz entendido muy bien como funciona java, pero publicando temas como éste, donde no pones codigo, ni mensajes de error ni nada, no nos das armas para poderte ayudar.

sobres

Imagen de ivlecamo

Gracias

Pues sí soy nuevo en todo esto de la programación y aún no entiendo...

Mira mi aplicación esta desarrollada en java y utilizo netbeans 6.9.1 conectando a Mysql (xampp).

Pues bien, hice mi aplicación, un modulo cliente en la cual aparece una pantalla login donde ingresa usuario y contraseña, esto lo hice en mi computador que está instalado el netbeans y xampp, para la conexión utilizo una clase conex el cual dejo el código:

package display;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class conex {
static String bd = "seap";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://localhost/"+bd;
public conex() {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection(url, login, password);
if (conn != null) {
System.out.println("Conexión a base de datos "+url+" ... Ok");
}
}catch(SQLException ex) {
System.out.println("Hubo un problema al intentar conectarse con la base de datos "+url);
}catch(ClassNotFoundException ex) {
System.out.println(ex);
}
}
public Connection getconexion(){
return conn;
}
public void desconectar(){
conn = null;
System.out.println("Conexión cerrada");
}

}

Pues bien, en mi computador que hace de servidor ejecuto mi aplicación y funciona perfectamente, es decir... consulta a la bdd, guarda registros, elimina, etc... pero obviamente mi aplicación no debe funcionar en el servidor, sino en la pc de cada usuario que va utilizar mi programa.

Un amigo me recomendó que genere el ejecutable de mi aplicación, en este caso el .jar y la carpeta que contiene este jar la comparta en la red, para que? para irme al pc de un usuario, me ingreso por ejecutar: \\server\dist y ejecutar mi aplicación.jar.

Aquí se da el problema, mi aplicación se abre, pero no interactua con la bdd no me permite actualizar, consultar, eliminar, datos de la bdd... este es mi problema. por esta razón pregunto si estoy haciendo correctamente este paso'?? o debo hacerlo mediante sockets???

Espero que ahora si esté más claro el panorama, por cierto cuando abro mi aplicación en las otras pcs y no me genera ningún error...

Imagen de ivlecamo

Video error

Hice un vídeo para expresarme mejor... vele en youtube http://www.youtube.com/watch?v=KnTFI401Pzg

Imagen de beto.bateria

Debes de cambiar esta

Debes de cambiar esta linea:

static String url = "jdbc:mysql://localhost/"+bd;

localhost indica que es la misma maquina, consige la direccion del servidor y se lo pones, es un ejemplo de como quedaria:

static String url = "jdbc:mysql://192.168.0.56/"+bd;

Saludos :)

Imagen de CesarAlducin

Buena solucion,

Buena solucion, @beto.bateria

yo hize algo parecido para una base de datos distribuida, nuestro error era que no le deciamos cual era la ip de las maquinas con las que estabamos trabajando.

y muy buen aporte eso del Video :D

Imagen de ivlecamo

Ya probé

Si me lo imaginé... así que si cambié por la IP por el nombre del servidor:

static String url = "jdbc:mysql://192.168.35.1/"+bd

static String url = "jdbc:mysql://mov01-casa/"+bd

Y ninguna de las dos formas sirve...

Talvez se fijaron en el video que subí a youtube??? ya que parece que mi explicación no es buena y no se me entiende...

Por fa necesito su ayuda.... gracias

Imagen de rodrigo salado anaya

@ivlecamo

Cuando pasas un APP de una máquina a otra debes de pasar las librerías que son necesarias, como tu connector, la puedes descargar de:
http://www.mysql.com/products/connector/

Suerte : )

También sería bueno que

También sería bueno que ejecutaras desde la línea de comandos lo siguiente:

java -jar elnombredetujar.jar

Para ver la excepción que te sale ( la excepción dice muchísimo )

No he visto el video ( estoy detrás de un firewall ), si ya estas haciendo esto entonces no me hagas caso. Empiezapor lo que dicen beto.bateria, cesaralducin y rodrigo.

Imagen de ivlecamo

Amigos vean el vídeo por favor...

Si están las librerias... por favor chequen el vídeo y me enteran...

Imagen de ivlecamo

El conector y las librerias si las tengo

Hola chicos, Rodrigo, cuando generé el .jar también me generó las librerías... Si puedes vele y el vídeo y por fa ayudame con tus comentarios!!!

Gracias a todos por su ayuda!!

En lo que veo el video puedes

En lo que veo el video puedes postear la salida de lo que te puse?

Imagen de ivlecamo

Oscar

Voy a ejecutar mi jar a través de ms-dos pero como lo ejecuto si está en otra maquina (server) le genero un accedo directo??? pero el origen está en el serve!!!

Como o ejecutas ahora?

Como o ejecutas ahora? haciendole doble click supongo.. bueeeeno creo que tendré que esperar a ver el video.

Si lo estas haciendo desde tu máquina lo que puedes hacer es

java -jar \\server\carpeta\jar.jar

En fin, espero en la noche a llegar a ver el vid.

Saludos!

Imagen de beto.bateria

Instala un administrador

Instala un administrador grafico de la base de datos en la compu en donde quieres ejecutar el jar, y conectalo a la base de datos del servidor, asi se podrian descartar cuestiones como configuracion del firewall o la configuracion del mysql.

Imagen de ivlecamo

Oscar

Oscar, ya ejecuté como me dijiste y en verdad me dió un error al parecer no está llamando bien a la base de datos, pero fijate como le llamé... para que veas que estoy ejecutando mi programa desde una compu (usuario) al server:

C:\Documents and Settings\virtual01>java -jar \\Mov01-casa\dist\modulocliente.jar

Hubo un problema al intentar conectarse con la base de datos jdbc:mysql://localhost/seap

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at modulocliente.frmcliente.agencia(frmcliente.java:282)
at modulocliente.frmcliente.escogerticket(frmcliente.java:231)
at modulocliente.frmcliente.jButton1ActionPerformed(frmcliente.java:216)

at modulocliente.frmcliente.access$000(frmcliente.java:80)
at modulocliente.frmcliente$1.actionPerformed(frmcliente.java:108)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Imagen de beto.bateria

jdbc:mysql://localhost/seap

jdbc:mysql://localhost/seap
Imagen de ivlecamo

Que administrador grafico me recomiendas?

Que administrador grafico me recomiendas?

Imagen de ivlecamo

Ya sé que estoy mal... jovenes necesito una ayuda...

Miren la cadena de conexión es esta:

static String bd = "seap";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://localhost/"+bd;

Y me dá el siguiente resultado:
Conexión a base de datos jdbc:mysql://localhost/seap ... Ok

Correcto...

Ahora le cambié el puerto de conexión de 80 al 8080:

Para abrir el xampp y ver mi bdd mysql en el navegador de internet pongo:
\\localhost:8080

Y me despliega mi panel de control para ver mi bdd.

El error de da cuando ingreso la dirección 192.168.35.1 así:

static String bd = "seap";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://192.168.35.1/"+bd;

El error es que se demora y no puede cargarse mi aplicación, igual sucede con si pongo el nombre del server: mov01-casa

No sé que pasa.

Imagen de ivlecamo

No me hagan caso...

Lo siento ya me dí cuenta de mi error, mezcle php, mysql, java, apache, etc y por eso me da el error... ya voy arreglar unas cosas y les confirmo...

Imagen de ivlecamo

Ya tengo la pregunta ideal:

Amigos cual es la diferencia entre estos dos códigos?

Forma1

static String bd = "seap";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://localhost/"+bd;

Resultado:

Conexión a base de datos jdbc:mysql://localhost/seap ... Ok

Forma2

static String bd = "seap";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://192.168.35.1/"+bd;

Resultado:

Hubo un problema al intentar conectarse con la base de datos jdbc:mysql://192.168.35.1/seap

Exception in thread "Timer-0" java.lang.NullPointerException
at display.display$2.run(display.java:60)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)

Ahora, si copio //192.168.35.1/seap y lo pego en el explorador me aparece un php que diseñé llamado seap, como puedo llamar a la bdd con la ip??

Este es mi problema, porque en la forma 1 funciona bien, interactua con la bdd en la forma 2 mi aplicación está llamando a un php...

Raro verdad??

Espero sus comentarios...

Imagen de ivlecamo

código de conexión

También dejo el código de conexión:

try {
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection(url, login, password);
if (conn != null) {
System.out.println("Conexión a base de datos "+url+" ... Ok");
}
}catch(SQLException ex) {
System.out.println("Hubo un problema al intentar conectarse con la base de datos "+url);
}catch(ClassNotFoundException ex) {
System.out.println(ex);
}

Imagen de beto.bateria

Me da la impresion que ya te

Me da la impresion que ya te perdiste, necesitas hacer esto:

Configurar Mysql para que acepte conexiones externas, para que te des una idea de lo que debes de buscar:
http://www.neuroticweb.com/blog/203/conexion-remota-a-mysql-en-ubuntu-de...

Debes de configurar tu firewall para que deje libre el puerto de mysql, generalmente es el 3306.

Debes verificar si te puedes conectar a la base de datos remotamente usando por ejemplo mysql-gui-tools-5.0-r17-win32

Debes de asignar los valores correctos a la configuracion de la conexion ejemplo:

                name="jdbc/mysql"
                auth="Container"
                type="javax.sql.DataSource"
                username="blackberry"
                password="blackberry"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://192.168.0.10:3306/models

en tus configuraciones no pusiste el puerto.

y pues los errores que salgan puedes pegarlos en san google, para que te des una idea de lo que pasa, despues si no lo resuelves pasa la pregunta aqui :).

Lee el stacktrace: Que dice

Lee el stacktrace:

Que dice la linea 60 de display.java?

Exception in thread "Timer-0" java.lang.NullPointerException
at display.display$2.run(display.java:60) <------------ Aquí!!!
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)

NullPointerException sucede cuando se quiere acceder a una referencia que es nula:

Ejemplo:

Object o = null;
o.toString();<-- NullPointerException

La razón por la cual tu referencia es nula tu la sabrás.

P.D. Postea tu código entre los tags: <code> y </code> para que el foro le dé formato.

Imagen de neko069

Alguien se ha dado cuenta de

Alguien se ha dado cuenta de que hace falta el puerto por el que se debe de conectar a la base de datos???