Foros del Web » Programación para mayores de 30 ;) » Java »

Para expertos, Conexion BD.

Estas en el tema de Para expertos, Conexion BD. en el foro de Java en Foros del Web. Cuando desarrollamos web en Java, "es mejor o mas optimo, o lo mas usual", alojar un servlet en el servidor en el cual se crea ...
  #1 (permalink)  
Antiguo 04/12/2008, 14:32
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
Pregunta Para expertos, Conexion BD.

Cuando desarrollamos web en Java, "es mejor o mas optimo, o lo mas usual", alojar un servlet en el servidor en el cual se crea por medio de una clase un cursor de conexión y que se utiliza este cursor cada vez que necesitamos información de la BD.

Ó

Es mejor estar haciendo llamadas cada vez que se necesitan desde JSP(Quiero decir estableciendo la conexión, creando instancias, y al finalizar el proceso cerrar nuevamente - y así sucesivamente en cada modulo de la aplicación).

Para mi, lo mejor es la primera, pero desconozco los inconvenientes o problemas que pueda tener (Seguridad, dificultas de uso, inestabilidad, etc).
  #2 (permalink)  
Antiguo 04/12/2008, 16:54
 
Fecha de Ingreso: diciembre-2008
Mensajes: 71
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Para expertos, Conexion BD.

Hola spawn3000.

yo voy por la segunda opcion ya que para mi es ma segura ya que solamente estas pidiendo la informacion necesaria para el momento indicado, asi proteges mas la informacion de tu base de datos y la integridad de esta.

quiero pensar...
  #3 (permalink)  
Antiguo 04/12/2008, 22:14
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años, 7 meses
Puntos: 15
Respuesta: Para expertos, Conexion BD.

Mira spawn3000 si estas haciendo una aplicación web lo mejor es que cuando inicies tu aplicación te crees un pool de conexiones unas 10 como minimo, y ya a medida que ingresan tus usuarios vayan usando esas conexiones, es ideal por estas consideraciones.

Primero si tienes una sola conexion para tu aplicación, cuando ingresen varios usuarios en simultaneo van a tener que esperar que se desocupe esa conexión cada vez que quieran hacer algo, y si tu transacción es grande, ya te imaginaras cuanto renegaran tus usuarios viendo en la barra de estado el famoso mensaje "Conectando". Si usas un pool pues cada vez que un usuario entre al sistema va a agarrar una conexión del pool que este disponible, asi no tendra que esperar que se desocupe la unica conexión.

Segundo estar conectandote a cada rato no es muy optimo, ten en cuenta el trabajo enorme que realiza java al crear una conexión.

Al crear tu pool debes tener en cuenta que si entran mas usuarios, se creen otras conexiones solo cuando las minimas esten siendo usadas y luego se cierren cuando no sean usadas pero siempre debe quedar el minimo.

Tambien recuerda que cada vez que realizes una transacciones cierres todos los cursores que has usado, recuerda que las bases de datos soportan un limite de cursores abiertos y si sobrepasas esos, pues te tumbas la base de datos, al igual que cuando superas las conexiones abiertas.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #4 (permalink)  
Antiguo 05/12/2008, 00:03
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Para expertos, Conexion BD.

Hola:

Servidores web como Tomcat soportan el llevar ellos el pool de conexiones único y las aplicaciones (servlet o jsp) pueden pedirselo cuando lo necesitan. Supongo que esto es en realidad lo más óptimo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 05/12/2008, 02:07
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Para expertos, Conexion BD.

10 conexiones a la BDD son muchas conexiones, a no ser que las transacciones que hagas sean muy largas. Como dice Chuidiang, lo más sencillo hoy en día es configurar un DataSource en el contenedor web y dejar que el se ocupe de gestionarl el pool de conexiones.

De la misma forma, ejecutar acciones contra la BDD en las distintas JSP es algo que no se suele recomendar, por que no escala muy bien en cuanto a mantenimiento. Es decir, si tienes muchas hojas JSP, cuando hay que hacer cambios en las operaciones de la BDD tienes que ir cambiando cosas en muchas JSP y si te olvidas... pum. Por eso se tiende a centralizar las acciones de lógica de negocio en menos clases.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #6 (permalink)  
Antiguo 05/12/2008, 19:54
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
Respuesta: Para expertos, Conexion BD.

Estoy igual que un chango rascando su cabeza, algunas cosas se aclaran y otras se oscurecen... Ya tenia una mera idea de que la cosa iba con el tal Pool de conexiones.

Pregunto: no hay forma de que cada vez que un usuario ingrese, el servlet automáticamente cree una conexión y la cierre al usuario terminar sesión?

Creo que ha eso se refieren con el ReKordZet. Esto...

