miércoles, 18 de abril de 2018

La Plataforma Java Empresarial

He notado que existe mucha confusión, dudas e inquietudes acerca de la Plataforma Java Empresarial, la plataforma es muy extensa y algunos conceptos pueden llegar a confundir. Por ello decidí escribir esta entrada, espero poder aclarar todas las dudas.

Los desarrolladores de hoy reconocen cada vez más la necesidad de contar con aplicaciones distribuidas, transaccionales y portables que  aprovechen la velocidad, seguridad, y confiabilidad de la tecnología del lado del servidor.

Las aplicaciones empresariales proporcionan la lógica de negocio para una empresa. Estas aplicaciones son gestionadas de forma centralizada y, a menudo interactuan con otras aplicaciones empresariales.

En el mundo de las tecnologías de información, las aplicaciones deben diseñarse, construirse y entregarse con bajo presupuesto, con mayor velocidad y con menos recursos.

Con la Plataforma Java Empresarial (Java EE), el desarrollo de aplicaciones empresariales nunca había sido mas fácil o mas rápido. El objetivo de la plataforma Java EE es proporcionar a los desarrolladores un conjunto de APIs muy potentes, permitiendo reducir el tiempo de desarrollo, la complejidad de la aplicación y mejorando el rendimiento de la aplicación.

La plataforma Java EE se desarrolla a través de la Java Community Process (JCP) que es una comunidad responsable de todas las tecnologías (APIs) que forman la plataforma Java EE. Dentro de esta comunidad existen grupos de expertos que crean especificaciones para alguna tecnología en particular. A estás especificaciones se les conoce como Solicitud de Especificación de Java (JSR)

Es así como tenemos una especificación para cada versión de cada una de las Tecnologías (APIs) que conforman la plataforma Java EE.

Una Solicitud de Especificación de Java es es un documento formal propuesto para definir la funcionalidad y uso de la tecnología propuesta. Es decir, las clases, métodos, ciclos de vida, secuencias y como estás clases interactuan entre si. Un individuo o una organización puede convertirse en miembro de la Java Community Process (JCP) y puede desarrollar su código según las especificaciones mencionadas en JSR. La implementacion desarrollada de la especificación será revisada por los miembros del JCP y aprobarán o rechazarán. Generalmente, ademas del documento, la especificación tendrá un conjunto de interfaces java, las cuales deben ser finalmente implementadas por alguna organización interesada.

Por ejemplo, la API JPA (Java Persistence API), la especificación entrega un documento y el api que se componen de clases, interfaces, enums, y archivos xml de configuracion. Sin embargo, esta API por si sola no es útil. Tiene utilidad cuando se tiene una implementación, por ejemplo la empresa Red Hat tiene una implementación de JPA llamada Hibernate. Y así como Hibernate, existen otras implementaciones de JPA.

La gran ventaja de trabajar con especificaciones es tu puedes fácilmente cambiar de implementación y tu programa no debería requerir ningún cambio, para tu programa la implementación que estés usando es transparente.

Ahora si, vamos a ver de forma resumida cada una de las tecnologías o especificaciones que son parte de la plataforma Java EE.



lunes, 16 de abril de 2018

Java EE: EJB Enterprise Java Beans

Introducción

Los Enterprise JavaBeans (EJB), son usados para el desarrollo y despliegue de componentes que forman parte de una aplicación distribuida. aplicaciones que son escalables, transaccionales y seguras.
Los EJB están definidos como JSR 345, la especificación completa se encuentra en https://jcp.org/aboutJava/communityprocess/final/jsr345/index.html
Un EJB típicamente contiene la lógica del negocio y opera sobre los datos del negocio. La información del servicio, tal como atributos de la transacción y seguridad, pueden ser descritos usando metadatos como las anotaciones, o en un descriptor de despliegue en XML.
Una instancia de un bean es gestionado en tiempo de ejecución por un contenedor. El bean es accedido desde el cliente, siendo el contenedor en el está desplegado  un intermediario entre ellos. El cliente puede también estar en el servidor en forma de un bean, un bean CDI, o algún tipo de servlet. En cualquier caso, el contenedor de EJB proporciona todo lo requerido para una aplicación empresarial. Esto permite al desarrollador de la aplicación enfocarse en la lógica del negocio y no preocuparse sobre detalles de bajo nivel y manejo de estados, concurrencia, multihilos, pool de conexiones, u otras APIs complejas de bajo nivel.

Hay dos tipos de enterprise beans:
  • Beans de Sesión (Session beans)
  • Beans dirigidos por mensajes (Message-driven beans)
Los EJB han pasado por varias versiones, antes de la versión 3.0 teníamos exclusivamente los entity beans para poder persistir datos a nuestra base de datos. Ahora tenemos la Java Persistence Api (JPA) la cual es más recomendable de usar para la persistencia de datos.

Tipos de Beans de Sesión
Los beans de sesión se dividen en tres tipos: con estado, sin estado y singleton

Beans de Sesión con Estado (Stateful Session Beans)
Un bean con estado es un tipo de bean de sesión que está diseñado para que lo utilice un solo cliente durante su vida útil y mantiene un estado conversacional fuertemente acoplado con el cliente al que está llamando.

Beans de Sesión sin Estado
Este tipo de bean no mantiene un estado conversacional con el cliente, es por ello que no tiene variables de instancias, 

Referecia:
http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html

jueves, 12 de abril de 2018

Desafiando a la plataforma JEE

