Author Topic: Pool + Socket?  (Read 419 times)

Franklinpx

  • Newbie
  • *
  • Posts: 2
  • Karma: 0
    • View Profile
Pool + Socket?
« on: Marzo 24, 2020, 07:54:31 pm »
Chicos Buenos días/tardes o Noches.

Tengo una duda, recientemente he empezado un pequeño proyecto para practicar un poco, sucede que estoy implementando mis conexiones a mi BDD mediante un pool de conexiones con dbcp2 de apache commons con los datos en un archivo.Propeties.

entonces, si en el escenario de que este sistema se ejecute en 3, 5, 10 PCs diferentes por ejemplo, como podría hacer que todos trabajen mediante un mismo pool.

disculpen mi ignorancia, pero aunque tenga un pool en mi clase ConnectDB estas no se conectan entre diferentes ejecuciones en las diferentes Pcs, por lo que pensé en implementar un servicio o sistema en el servidor que con el uso de Socket reciba las peticiones y gestione las comunicaciones a la BD.

he utilizado Sockets para lo básico y entender su funcionamiento, la pregunta es:

¿ lo correcto es trabajar de esta manera que un Socket Servidor gestione las comunicaciones al servidorBD o como sería lo optimo/lo mas eficiente?, o quizás como cada Clase usa un pool es la forma mas eficiente debido a que no cierra su conexión con cada petición?

Gracias de ante mano.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5474
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Pool + Socket?
« Reply #1 on: Marzo 25, 2020, 04:30:09 pm »
Hola,

Depende mucho de cuántos clientes (PCs con tu aplicación) vayas a tener y el grado de "control" que quieras tener.

Si no son muchos PCs, no importa que cada uno tenga su propio pool en cuanto a eficiencia. Siempre que la base de datos admita simultáneamente las conexiones de todos los pool sumados.

Sin embargo, por otros temas, sí es conveniente tener un ejecutable separado (un servidor) que sea el que acceda a la base de datos y que los clientes (tu aplicación en los PCs) se conecten a este servidor para hacer las operaciones que necesiten en base de datos. Esto es muy habitual y los motivos son varios

- La credenciales de acceso a base de datos están en ese servidor y no van circulando por los PCs, salvo que a cada usuario le pidas user/password y se lo sepa. De todas formas, en estos casos, el usuario no suele meter el user/password de la base de datos directamente, sino un user/password propio de tu aplicación y que gestionarias en ese servidor separado.

- Por otro lado, si los usuarios tocan a través de su aplicación directamente la base de datos, según la funcionalidad que tengas tu aplicación, pueden "machacarse" entre ellos. Imagina que tu base de datos es una gestión de flota de camiones y que dos usuarios simultáneamente modifican los datos del mismo camión. El último que salve cambios, machaca los del que lo ha salvado el otro usuario antes. Así que otra funcionalidad que se le suele poner a ese servidor es que controle esas cosas. Si un usuario pide editar un camión, el servidor "bloquea" ese camión para otros usuarios y hasta que el primero no salve sus cambios, no se da permiso de edición a otro. Esto suele ser de todas formas un tema complejo.

Saludos.

Franklinpx

  • Newbie
  • *
  • Posts: 2
  • Karma: 0
    • View Profile
Re: Pool + Socket?
« Reply #2 on: Marzo 25, 2020, 11:09:41 pm »
Entiendo Perfectamente lo que me comentas y lo tenía previsto. Entonces, mi consulta se re formularía a:

Como implemento una aplicación <Servidor> que gestione las solicitudes provenientes de los <Clientes>, para esto es útil el uso Sockets?, tengo entendido que para Java EE se puede usar Glassfish, tomcat, etc. Pero para Java SE como gestionaría esto?.

Tomando como contexto que todos los Clientes están conectados mediante LAN/VPN con la aplicación servidor y asu vez con la BD

Disculpa la ignorancia pero no pillo el  ¿Cómo?.

Gracias y Saludos.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5474
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Pool + Socket?
« Reply #3 on: Marzo 27, 2020, 04:45:24 pm »
Hola.

En principio los clientes no necesitarían acceso a la base de datos directamente. La comunicación es cliente con servidor y servidor con BD, sentido contrario para respuestas. Entiendo que el cliente sería java SE y no navegador web/javascript.

La conexión entre cliente y servidor puede ser de muchas maneras. Depende también de la complejidad de tu aplicación.

Una opción bastante aceptada es el servidor es levantar web-services. Puedes usar cualquier framework que te lo facilite, hay muchos. spring-boot es de los más de moda últimamente, pero también te vale jboss/glassfish (más complejos desde mi punto de vista) o cogerte librerías (apache CXF por ejemplo) y levantarlos sin soporte de un framework completo.

Los web-services tiene la pega que son sólo petición-respuesta. El servidor no podría avisar de motu propio a los clientes de algo. No sé si es tu caso. Si es así, sería necsario un segundo mecanismo de comunicación.

Totalmente aparte, podrías hacerlo con sockets TCP/IP. En java también tienes RMI, aunque se usa poco. Y un sin fin de opciones más.

Saludos.



 

ey