domingo, 24 de mayo de 2020

Desarrollo de Aplicaciones con Java EE 8

Java Enterprise Edition 8 (Java EE8), es la ultima versión de la especificación de Java EE, agrega varias características nuevas a la especificación anterior. Varias APIs que ya existían han sido mejoradas en esta versión, y otras APIs nuevas han sido agregadas. Este curso cubre la ultima versión de la especificación de Java EE, el cual es la más popular, incluye JavaServer Faces (JSF), Java Persistence API (JPA), Enterprise JavaBeans (EJB), Contexts and Dependency Injection (CDI), JSON Processing JSON-P, JSON Binding (JSON-B), WebSocket, Java Messaging Service JMS, JAX-WS, JAX-RS. También cubre aspectos de seguridad en las aplicaciones Java EE con la nueva de seguridad para Java EE.
Si deseas conocer la lista completa de los cambios y APIs agregadas puedes consultar la entrada Qué hay de nuevo en Java EE 8

Tabla de Contenidos

Capitulo 1: Introducción a Java EE
Capitulo 2: JavaServer Faces
Capitulo 3: Persistencia de datos con JPA
Capitulo 4: Enterprise Java Beans
Capitulo 5: Contexto e Inyección de Dependencias
Capitulo 6: 

domingo, 3 de mayo de 2020

Como usar c3p0 en JPA Hibernate

Cuando damos nuestros primeros pasos en JPA/Hibernate no nos preocupan los detalles, solo queremos ver lo fácil y rápido que es poder persistir objetos en nuestra base de datos. Realizar consultas y otros temas relacionados con la persistencia de datos.

Cierto día mi servidor de Base de datos MySQL estaba apagado, mi aplicación se demoró unos 5 minutos en intentar establecer conexión. Dejando la aplicación congelada durante ese tiempo. Este fue el motivo que me llevó a investigar como tener mayor control con la conexión a la base datos, me llevó a preguntarme como establecer un time-out.
El otro motivo fue el log que me llamó la atención, el mensaje decía "using hibernate built-in connection pool (not for production use )". Esto significa que Hibernate viene con un pool de conexiones integrado, un pool de conexiones que no está recomendado para ser usado en producción, solo para desarrollo.

C3P0 es un pool de conexiones de base de datos, tu puedes establecer un rango de conexiones permitidos, estás conexiones se van instanciando a demanda. Por ejemplo, al iniciar tu aplicación es posible que se instancie una primera conexión, si tu sistema es multi-hilo posiblemente estás cargando los datos de configuración mientras el usuario necesita hacer login, el pool de conexiones se da cuenta de que necesitas una conexión más, primero buscará una conexión ya instanciada pero que este sin usar, de existir te entregará esa conexión, si no existe entonces va a crear una nueva instancia.

C3P0 no solo es un pool de conexiones, tiene muchas otras características, una de ellas es poder establecer un timeOut de conexión, un timeOut de consulta entre otras características.

Voy a explicar como integrar y usar C3P0 en proyecto Maven y en un proyecto Java estándar.

Integrar C3P0 en un proyecto Maven

Lo que debemos hacer es agregar la dependencia en nuestro archivo pom.xml

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.3.6.Final</version>
</dependency>

La versión debe ser similar o lo más cercano a la versión de hibernate-entitymanager, la ventaja de usar Maven es que automáticamente va identificar si hibernate-c3p0 requiere de otras dependencias y así recursivamente, por eso, si vas a la lista de dependencias de tu proyecto, vas a notar que ahora tienes las siguientes dependencias.

hibernate-c3p0-5.3.6.Final.jar
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.11.jar

Si te preguntas como me he enterado de todos los jars necesarios, pues te diré que en el repositorio de maven está la lista de todas las dependencias. Tu buscas hibernate-c3p0-5.3.6.Final.jar y se te mostrará las dependencias necesarias para compilar y/o ejecutar.

Integrar C3P0 en un proyecto estándar

Para integrar c3p0 en un proyecto estándar debes descargar los jars por separados, los puedes descargar desde el repositorio de maven. Una vez descargados debes agregarlos al classpath de tu proyecto.

Propiedades C3P0
Las propiedades más relevantes para c3p0 son:

hibernate.c3p0.min_size: El numero minimo de conexiónes a mantener en el pool de conexiones. Conexiones que si no se usan estarán "dormidas"
hibernate.c3p0.max_size: El numero maximo de conexiones a mantener en el pool de conexiones. Si se llega al numero máximo de conexiones y la aplicación requiere más conexiones entonces la petición quedará bloqueada hasta que una conexion esté disponible.
hibernate.c3p0.checkoutTimeout= El timeout en mili segundos para establecer la conexion con la base de datos. Si no se estable a conexion en ese timeout se lanzará una excepción.

Estás propiedades se agregan en la unidad de persistencia, dentro del archivo persistence.xml o también se pueden agregar mediante código fuente.

viernes, 1 de mayo de 2020

Participemos en la transformación de nuestra sociedad

México es un país con claroscuros, hay lugares donde se vive con alta calidad de vida mientras que en otros apenas se sobrevive. El COVID 19 ha sacado lo mejor y lo peor de nuestra sociedad. Siendo objetivo hay muchas cosas que me gustaría cambiar de la sociedad en la que vivo. Deseo una mejor sociedad en donde mis sobrinos se puedan desarrollar. Y ¿como sería esta sociedad ideal? No pido mucho. Deseo una sociedad donde todo individuo tenga oportunidades para acceder de forma justa a una buena educación de calidad, acceso a la salud, acceso a la vivienda y finalmente que tengan las herramientas para desarrollarse, cumplir con sus sueños y metas.
No estoy pidiendo que las cosas sean gratis, estoy pidiendo que cada individuo tenga la oportunidad de acceder a recursos/servicios/información de forma justa EQUIDAD LE LLAMAN.

Para transformar nuestra sociedad debemos empezar desde abajo.

Valores... siempre los valores.
Debemos recuperar los valores, valores como el Respeto, la Honestidad, la Lealtad

Continuara...