Creo que mejor me tomo un cafe, por que como que esto va pa' largo... debi haberme quedado con el PHP, o el Visual.NET, Esos si que son facilitos... Pero Java es un...Mierd.

O el java, pero nada que ver con Internet. Realmente el concepto cambia en gran parte de J2SE a JEE.

Pero, de todas formas gracias... analizare cada Rta. y luego veo... Pero me suena lo del POOL de conexiones(de esto algo conozco), y lo del Recordset(en Java? como?)... me imagino que crear un Bean
  #7 (permalink)  
Antiguo 07/12/2008, 12:02
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años, 7 meses
Puntos: 15
Respuesta: Para expertos, Conexion BD.

Mira GreenEyed te cuento algunas cosas:

Mi tarea es dar mantenimiento a un Sistema que no corre en un Servidor de Aplicaciones determinado, con decirte que en nuestras PC hacemos el desarrollo en el JDeveloper con BC4J como servidor, en nuestro ambiente de testing por cuestiones de Licencia usamos como Servidor de aplicaciones JBoss, ahora en el cliente su servidor de aplicaciones de su ambiente de producción usan el OAS, por lo que los ingenieros que diseñaron la aplicación optaron por que la misma aplicación controle el pool de conexiones.

Con respecto a que 10 pool de conexiones es mucho, te cuento que algunas de nuestras transacciones son muy largas por ejemplo la aprobación de un expediente consta de hacer inserts y updates a por lo menos 8 tablas y la actualización de documentos en word que son guardados en base de datos, por lo que esa transacción es muy pesada(notese que un expediente puede tener una buena cantidad de documentos que tambien deben ser aprobadas). Ahora en tema de concurrencia el sistema cuenta con 8 módulos, de las cuales en un solo modulo se encuentra cerca de 15 usuarios que son encargados la revisión de expedientes, y cerca de 90 usuarios que son los encargados de realizar la importación de expedientes desde otro sistema a este. Como te imaginaras existe mucha concurrencia.

Ahora en el ambiente de producción del cliente existen cerca de 30 sistemas mas, que tienes igual o mas concurrencia y transacciones mas pesadas de las del sistema que yo doy mantenimiento. Y no siempre vas a poder usar los frameworks k kieras para algun sistema, en nuestro cliente por ejemplo no nos permiten usar ningun framework open source, que por que, eso habria que preguntarles a ellos.


Esto que te explico es con lo que yo tengo que lidiar dia a dia, no quiero decir que esto sea lo verdadero, pero en mi caso, asi funcionan las cosas.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #8 (permalink)  
Antiguo 07/12/2008, 14:17
 
Fecha de Ingreso: enero-2008
Mensajes: 197
Antigüedad: 16 años, 10 meses
Puntos: 10
Respuesta: Para expertos, Conexion BD.

Hola spawn3000,

Creo que las respuestas estan enfocadas a una pequena parte de la aplicacion que es el datasource, desde mi punto de vista creo que lo necesario aqui es definir tu arquitectura, y por lo que veo no hay ninguna o por lo menos asi parece.

Haciendo alucion a que "Java es una mi.... " y que mejor te hubieras quedado con asp o php deja decirte que se me retorcio el cuello jejeje :P y esto va en medida de la escala, magnitud e importancia de tu proyecto si vas a hacer sitios "pequenos" php o asp te queda perfecto ya que como dices son facilitos, pero carecen de una robustez como los frameworks de Java basta decir que muchos Bancos tienen sus app por internet en Java y no en php.

Lo que te recomiendo es usar un modelo de n-capas, que es dividir en modulos tu applicacion hay un patron por ahi que se llama mvc (model view controller) en el cual separas tu applicacion en Modelo (tu Business) View (La parte de FrontEnd tu vista de cara al usuario) y Controller (Una especie de Administrador) y si a esto le agregas una capa de Datos (DAOs) (Data Access Objects) tu applicacion te queda mejor, mas robusta y sostenible. Todo el tedio que tu me imagino con el que estas lidiando esta resuelto por Frameworks de Java (Concurrencia, Transacciones, Soporte DAOs, Vista<->Modelo, manejo de peticiones etc!)

Actualmente frameworks para web de Java te resuelven todo eso y te dan soporte para que no re escribas o implementes tu cosas sino que ya te dan las herramientas para que te enfoques en la logica de negocio "business" que es lo que debes estar haciendo tu.

Algunos no estaran de acuerdo conmigo pero te puedo recomendar que para tu front-end le eches un ojo a

Struts 2 o Stripes : Son frameworks nuevos muy potentes y cuentan con integracion con otras mas tecnologias como Spring, Tiles (Plantillas) etc.

