03 septiembre, 2020

Crear un Pool de conexiones en GlassFish a una base de datos MySQL Server 8.0 (2020)

Glassfish tiene una manera peculiar de tratar los recursos JDBC: Tiene un pool de conexiones, y después un JDBC Resources. Supongo que es porque un pool de conexiones puede tener varios JDBC Resource. Los demás Servidores de Aplicaciones que he visto usan unicamente un JDBC Resource, y en ese mismo se configura la configuración del pool.

En este post aprenderemos a crear un Pool de Conexion + JDBC Resource en GlassFish Server. Primero lo haremos directamente desde el mismo servidor GlassFish y después desde la misma IDE de  NetBeans.

Herramientas

  • NetBeans IDE 8.0.2
  • GlassFish Server 4.1
  • MySQL Server 8.0.

Desde GlassFish

Pasos

0. Antes que nada, debemos agregar el jar de conexión MySQL al domino de GlassFish, en mi caso debo copiar el jar en la siguiente ruta: 

C:\Users\XxkokoxXT\AppData\Roaming\NetBeans\8.0.2\config\GF_4.1\domain1\lib

Si no saben como encontrar la ruta en su máquina, deben ir a la pestaña Tools / Server de su NetBeans. 


1. El servidor GlassFish debe estar levantado



2. Accedemos al administrador de consola


3. En la interfaz que se abre en el navegador seleccionamos la opción JDBC / JDBC Connection Pools


4. Clic en el botón New y completamos los siguientes campos.


5. Clic en Next y en la siguiente ventana debemos agregar las siguientes propiedades. Para no confundirnos con la lista de propiedades que aparece por defecto, eliminamos todas las propiedades y volvemos a agregar las propiedades que vamos a necesitar, 


Propiedades básicas

<property name="serverName" value="localhost"/>

<property name="portNumber" value="3306"/>

<property name="Port" value="3306"/>

<property name="databaseName" value="java19materias"/>

<property name="User" value="root"/>

<property name="Password" value="root"/>

<property name="URL" value="jdbc:mysql://localhost:3306/java19materias"/>

<property name="driverClass" value="com.mysql.jdbc.Driver"/>

-----------------------

Para los que tienen problemas de zona horaria deben agregar las siguientes propiedades a la URL, de lo contrario obtendrán el siguiente error: Cannot establish a connection to jdbc:mysql://localhost:3306/java19materias using com.mysql.jdbc.Driver (The server time zone value 'Hora est. Pacífico, Sudaméric' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.)

<property name="URL" value="jdbc:mysql://localhost:3306/java19materias?useTimezone=true&serverTimezone=UTC"/>


Para conectarnos a MySQL 8.0 debemos agregar la conexión de la siguiente manera, de lo contrario nos saldrá el siguiente error: Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'.

<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>

Si al hacer ping para testear el pool de conexiones  nos sale el siguiente el error:  Unable to load authentication plugin 'caching_sha2_password'. Debemos agregar la siguiente propiedad.

<property name="UseSSL" value="true"/>

Si al hacer ping para testear el pool de conexiones no sale el siguiente error: Ping Connection Pool failed for connectionPool2020. Connection could not be allocated because: Cannot open file:C:\Users\XxkokoxXT\AppData\Roaming\NetBeans\8.0.2\config\GF_4.1\domain1/config/keystore.jks [Keystore was tampered with, or password was incorrect] Please check the server.log for more details. Debemos agregarle la siguiente propiedad.

<property name="UseSSL" value="false"/>


En mi caso solo necesito definir las siguientes propiedades:


En la pentaña General debemos actualizar el campo DataSource Classname de com.mysql.jdbc.jdbc2.optional.MysqlDataSource  a
com.mysql.cj.jdbc.MysqlDataSource




Ver otros cambios en el Connector/J API

Si queremos probar el pool que creamos debemos ir a la pestaña General y hacer clic en el botón Ping.


6. Clic en Finish


