Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Conexión a servidor remoto MYSQL desde Aplicación JAVA de escritorio muy lenta

Hola, tengo hecha una aplicación de escritorio java con un servidor linux con Mysql, en la red local funciona bien, pero ahora me piden poder conectarse desde fuera de la red local, he puesto una ip fija, he abierto el puerto 3306 para el servidor y creado los usuarios necesarios, la conexión funciona pero el problema es que va muy lenta.
¿Hay alguna forma de agilizar la conexión? si se conectan desde dentro de la red local funciona bien.
Gracias.

octubre 4, 2012 | Registered Commenterfermin

yo nunca tendría una base de datos abierta en Internet. Me parece un agujero de seguridad como un túnel de autopista.

¿Exactamente por qué va lento? Si es por la propia red, que es lo que parece por lo que describes, no hay más solución que buscar una red más rápida o, si es posible, usar la red menos desde la aplicación.

Otro tema es que lo que quieras es mejorar la percepción de la velocidad, y no la velocidad realmente. Teniendo en cuenta que es una aplicación de escritorio y seguramente has usado swing ¿has hecho las consultas a la base de datos fuera del EDT no?

octubre 4, 2012 | Registered CommenterAbraham

Si, es swing con Netbeans, ¿deberia meter cada una de las llamadas a la bd dentro de un thread ?
Respecto a lo de poner la bd dentro de internet, ¿qué otra opción tengo para poder compartir los datos entre varias oficinas?

Gracias por tu ayuda.

octubre 4, 2012 | Registered Commenterfermin

Poner directamente una base de datos en Internet es un medio suicidio porque seguro que alguien encontrara algún agujero de seguridad. Lo típico en estos casos es meter un servidor web delante y exponer a través de servicios los datos de la base de datos. El servidor web es lo único público. Y un servidor web es bastante más fácil de hacer seguro que una base de datos.

Y sí, cualquier operación que vaya a llevar mucho tiempo, como las operaciones de entrada y salida, en una aplicación sin deben de ir en un thread distinto del EDT para evitar que se congele la interfaz de usuario. Pero ojo, esto no va a hacer que las cosas vayan más rápido. Simplemente va a hacer que la interfaz de usuario siga respondiendo, la experiencia del usuario será mejor y éste podría tener la impresión de que las cosas van más rápido. Pero no irán más rápido en absoluto.

Si necesitas más información de cómo hacer esto mirate:

http://www.javahispano.org/portada/2011/8/1/tutorial-de-multitarea-en-swing-por-jose-maria-vegas.html

octubre 4, 2012 | Registered CommenterAbraham

Guenas.

Tal y como te dicen mas arriba no vas a lograr incrementos de velocidad, pero igualmente te conviene tratar de aislar la BD del exterior.

Dado que veo que no tienes problemas en abrir el puerto que quieras, en lugar de usar un servidor web creo que te resultaria muchisimo mas practico usar RMI.
En tu servidor corres el objeto servidor RMI que accedera a la BD y en tu aplicacion swing puedes correr el cliente RMI. Es mucho mas simple y eficiente que correr un servicio web.

Un saludo

octubre 4, 2012 | Unregistered CommenterPaposo

Ok, muchas gracias, voy a investigar lo del RMI y la multitarea.

octubre 4, 2012 | Registered Commenterfermin

Como ya te ha explicado Abraham, un webservice frontal puede ser una alternativa. Otra sería llamadas directas a métodos remotos. Para eso se concibió JavaEE.

octubre 4, 2012 | Registered Commenterantoniovl

Y qué os parece el tema de mysql en la nube?
Estoy haciendo pruebas con xeround y parece que funciona, aunque solo lo he probado con pocos datos (para probar tiene el limite de 2mb por bd)

octubre 5, 2012 | Registered Commenterfermin

Creo que lo mejor seria manejarlo por un terminal server, de esta manera la aplicacion trabajaria sobre el servidor y la velocidad seria igual.

febrero 6, 2013 | Unregistered Commenterdale