viernes, 10 de junio de 2016

[Java] Configurar un Pool de conexión para mysql desde Glassfish


La mayoria de las aplicaciones requieren una forma de almacenar datos y controlar correctamente la integridad de los mismos, muchas veces en las aplicaciones web o empresariales de Java la forma de conectar es muy flexible, ya que hay desde la clasica conexión basada en JDBC, la configuración de una persistencia con los mismos datos o inclusive como el caso de ahora por medio de un Pool de conexiones. Esto hace que las conexiones sean controladas directamente por el contenedor y no lo haga el programador, ya que si por ejemplo lo hicieramos todo desde codigo duro, tendríamos que estar abriendo y cerrando las conexiones, o en el mejor de los casos implementar un singleton ( Una sola instancia para toda la aplicación) que esto complica su funcionamiento. Para dejarle el trabajo simplemente al contenedor podemos crear pool de conexiones los cuales se crean desde el mismo panel de administración (tambien puede ser por XML) que el asistente nos ayuda demasiado. 

Cuando se instala Glassfish tenemos automaticamente una serie de clases que permiten la conexión con algunos gestores de base de datos en nuestro caso con MYSQL, por lo que podemos decir que lo unico que debemos hacer es asegurarnos que tenemos dicha clase para esto vamos a la carpeta de glassfish de la instalación -> glassfish -> domains -> midominio -> lib -> ext y verificar que tenemos el conector de MYSQL


Ahora vamos a configurar el proceso de la siguiente manera: 

Entramos a la consola de administrador, una vez que glassfish este corriendo por medio de http://localhost:4848 o directamente en netbeans de la siguiente opción: 


En el panel de configuración nos dirigimos a la opción JDBC y la opción Pool 



Le damos en New para crear el que nos servirá, le podemos poner el nombre que sea ya en este caso le pondremos el funcionamiento del programa




Le damos clic en siguiente, en la pantalla que nos muestra nos desplazamos a la parte de abajo y buscaremos los siguientes elementos, los cuales modificaremos de la siguiente forma (En caso que no aparezcan los campos es muy probable que no se tenga en Driver en la posición adecuada): 

------
DatabaseName: NombreMIBaseDatos
Password: passwordUsuarioMysql
Url: jdbc:mysql://IPDondeEsteMYSQL:3306/NombreMIBaseDatos    (IPDondeEsteMYSQL puede sustituirse por localhost en caso que el servidor de mysql este instalado en el mismo equipo que el GlassFish) 
url: jdbc:mysql://IPDondeEsteMYSQL:3306/NombreMIBaseDatos    (IPDondeEsteMYSQL puede sustituirse por localhost en caso que el servidor de mysql este instalado en el mismo equipo que el GlassFish) 
User: UsuarioMysql 
------

Damos Finalizar para guardar los cambios 

Veras que en la opcion de pools ya te aparecera el nombre que acabas de agregar, puedes entrar nuevamente y dar PING para probar la conexión y que los valores sean los correctos


Despues en la misma opción de JDBC vas a encontrar JDBC Resources que es el nombre por el cual podremos acceder de la programación, predeterminadamente los nombres son jdbc/_algo pero realmente puede ser cualquier nombre, por lo que crearemos un nuevo recurso, le ponemos el nombre que queramos y en el pool importante seleccionamos el que queramos utilizar, para el ejercicio pues tendrìa que ser el ultimo que configuramos en los apartados anteriores. 


Una vez finalizado ya tenemos un recurso el cual puede ser usado de la siguiente manera dentro de un contexto valido para el contenedor (Alguna aplicaciòn que corra en Glassfish), lo pondríamos de la siguiente manera: 


package dbConnect;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

/**
 * Clase que permite traer el pool de conexion del servidor 
 * @author coby
 */
public class Conexion {
    
    protected DataSource getConexion() {
         try {
             Context c = new InitialContext();
             return (DataSource) c.lookup("java:comp/env/jdbc/siies");
         } catch (NamingException ex) {
             System.out.println("No se pudo resolver JNDI " + ex.toString());
         }
       return null; 
       
     }
    
    
    
}


Espero les sirva, saludos



No hay comentarios:

Publicar un comentario