Son alrededor de las 23:00 horas, he tenido una día agotador, actualmente me encuentro desarrollando una API RESTFul. Para ello estoy usando JAX-RS, EJB, CDI,  JPA y JAXB. Ha sido desafiante porque las cosas no me salen a la primera, o me funciona pero a medida que voy incorporando más componentes deja de funcionar. La complejidad de Java EE está en la integración, hay muchos componentes involucrados y cada uno de ellos cuentan con reglas especificas que debemos conocer para asegurar el buen funcionamiento.

Mi estrategia ante una nueva plataforma o tecnología, es empezar paso a paso, si algo dejó de funcionar, volver atrás, observar mucho los logs, poner atención a cada detalle, como dice la frase "el diablo está en los detalles". Hay que ser muy astuto, tener olfato, tener colmillo, usar el sentido común, la lógica, la intuición. Si no, la frustración te consumirá.

Pero bueno, paso a paso estoy logrando los objetivos, así que... ahora sí voy enserio con JEE

lunes, 9 de abril de 2018

Maven Guia para instalar dependencias en el repositorio local de Maven

Cualquier jar que necesitemos en nuestro proyecto java construido y gestionado con Maven, será considerado como una dependencia. Estas dependencias no siempre se encontrarán en el Repositorio remoto de Maven. Algunas dependencias serán de terceros, que si bien fueron construidos con Maven, estás no se encontrarán en el repositorio Remoto. Peor aun, algunos jars ni siquiera serán construidos con Maven, ya que muchas empresas aun usan Ant, o puede que el jar sea de un proyecto legacy que fue desarrollado cuando no existía Maven.

Ya viví esta situación en la empresa, estoy iniciando un nuevo proyecto web, y para mayor comodidad estoy usando Maven para la construcción y gestión del proyecto, este proyecto usará otros proyectos desarrollados en la empresa. Proyectos que son gestionados con Ant y que por esta razón no siguen el estándar de Maven, es decir, no tienen un archivo POM, no se encuentran en un Repositorio Maven, ni local ni remoto. Y es así como surge la pregunta, como agrego estos jars a la lista de dependencias en mi POM.

Pues me puse a investigar y aquí les comparto una guía, vamos abordar los distintos escenarios. Esta guía esta probada para Windows.

1.- Instalar un jar como dependencia en el Repositorio local Maven
Desde luego, estoy asumiendo que tienes Maven instalado y configurado correctamente. Si no, te sugiero leer la entrada Instalar Maven

Abrimos una consola de comandos en Windows y vamos hasta el directorio donde se encuentra nuestro jar.

Ejecutamos lo siguiente



Donde nombre-jar será el nombre del jar a instalar, y el resto de atributos son los atributos conocidos de una dependencia Maven.

Después de ejecutar este comando, si vamos nuestro directorio .m2 dentro del directorio de nuestro usuario Windows, y luego entramos a repository, y siguiendo la ruta según el groupId, vamos a ver que tenemos instalado nuestro jar junto con el archivo pom.xml y otros archivos metadatos.


Ahora sí, ya podemos agregar esta dependencia al proyecto que lo requiera, usaremos los datos (groupId, artifactId, version y packaging) usados en la instalación de la dependencia.

Continuara...





domingo, 8 de abril de 2018

Mi novia - Fabio Fusaro

Por curiosidad estuve leyendo el libro "Mi Novia" del autor Fabio Fusaro. La lectura me llevo al pasado, cuando tenía alrededor de los 20 años, en esa edad tuve mi primera ruptura amorosa, sentí por primera vez el dolor que causa una ruptura. Siempre he sido una persona que no comparte sus sentimientos, sin embargo siempre he sido muy analítico. Recuerdo los típicos pensamientos "Ella es especial", "No encontraré a otra como ella", etc,. Y las típicas dudas, ¿La busco?, ¿Le pido que volvamos?, etc,. Como si fuese mi culpa de que la relación no haya funcionado, cuando no lo era. Siempre me quede con las ganas de saber que hacían otros hombres en una situación así. Mi decisión fue cortar de raíz con aquella persona, sacarla de mi vida, borrar fotos, contactos por todas las redes sociales, osea sacarla definitivamente de mi vida, incluso llegué a mudarme de ciudad.
Al momento es una decisión dolorosa, pero a mi me ha funcionado, para mi, lógicamente no tiene sentido "arreglar las cosas" y volver.
Este libro trata de las relaciones, desde el enfoque donde es la mujer la que deja de sentirse atraída, nos responde en base a experiencias ¿Por qué ella pierde el interés?, ¿Que debe hacer un hombre para mantener interesada a la mujer?, que a mi juicio es un desgaste enorme, y la conclusión a la que Fusaro llega, con la cual coincido, es que La atracción es algo que no puedes controlar, así que disfruta, disfruta de tu relación sin complicarte, y cuando el día en que se tenga que terminar llegue, asúmelo y retírate con dignidad. No hay nada más patético que ver a un hombre rogar por amor, rogar porque su ex regrese.
Fusaro también nos da una serie de consejos de que hacer una vez que la relación se terminó, lo cual es lógicamente no buscarla, y si es ella la que decide buscarte, te explica lo que te puedes esperar si aceptas regresar.
Es sorprendente enterarse de que la gran mayoría de hombres sufren una ruptura, y no, no es que seamos débiles, es solo que el hombre también ama, y ama de una manera tan intensa y genuina. Cosa que no ocurre con la mujer, la mujer no ama, la mujer se obsesiona.