Backend: Spring que cuenta con soporte para la capa de datos y esto es lo que te quiero comentar tu no te deberias preocupar por eso de las conexiones que es mas eficiente en realidad eso es otra cosa eso es mas del lado de arquitectura y Spring te lo ofrece esto es mas que nada configuracion, tu puedes definir en tu Application Server tu(s) DataSource y el app server maneja esto si ves que no es suficiente pues aumentas tu pool de conexiones pero sin afectar a la parte de la vista que es tu applicacion en si eso no deberia preocuparte ya que el modelo por si te lo da, te da eficiencia.

Te explico un poco lo del Application Server, es un como su nombre dice Servidor de Aplicaciones jaja pero con soporte para muchas cosas mas, puedes montar web services en ellos, tener acceso a recursos te da soporte para DataSources etc. Te sirve para montar applicaciones no solo paginas web estaticas o sitios sencillos.
En el app serv configuras tu Datasource y en tu applicacion solo haces refrencia (uso) a este datasource lo que te permite en cualquier momento cambiar este datasource sin tener que moverle un dedo a tu applicacion web esto da flexibilidad.

En sistemas actuales y me refiero a empresas grandes generalmente tienen esta arquitectura y no nada mas un server sino un cluster para la alta disponibilidad y diferentes ambientes.

Mi recomendacion es que le eches un ojo a estos modelos que te cuento, entiendo que puedes decir que te tomara tiempo aprenderle o leer de esto pero te aseguro que sera tiempo bien invertido en el futuro te dara menos dolores de cabeza.


Saludos!

pd: texto sin acentos ! :P
  #9 (permalink)  
Antiguo 08/12/2008, 07:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Para expertos, Conexion BD.

Cita:
Iniciado por stone_neo Ver Mensaje
Mira GreenEyed te cuento algunas cosas:
Mi tarea es dar mantenimiento a un Sistema que no corre en un Servidor de Aplicaciones determinado, con decirte que en nuestras PC hacemos el desarrollo en el JDeveloper con BC4J como servidor, en nuestro ambiente de testing por cuestiones de Licencia usamos como Servidor de aplicaciones JBoss, ahora en el cliente su servidor de aplicaciones de su ambiente de producción usan el OAS, por lo que los ingenieros que diseñaron la aplicación optaron por que la misma aplicación controle el pool de conexiones.
Y no tiene nada de malo, nosotros mismos lo hacemos en muchos casos, ya que tenemos nuestro propio Pool de conexiones, que desarrollamos cuando no existian los DataSources ni nada parecido. Sin embargo, dada una pregunta general, pues la respuesta es general y "en general" si no tienes algo ya desarrollado o tienes un caso especial, pues lo normal es usar DataSources por que hacer un pool propio no es cosa de dos días. De todas formas, dado que DataSource es una interfaz y todos los servidores de aplicaciones tienen formas de definirlos, el que se pueda cambiar el servidor de aplicaciones no implica necesariamente no usar DataSources, simplemente a la hora del deploy hay que asegurarse que en todos los servidores esten definidos bajo el mismo nombre. Pero vamos, tampoco es imprescindible hacerlo así.

Cita:
Iniciado por stone_neo Ver Mensaje
Con respecto a que 10 pool de conexiones es mucho, te cuento que algunas de nuestras transacciones son muy largas por ejemplo la aprobación de un expediente consta de hacer inserts y updates a por lo menos 8 tablas y la actualización de documentos en word que son guardados en base de datos, por lo que esa transacción es muy pesada(notese que un expediente puede tener una buena cantidad de documentos que tambien deben ser aprobadas). Ahora en tema de concurrencia el sistema cuenta con 8 módulos, de las cuales en un solo modulo se encuentra cerca de 15 usuarios que son encargados la revisión de expedientes, y cerca de 90 usuarios que son los encargados de realizar la importación de expedientes desde otro sistema a este. Como te imaginaras existe mucha concurrencia.
De la misma forma que antes, pregunta general = respuesta general . Pero lo que explicas no tiene nada de malo y es un caso donde haran falta muchas conexiones. Yo he trabajado en aplicaciones con 3 pools de 90 conexiones cada una... y se usaban todas! Pero en la mayoría de aplicaciones que he desarrollado, 10 conexiones ya eran muchas. Todo depende del tipo de acceso a la BDD y lo que tengas que mantener las conexiones "retenidas" sin devolverlas al pool. Por ejemplo, yo tenia una aplicacion en marcha que servía a una poblacion de ~16.000 usuarios con un pool de 10-12 conexiones abiertas, por que las transacciones eran cortas y nos cuidabamos de liberarlas en seguida. Rehicieron el sistema y la misma aplicación ahora ha pasado a necesitar mas de 80, simplemente por la forma de hacerla.

