Continuemos a tal momento hemos estado trabajando con una sola conexión a la base de datos, implementando
el patrón de diseño singleton en la clase conexión base datos.
Si revisamos el método Getting Taus por acá con control B, se fijan se crea una instancia cuando nul
la primera vez mediante el trayec manager, el que con hecho creamos la conexión, nos conectamos al
acetato y la devolvemos, pero después ya va a existir ese qaue que se invoca al quet instance de esta
clase siempre devuelve la misma conexión, incluso si regresamos al ejemplo JS a cualquiera.
Acá tenemos un trade con recurso, por lo tanto se crea esta conexión la primera vez y después bueno,
podemos realizar consulta con el distar o crear o eliminar todo dentro del mismo contexto, de la misma
conexión.
Y al final de la aplicación del método Main cerramos con el auto Closs, pero tenemos otra forma abrir
y cerrar conexión en cada consulta u operación.
Por ejemplo, en el repositorio, en el distar, abrir y cerrar la conexión una vez que haya molestado
todos los productos, por ejemplo, o bien una vez que eliminamos un producto por el Heidy, lo mismo
cerramos la conexión.
Los mismos al crear o al actualizar.
Después del Steinmetz o Premiere Statement, cerramos la conexión.
Pero va a depender cuando usamos una, cuando usamos otra.
Bueno, depende de la cantidad usuario concurrente que estén conectados, que estén utilizando la aplicación.
Por ejemplo, si una aplicación web es diferente forma y escenario, una forma sería según el contexto.
Por ejemplo, si una aplicación web vamos a tener solicitudes web http, entonces en cada request o
petición un usuario realiza una solicitud y ahí podemos abrir.
Y cuando finaliza el rico es http.
Cerramos la conexión.
Se fijan.
Entonces podemos abrir y cerrar y todo el contexto del request.
Hoy podemos mantener una sola conexión abierta.
De eso depende el contexto y también cómo lo manejemos.
Otra forma es implementar un pull de conexiones, es decir, un grupo de varias conexiones abierta y
se pueden reutilizar en diferentes consultas, operaciones o usuario conectado.
Pero la idea de clase es ver otra forma distinta al singleton.
Recuerde que Singleton es una conexión dentro de nuestro contexto.
En este caso, nuestro contexto sería nuestra aplicación con el método main.
Entonces ahora vamos a modificar este ejemplo.
De hecho, lo vamos a clonar para no tener que modificarlo.
Vamos a clonar.
Vamos a crear otro proyecto a partir de este para tener una conexión por operación o consulta en el
repositorio.
Otra forma.
Entonces nos vamos a la pestaña Proyectos con AL1 y vamos a copiar acá.
Ya va.
JS Nuestro proyecto lo copiamos.
Hacemos un clic acá.
Clic derecho.
Copiar.
Hacemos un clic por acá abajo en cualquier parte.
Un clic.
Luego clic.
Derecho.
Pegar y le damos un nombre.
Por ejemplo, guión bajo Klout.
Desgarrar un nombre que queramos.
Globus.
Ok, perfecto.
Ahí lo tenemos.
Ahora lo vamos a abrir.
Para eso nos vamos a ir a File, cerrar proyecto, cerramos el proyecto actual y lo vamos a abrir.
Buscamos en Open, nos vamos a curso.
Yaba Ya va.
JDBC Clouds.
Hacemos un clic.
Ok.
Perfecto.
Acá lo tenemos, de hecho, y lo vamos a revisar.
Control 1 Cerrábamos llega, tenemos todas las clases del proyecto.
Lo primero con control TAF debería modificar condición aceto para que no sea Singleton, pero eso después
lo vamos a ver.
Por ahora vamos a modificar el repositorio por acá.
Pro-ducto, repository, implemento.
Bien guet conexión paseada to get instance.
Acá obtenemos la conexión actualmente Singleton.
Entonces la idea es cerrar.
En cada método el dictar por Heidy guardar.
En fin.
Pero para cerrar acá tenemos que crear el objeto, el connection, declarar este recurso.
Entonces vamos a bajar, subimos acá, vamos a tener conexión connection con igual get con echo.
Perfecto.
Punto y coma.
Ahora, en vez de utilizar el que connection en el statement, acá lo vamos a seleccionar y vamos a
utilizar el con. Entonces los seleccionamos con Fijan.
Entonces acá tenemos el recurso conexión y como lo tenemos dentro del TROI con recurso, automáticamente
se cerrar de forma automática.
Esto acá lo vamos a dejar acá es bien.
Vamos a copiar esto acá, lo copiamos y lo tenemos que replicar en cada método.
Entonces bajamos en el porahí.
Por acá lo pegamos.
Control V bajamos.
Pero el prepar lo tengo que modificar.
Entonces acá nos vamos.
A qué conexión lo quitamos?
De hecho, lo seleccionamos completo.
Lo cambiamos por con punto pre.
Présteme.
Se fijan acá.
De hecho, lo dejamos así.
De esa forma cerramos la conexión.
En cada método, en cada operación.
Y continuamos con el siguiente.
Con guardar acá lo mismo.
Nos vamos al TROI.
Pegamos, bajamos, modificamos.
Nos vamos con hecho.
Lo seleccionamos completo y con.
Eliminar lo mismo, pegamos, bajamos y modificamos el que con ello lo seleccionamos con esta molesto.
Ahora que estamos cerrando la conexión en cada método, ya no es necesario cerrar la conexión dentro
del método main.
Por ejemplo, vamos a modificar el ejemplo JDBC está acá.
El primero se fijan.
Esto ya no es necesario, simplemente lo quitamos y eliminamos esta línea.
Bajamos y eliminamos el cache también.
De hecho, todo esto acá.
Eso lo quitamos y quería de esa forma.
Y lo mismo con el APDAYC acá.
Esto lo quitamos también vamos a quitar lo de abajo.
Por acá seleccionamos, quitamos y nos vamos también al delito.
Por acá.
Exactamente lo mismo.
Subimos, quitamos, bajamos.
Y seleccionamos.
Y ahí tenemos el ejemplo.
Ahora, si lo ejecutamos, va a ocurrir un error con cualquiera.
Vamos a ejemplos.
JS Acá cuando creamos el producto.
Por ahora voy a comentar el guardar.
Solamente quiero listar.
Entonces guardar.
Lo comentamos.
Comentamos solamente para litas, nada más para listar.
Y por Heidy.
Qué va a pasar?
Bueno, primero el quitar lo ejecutar.
Recuerden que listar va a cerrar la conexión.
Se fijan y después por ahí va a tratar de obtener una conexión.
La obtiene porque en base datos en conexión braceando sigue siendo singleton en el repositorio.
Si nos vamos acá a productos repositorio implemento en el por ahí un poco más arriba por acá.
Qué conexión y qué con?
Utiliza el singleton acá?
Entonces va a obtener la conexión que ya está cerrada, se cerró acá de forma automática.
Entonces debería dar un error de que el Liter funciona bien, porque primero tiene la conexión.
Después la sierra litar y después por allí la obtiene, pero la obtiene con la conexión cerrada.
Veamos.
Lo mejor es probarlo.
Volvamos al ejemplo.
Ejemplo JDBC.
Recuerden, tengo comentado guardar a menos que queramos guardar un producto, crear un nuevo producto.
Pero para el ejemplo lo mismo si queremos probar la conexión nada más con clic derecho run.
Entonces hoy ejecutamos, de hecho acá arriba en configuraciones editar configuraciones se fijan que
está con los ejemplos del otro proyecto del original que replicamos.
Entonces vamos a editar configuraciones y esta la vamos a quitar.
De hecho, vamos a quitar esta de acá.
Con eso de esto OK, lo dejamos sin ninguna configuración, se fijan y ahora podemos ejecutar.
Y ahora queda ejemplo JC El actual pero bien acaba listar se fijan.
Lista bicicletas o negativity clado Corsair es corset a cambio de qué?
En los otros ejemplos, pero es Corsair Teclado Aragón obtener por Heidy Nul porque se cerró la conexión,
se fijan y acá dicen no se permiten operaciones después de haber cerrado la conexión.
Entonces, claro, para evitar esto no tenemos que implementar el singleton acá, porque si no siempre
va a devolver la misma instancia que ya está cerrada, que ya se cerró.
Por ejemplo, en el método Listar recuerden que por ahí vuelve a pedir una conexión.
Entonces acá tenemos que pedir una nueva conexión, no una conexión que está cerrada.
Y por eso quería dejar esto al final para que vieran que el singleton funciona.
Igualmente sigue funcionando, pero con una conexión que ya ha sido cerrada en el repositorio, en el
distar.
Entonces la solución sería eliminar esto Control X.
Quitamos esto, quitamos esto acá también y listo.
Esto lo seleccionamos, cortamos y seleccionamos y pegamos control.
Y esta acá.
Le quitamos esta línea.
Simplemente devolvemos una conexión a la ACEA tocada que se invoca al que te instalas.
Entonces ahí estaría bien si nos vamos al repositorio.
Acá el Distar perfecto gaullistas crea una conexión y después la cierra.
Después el porahí pide una conexión y después la sierra, pero pide una conexión nueva.
Se fijan, no?
Una conexión que ya estaba cerrada desde antes.
Por eso acá no podemos implementar Singleton cuando queremos implementar una conexión por consulta u
operación.
Y eso sigue el cambio.
Entonces, ahora sí que sí.
Si nos vamos a ejemplo.
JS Ejecutamos ahora que ya tenemos configurado todo acá Control Chig, F10.
Ya no da error listar y obtener por.
Obviamente insertar nos aplica porque lo dejamos comentado.
Ahora, si queremos insertar no producto perfecto, lo comentamos pudiendo incluso colocar otro producto
y va a funcionar.
De hecho, acá en vez teclado Reiser podríamos colocar un producto, por ejemplo.
Por ejemplo, Notebook Asus Rozz precio, no sé, dos mil o dos mil quinientos cincuenta está bien la
fecha categoría computación, creo, sí, computación.
Entonces ejecutamos contra el chip F10.
Notebook azul, rojo computación está bien, funciona bien, pero ahora es una conexión por cada consulta
operación, es decir, dentro del repositorio se abre y se cierra la conexión.
Ya está bien.
Si, porque utilizamos la conexión y la cerramos.
Por lo tanto se consume recurso, después se cierra.
Ahora, claro, si tenemos mucho concurrencia, una aplicación web con muchos usuarios conectados y
estará abriendo y cerrando conexiones a cada rato.
Podríamos tener un cuello botella.
Entonces quizás hoy es mejor tener un pull de conexiones, por ejemplo 20 conexiones abierta un buen
servidor y distribuir esas 20 conexiones a los distintos usuarios y quizás no 20 quizás pueden ser menos.
Todo depende.
Depende de cantidad, concurrencia.
Va a funcionar mucho mejor.
Por ahora quedamos hasta acá y continuamos en la siguiente clase con de conexiones.