7. Ahora debemos crear un Data Source, para ello, nos vamos a la opción JDBC / Data Resources y seleccionamos la opción New.


En Pool Name seleccionamos el pool de conexión que creamos


8. Clic en el botón OK y ya tenemos listo nuestro pool de conexión + jdbc resources en GlassFish. Para probarla, solo debemos crear un proyecto y llamar al DataSource. 


Crear un Proyecto Java

Creamos un proyecto web, para ello vamos a la opción File / New / Java Web / Web Application.



Seleccionamos el servidor GlassFish que es en donde tenemos creado el pool de conexión


Agregamos algunos framaeworks ya que en un siguiente post crearemos un CRUD usando JPA, EJB,  JSF y Primefaces.



Luego vamos a Source Package clic derecho / New / Other y creamos una clase Entidad a partir de una base de datos. De esa manera nos conectaremos al Data Source que creamos en el servidor GlassFish.




En el Data Source buscamos el Data Source que creamos en el administrador de consola de Glasfish. Al seleccionar nos mostrará las tabla de la base de datos.




Listo, si deseas puedes continuar está guía viendo el post para crear un CRUD Java Web usando los frameworks de JPA, EJB, JSF y Primefaces

Ver post


Desde NetBeans

Pasos

1. Para realizarlo desde NetBeans, necesitamos tener el proyecto que usará la base de datos abierto. Luego, presionamos Ctrl+N o hacemos clic derecho al proyecto File / New File / Other


2. Seleccionamos la categoría GlassFish y el tipo de archivo JDBC Connection Pool


3. Escribimos el nombre de nuestro pool de conexiones. Además, seleccionamos cual es la base de datos que usaremos. Como es una conexión nueva, seleccionamos New configuration using database, y en mi caso selecciono MySQL.

4. Clic en Next y en la ventana que aparece seleccionamos el tipo de recurso (por omisión es java.sql.DataSource, escribimos el URL de nuestra conexión JDBC, el usuario y la contraseña.

Clic en Finish y ya tenemos nuestro pool de conexiones creado para nuestro proyecto desde NetBeans


5. Ahora debemos crear un Data Source, para ello, presionamos Ctrl+N o hacemos clic derecho al proyecto File / New File / Other. Seleccionamos la categoría GlassFish y el tipo de archivo JDBC Connection Pool

6. Clic en Next y en la ventana que sigue seleccionamos el pool de conexiones que estará asociado a nuestro recurso JDBC. En mi caso es ConnectionPool, y escribo el nombre en formato JNDI

Clic en Finish y ya tenemos nuestro recurso JDBC.


El recurso JDBC y el pool de conexiones creados desde NetBeans se crearán en el glassfish unicamente cuando se despliegue el proyecto.



¿Cuál es la diferencia en hacer desde Glassfish o desde NetBeans?

Cuando se hace desde NetBeans, es solo para fines de desarrollo. Notemos que se ha creado el archivo sun-resources.xml en nuestro proyecto.

Dentro tiene toda la configuración que NetBeans usará para crear los recursos JDBC para que nuestra aplicación funcione en nuestro GlassFish de desarrollo. Para nada más.


Cuando se crea el archivo .war para desplegar nuestra aplicación en un GlassFish de producción, el archivo sun-resources.xml no existe dentro del paquete de instalación. Simplemente no hay. 


Entonces ¿cómo nuestra aplicación puede conectarse a la base de datos estando en el GlassFish de producción? Pues bien, en este GlassFish de producción, creamos el JDBC resource directamente en el mismo GlassFish.

Esto es bueno, porque cuando desarrollamos usamos una base de datos que es solo para desarrollo. Mientras que para poner en producción, usaremos otra conexión, otra base de datos que será para producción.

2 comentarios:

  1. Excelente información!!!!!, habia buscado en muchos lugares y no me funcionaba la creación del Pool, siempre me daba errores, con esta infomación me funcionó excelente sin ningún problema

    ResponderBorrar