Si necesitas muchas conexiones, pues pones muchas, pero la idea es que uses las mínimas que puedas, por que el servidor de BDD es uno de los recursos que antes empiezan a dar problemas por saturacion (junto con la memoria del servidor de aplicaciones, claro). En un caso como el que me cuentas, si las transacciones son largas y los usuarios trabajan simultaneamente, pues no hay más remedio.

Cita:
Iniciado por stone_neo Ver Mensaje
Ahora en el ambiente de producción del cliente existen cerca de 30 sistemas mas, que tienes igual o mas concurrencia y transacciones mas pesadas de las del sistema que yo doy mantenimiento. Y no siempre vas a poder usar los frameworks k kieras para algun sistema, en nuestro cliente por ejemplo no nos permiten usar ningun framework open source, que por que, eso habria que preguntarles a ellos.


Esto que te explico es con lo que yo tengo que lidiar dia a dia, no quiero decir que esto sea lo verdadero, pero en mi caso, asi funcionan las cosas.
Bueno si, lo de las restricciones al desarrollar tambien es un tema "interesante"... pero bueno, hallar soluciones con las vías que nos dejan es parte de lo divertido del trabajo .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #10 (permalink)  
Antiguo 08/12/2008, 19:12
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
Respuesta: Para expertos, Conexion BD.

Bueno, muchas gracias a todos por la atancion prestada...

Realmente la mayoria de los apuntes son excelentes, esta noche leo cada uno.

Por otro lado, no fue mi intencion ofender a nadie con el comentario respecto a que JAVA tiende a ser complicado, ni tampoco deseo iniciar una disputa sobre si es mejor php o java ni mucho menos asp(No se en que momento nombre asp... no entendi, creo que son cosas muy distintas). Realmente a mi JAVA me parece muy potente, ya que te deja realmente tratar con todos los detalles de la programacion en cada situacion, me explico... Te permite validar y conocer en mayor profundidad la validacion de errores, manejo de eventos, un amplio enfoque a la herencia y encapsulacion, y la forma de trabajar con el desarrollo de aplicaciones en general. Pero es ahi(en mi opinion), donde radica su dificultad(Si, se que existen algunos IDE como Netbeans, eclipse, WPhere de IBM... y muchos otros que facilitan estas labores... Pero pienso que si se esta aprendiendo, no se debe acudir primero al uso de estas herramientas, es mejor comenzar por el camino dificil y luego a lo facil!

De todas formas explico algo sobre mi sistema:

LO MALO!
1. esta destinado a ser manejado por 300 usuarios mas o menos de forma simultanea.
2. Se necesita un sistema de control de usuarios y sesiones(Resuelto parcialmente).
3. Algo de ajax para recuperar datos de algunos campos(asunto resuelto).
4. La base de datos esta en syBase(Asunto de conexion resuelto).
5. Debe tener la capacidad de importar datos de una hoja excel(Una mera idea, creo que primero he de comvertir de XLS a XML para luego subirlo por ftp al servidor)
6. Generar reportes PDF.

LO BUENO!
1. Tengo bastante tiempo para el desarrollo.
  #11 (permalink)  
Antiguo 09/12/2008, 01:33
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Para expertos, Conexion BD.

Un punto importante que debes estudiar es el ratio entre usuarios -> peticiones concurrentes y lo largas que serán tus transacciones. Si son cortas y el ratio es bajo (1/10 - 1/100 no es nada raro) entonces no deberías tener mucho problema. Si las transacciones son largas y hay mucha concurrencia, pues tendrás que preparar el sistema para bastante carga. Cuando tengas una idea, nada como unas buenas pruebas de carga para asegurar que tu sistema no se irá al carajo el primer día .

Para importar de Excel, otra opcion es usar directamente alguna de las librerias para leer ficheros Excel, en el servidor.

Lo de tener tiempo está muy bien por que así podras probar cosas e ir aprendiendo, aprovecha que no todos los proyectos son así .
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #12 (permalink)  
Antiguo 09/12/2008, 15:46
Avatar de SPAWN3000  
Fecha de Ingreso: marzo-2008
Ubicación: Bogota
Mensajes: 858
Antigüedad: 16 años, 8 meses
Puntos: 15
Respuesta: Para expertos, Conexion BD.

Listo, Gracias GreenEyed...

No sabia que existían librerías en servidor para Excel, es común en PHP... pero en java, realmente lo ignoraba... pensaba convertir a XML y luego usar DOM que es algo muy estandar.
  #13 (permalink)  
Antiguo 09/12/2008, 16:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: Para expertos, Conexion BD.

Por ejemplo... http://www.forosdelweb.com/f45/leer-...n-java-519048/
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:42.