La gestión de transacciones es fundamental e integral en las aplicaciones empresariales para garantizar la preservación de la consistencia e integridad de los datos. Una transacción, desde el punto de vista de una base de datos, representa una unidad lógica de trabajo que abarca una o múltiples operaciones de base datos(insertar, update, borrar).
Jakarta EE, al igual que su predecesor JavaEE, ofrece una abstracción integral para gestionar transacciones, ya sea programáticamente a través de las API de JTA o de manera declarativa mediante anotaciones. Esta última es más popular debido a su simplicidad y la capacidad de mantener límites de transacción claros sin abrumar el código lógico del negocio. En este artículo, exploraremos la anotación @Transactional en Jakarta EE, y veremos diferentes comportamientos bajo varias configuraciones y algunas mejores prácticas.
La Anotación @Transactional
La anotación @Transactional es la que ofrece las capacidades de gestión de transacciones declarativas de Jakarta EE. Básicamente, cuando un método está decorado con @Transactional, Jakarta EE se asegura de que se inicie una transacción antes de la ejecución del método y posteriormente se confirme si la ejecución continúa normalmente, o se revierta si se produce una excepción.
Por defecto, la anotación @Transactional tiene un comportamiento de propagación REQUERIDO. Es decir, Si hay una transacción activa, únase a ella. Si no hay una transacción activa, inicie una nueva.
@StatelesspublicclassMyService{@InjectprivateMyRepositoryrepository;@TransactionalpublicvoidperformBusinessOperation(){// lógica del negociorepository.save(entity);}}
En el ejemplo anterior, invocar performBusinessOperation() inicializa una nueva transacción. Cuando save() se llama posteriormente dentro de esa transacción, save() se une a la transacción existente en lugar de iniciar una nueva debido a su comportamiento de propagación REQUERIDO por defecto.
Sin embargo, vale la pena señalar que el uso superfluo de anotaciones @Transactional, especialmente cuando las transacciones ya están definidas en la capa de servicio, puede provocar confusión y comportamientos no anticipados. Por lo tanto, generalmente es una buena práctica definir transacciones a nivel de operaciones comerciales (como en la capa de servicio).
Manejo de errores (RollBack/Deshacer)
La anotacion @Transactional no es magica, hay alcances y caracteristicas que se deben manejar como el asilamiento de la persistencia de datos y el RollBack, esto se logra lanzando excpeciones del tipo Runtime, si usa una excepcion custom, esta debe heredar o ser del tipo Runtime.
Mejores Prácticas
Los límites de transacción deben reflejar los requisitos comerciales. Por lo general, es recomendable iniciar una nueva transacción para cada operación comercial distinta. Las demarcaciones de transacciones suelen ser mejor ubicadas en la capa de servicio, que se alinea bien con la comprensión de las operaciones comerciales. Por otro lado, anotar cada método a nivel de repositorio puede hacer que cada operación CRUD sea transaccional y, en consecuencia, puede crear una multitud de transacciones breves.
Sin embargo, vale la pena considerar el costo de una transacción. Cuanto más larga sea una transacción, más tiempo persistirán los bloqueos en los datos, limitando las posibilidades de acceso concurrente a los datos.
Conclusión
Todo lo que es entendible es hackeable: Un sólido entendimiento de las transacciones y @Transactional es indispensable para diseñar aplicaciones empresariales robustas. Seleccionar límites y configuraciones precisas para sus transacciones es crucial para mantener la integridad de los datos, el rendimiento y la escalabilidad de sus aplicaciones. Si bien Jakarta EE simplifica significativamente las complejidades de la gestión con la anotación @Transactional, ser consciente de sus comportamientos bajo diferentes configuraciones es crucial.
CTO en GInIEm S.A, Senior Software Engineer en Design House, Sr Software Engineer en Wepa. Master en Informática empresarial y consultor de Software con más de 12 años de experiencia.
Miembro del CORE del Java User Group Nicaragua, miembro organizador de Google Developer Group Nicaragua, Flutter Nicaragua y Flutter Latinoamérica. Conferencista internacional.
Entusiasta de Java y tecnologías móviles, ha trabajado con empresas de todo el mundo en el desarrollo de soluciones comerciales y de marketing que incluyen, entre otras, desarrollo back-end, desarrollo web / escritorio front-end, inteligencia empresarial y desarrollo móvil.
Disfruta de los desafíos y proyectos que exigen dar un esfuerzo adicional para lograr resultados extraordinarios.
Con el auge de los microservicios se podria pensar que el tipo aplicaciones monolitcas, ntier, hibridas o distribuiridas estan muertas, pero no es así, estas aun tienen una gran parte del mercado y son una solucion viable, sobre todo para aplicaciones pequeñas , empresas pequeñas, startups o midlewares medianos.
¿que es una aplicación monolitica?
Una aplicacion monolitica es aquella cuyos componentes estan estrechamente ligados de tal forma que cada uno de las clases o archivos dependen uno del otro. Una aplicacion monolitica puede estar formada por 1 o cientos de archivos en una sola carpeta, y para poder hacer funcionar se requieren todo los archivos o componente, logicamente representan toda la solución, en Java, son entregados en un archivo JAR , WAR o EAR.
¿Que es Java Server Faces?
JavaServer Faces (JSF) es un framework de desarrollo de aplicaciones web Java que se utiliza para simplificar la creación de interfaces de usuario en aplicaciones web utilizando el concepto llamado: Server side render.
¿que es “Server-Side Rendering” (SSR)?
Es una técnica utilizada en el desarrollo web para generar y renderizar contenido web en el servidor antes de enviarlo al navegador del usuario. A diferencia de las aplicaciones de representación del lado del cliente (Client-Side Rendering o CSR), donde la mayor parte del procesamiento y la renderización ocurre en el navegador del cliente, en SSR, gran parte de este trabajo se realiza en el servidor.
Esto tiene la notable ventaja que los componentes visuales pueden serreutilizados , ademas permite al equipo de desarrollo centrarse en la logica de negocio y no en la apariencia, permitiendo acelerar el desarrollo y simplicar el mantenimiento.
Esta tecnologia fué un BOOM en el 2005 al 2015, actualmetne con el auge de las apliaciones distribuidas, los microservicios y los servicios rest que permitieron la proliferacion de los frameworks javascript estan cada vez en menos uso, pero son bien apreciados en muchas empresas.
Frameworks que utilizan SSR
JavaServer Faces (JSF): es un marco de desarrollo web Java que permite la creación de aplicaciones web con representación del lado del servidor.
Thymeleaf: Thymeleaf es un motor de plantillas Java que permite la creación de páginas web con representación del lado del servidor. Es especialmente popular en combinación con el marco Spring.
Spring Boot: Si está utilizando Spring Boot como su marco de desarrollo, puede implementar SSR combinando Spring Boot con Thymeleaf u otras tecnologías de plantillas.
JSP (JavaServer Pages): JSP es una tecnología de Java EE que permite la creación de páginas web dinámicas con representación del lado del servidor. Aunque se ha vuelto menos popular en comparación con otras tecnologías de plantillas, todavía se utiliza en algunas aplicaciones Java legadas.
Vaadin: Vaadin es un marco de desarrollo de aplicaciones web en Java que ofrece una interfaz de usuario rica y permite la representación del lado del servidor. Es especialmente útil para aplicaciones empresariales.
Librerias Java Server Faces
PrimeFaces: PrimeFaces es una biblioteca de componentes de código abierto muy popular para JSF. Ofrece una amplia variedad de componentes ricos y temas personalizables para mejorar la apariencia y la funcionalidad de las aplicaciones JSF.
RichFaces: RichFaces es otra biblioteca de componentes para JSF que proporciona componentes AJAX ricos y herramientas para mejorar la experiencia del usuario en aplicaciones web JSF.
BootsFaces: BootsFaces combina JSF con Bootstrap, el popular framework de diseño web, para facilitar la creación de aplicaciones web modernas y receptivas con JSF.
IceFaces: IceFaces es una biblioteca de componentes JSF que se centra en proporcionar funcionalidad AJAX avanzada para aplicaciones JSF, lo que permite una experiencia de usuario rica y dinámica.
Apache MyFaces: MyFaces es un proyecto de código abierto de la Apache Software Foundation que ofrece una implementación de JSF. Incluye un conjunto de componentes y herramientas para el desarrollo de aplicaciones JSF.
OmniFaces: OmniFaces es una biblioteca de utilidades que complementa JSF y resuelve diversos problemas comunes en el desarrollo de aplicaciones JSF. Ofrece un conjunto de extensiones útiles.
Mojarra (Oracle JSF Reference Implementation): Mojarra es la implementación de referencia de JSF proporcionada por Oracle. Aunque es una implementación estándar de JSF, se utiliza comúnmente en aplicaciones JSF.
Cuban Platform: Cuban Platform es un conjunto de herramientas y bibliotecas que extienden JSF y otros marcos de Java para el desarrollo de aplicaciones empresariales.
Se puede comenzar a crear la aplicacion desde el website de jakarta o desde el IDE. El startup de jakarta nos permite una gran configuracion inicial para nuestro proyecto.
Crear el proyecto, para esto utilizaremos IntelliJIDEa
Codigo del ejercicio:
El codigo del ejercicio lo pueden encontrar en github del grupo:
Omar es Java Senior Developer full Stack, consultor independiente. Developer Advocate, amante a la tecnología JVM con mas de 16 años de experiencia, colaborador de las distribuciones Linux: Fedora y Gentoo, ademas de otras aplicaciones libres. También es promotor y colaborador del proyecto de robótica educativa ICARO. Lider de proyecto y gestión de equipos. Conferencista, entrenador y consultor internacional. Actualmente Líder del Grupo de Usuarios Java de Nicaragua.
Puedes contratarlo para capacitaciones en tu empresa, desarrollo de software a medida, contraparte en entrega de software o consultor de seguridad.
En el STACK java existe un archivo EAR que no es mas que un archivo ZIP con una estructura especifica. EAR (Enterprise Application aRchive) /
Un EAR normalmente contiene 2 archivos contenedores mas, un WAR (Web Archive) y un EJB , un archivo que contiene los EJB, sin embargo puede contener muchos mas (técnicamente no tiene limites), incluyendo clientes de EJB, EJB locales, pero el mínimo de todo EAR es uno, un modulo o contenedor, el cual puede ser un WAR o un EJB.
Actualmente dada la gran popularidad de Spring-Boot casi no se ven EAR, pero en el otro lado, fuera de spring-boot, en los servidores empresariales como: JBOSS, websphere, Apache TomEE, Wildfly.
Ejemplo de un proyecto EAR
Creando el EAR usando JetBrains IntelliJ IDEa
Usando el IDE para crear el proyecto gráficamente.
Creando un proyecto, paso uno.
Click en Crear.
Así queda el proyecto y puede eliminar a su gusto.
Omar es Java Senior Developer full Stack, consultor independiente. Developer Advocate, amante a la tecnología JVM con mas de 16 años de experiencia, colaborador de las distribuciones Linux: Fedora y Gentoo, ademas de otras aplicaciones libres. También es promotor y colaborador del proyecto de robótica educativa ICARO. Lider de proyecto y gestión de equipos. Conferencista, entrenador y consultor internacional. Actualmente Líder del Grupo de Usuarios Java de Nicaragua.
Puedes contratarlo para capacitaciones en tu empresa, desarrollo de software a medida, contraparte en entrega de software o consultor de seguridad.
Wildlfly es de los servidores mas usados en aplicaciones empresariales java, es muy potente, configurable, digno heredero de JBOSS, con muchos features, sin ser complicado. (Excepto features avanzados)
1. Descargar
Lo primero es descargar el programa, lo puedes hacer en este link:
La opción que generalmente se descarga es la full EE y distribución web, sea para windows o para linux.
En windows el contenedor ZIP es el mas común, para Linux: tgz.
La versión preview se usa para pruebas, aun no recomendable para un ambiente de producción.
2. Configurar
Una vez descargado y «descomprimido», se puede iniciar Wildfly, pero aun no está listo para usarse.
Para poder desplegar nuestras aplicaciones es necesario poder acceder a la consola, la consola administrativa solo se accede desde la versión FULL descargada, las version “Servlet-Only Distribution” se usa para servidores esclavos o gestionados en dominio.
2.1 Agregar usuarios.
Lo primero es crear uno o mas usuarios administrativos, aunque se pueden editar los archivos, se recomienda usar las herramientas creadas para ello, en windows son archivos batch(.bat) y en linux shell script (.sh).
Comandos de Wildfly
En la carpeta “bin” están los comandos para gestionar el servidor.
./add-user.sh
Dejar en blanco para los grupos inicialmente.Contestar yes para terminar de agregar el usuario.
3. Iniciar
Para iniciar el servidor la forma mas común es “standalone” la otra opción es via “dominio”, esta es para cundo tengamos un cluster de servidores.
./standalone.sh
Listo, ya tenemos iniciado el servidor sirviendo las aplicaciones en el puerto 8080, y la consola administrativa en el 9990, con esto ya podemos instalar las aplicaciones web que sea necesario sea archivo WAR o EAR.
Para entrar a la consola administrativa usa el siguiente link:
Omar es Java Senior Developer full Stack, consultor independiente. Developer Advocate, amante a la tecnología JVM con mas de 16 años de experiencia, colaborador de las distribuciones Linux: Fedora y Gentoo, ademas de otras aplicaciones libres. También es promotor y colaborador del proyecto de robótica educativa ICARO. Lider de proyecto y gestión de equipos. Conferencista, entrenador y consultor internacional. Actualmente Líder del Grupo de Usuarios Java de Nicaragua.
Puedes contratarlo para capacitaciones en tu empresa, desarrollo de software a medida, contraparte en entrega de software o consultor de seguridad.
Eclipse actualmente es IDE (entorno de desarrollo integrado) preferido por los desarrolladores de Java, pero aquí le ofrecemos otro sabor para degustar: NetBeans. Es un IDE libre y gratuito, desarrollado principalmente para el lenguaje de programación Java, aunque también tiene soporte para otros lenguajes de desarrollo como PHP, C/C++, HTML5. Además, cuenta con numerosos módulos que le ayudan a extender sus capacidades. ¿Quieres saber más?
Instalación.
Desde repositorio.
NetBeans se puede instalar directamente desde el repositorio de Debian con las siguientes sentencias:
sudo apt update #actualizar tabla de paquetes
sudo apt upgrade #actualizar sistema
sudo apt install netbeans #Instala netbeans con sus dependencias.
Debian se caracteriza por ser un sistema muy estable, esto lleva a que sus paquetes no estén en su versión más reciente, pero podemos optar por instalar NetBeans directamente de los desarrolladores descargando el instalador de la pagina oficial.
Desde los desarrolladores.
Primer paso:
Para descargar NetBeans 11 de la página oficial podemos pulsar este enlace o bien podemos descargarlo utilizando la siguiente sentencia desde la terminal del gestor de escritorio que usted esté utilizando.
Descomprimir el archivo descargado del sitio oficial de los desarrolladores. Puedes hacerlo ejecutando la siguiente sentencia desde la terminal:
unzip incubating-netbeans-11.0-bin.zip
Tercer paso:
La carpeta (netbeans) que se descomprimió del incubating-netbeans-11.0-bin.zip,por ser un paquete agregado al sistema desde una fuente de terceros, debe estar en la carpeta /opt (¿Quieres saber más?). Por lo anterior, procedemos a mover la carpeta netbeans al directorio /opt, utilizando la siguiente sentencia desde la terminal:
sudo mv netbeans /opt/
Es recomendable que la carpeta /opt, esté en una partición diferente de la carpeta raíz (/), ya que si haces cambios en el sistema no tendrá que volver instalar NetBeans.
Cuarto paso:
NetBeans requiere del Java Development Kit para que podamos ejecutarlo. La versión que instalamos soporta el OpenJDK 11, el cual viene por defecto en Debian buster.
Procedemos a instalar el OpenJDK 11 desde el repositorio de Debian, ejecutando la siguiente sentencia desde una terminal:
sudo apt update #actualizar tabla de paquetes
sudo apt upgrade #actualizar sistema
sudo apt install default-jdk #Instala java jdk 11 con sus dependencias.
Comprobamos que la versión de Java que se nos instaló sea la versión 11 utilizando la siguiente sentencia desde la terminal:
java --version
openjdk 11.0.4-ea 2019-07-16
OpenJDK Runtime Environment (build 11.0.4-ea+10-post-Debian-1)
OpenJDK 64-Bit Server VM (build 11.0.4-ea+10-post-Debian-1, mixed mode)
Una vez que instalamos y comprobamos la versión correcta de JDK, podemos iniciar NetBeans desde una terminal con la siguiente sentencia:
/opt/netbeans/bin/netbeans
Después de ejecutar la sentencia veremos las siguientes pantallas.
Agregaremos la ubicación del directorio netbeans a nuestro $PATH para que podamos iniciar el programa sin especificar la ruta absoluta al archivo binario. Modificando con el editor de texto de su preferencia, el archivo ~/.bashrc para el intérprete de órdenes bash (¿Quieres saber más?) el archivo ~/.zshrc para intérprete de órdenes zsh (¿Quiere saber más?), agregamos la siguiente línea al final del archivo y guardamos el cambio.
export PATH=”$PATH: /opt/netbeans/bin”
Reiniciamos el intérprete de órdenes que estemos utilizando, con la siguiente sentencia.
source ~/.bashrc #para el interprete bash
O
source ~/.zshrc #para el interprete zsh
Ahora ya podemos ejecutar NetBeans desde la terminal sin tener que digitar la ruta donde se encuentra el binario. Sin embargo, puede resultar poco productivo abrir una terminal para ejecutar NetBeans si contamos con un menú lanzador de aplicaciones. Por lo tanto, agregaremos al menú lanzador de aplicaciones un lanzador para que ejecute NetBeans:
Creamos el archivo /usr/share/applications/netbeans.desktop utilizando nuestro de editor de texto preferido. En el ejemplo utilizo el editor de texto nano de la siguiente manera:
Ahora ya tenemos NetBeans instalado y configurado para ejecutar desde el menú lanzador, en el cual veremos algo así.
Quinto paso [Configuración opcional de Netbeans]:
Para hacer ajustes en NetBeans, tenemos que modificar con nuestro editor de texto preferido el archivo /opt/netbeans/netbeans.conf. Aunque con la configuración que viene con la instalación NetBeans trabaja bien, procuro siempre agregar tres opciones que ayudan a minimizar el tiempo de arranque y dar mejor rendimiento cuando estás trabajando con varios proyectos.
-J-Xms1024m -J-Xmx2048m -J-Xverify:none
Estas opciones se deben agregar a la configuración netbeans_default_options, que se encuentra en el archivo /opt/netbeans/netbeans.conf.
sudo nano /opt/netbeans/netbeans.conf
Agregamos las opciones y guardamos, lo opción de configuración, netbeans_default_options, nos quedaría así:
El IDE de Java por excelencia en el mundo del software libre ha sido y sigue siendo Eclipse. Aunque parezca sencillo, instalar Eclipse en Fedora puede ser algo difícil para algunas personas al principio. A continuación te explico cómo hacerlo.
Nosotros y terceros seleccionados utilizamos cookies o tecnologías similares con fines técnicos y, con su consentimiento, para otras finalidades (“interacciones y funcionalidades básicas”, “mejora de la experiencia”, “medición” y “segmentación y publicidad”) según se especifica en la política de cookies.
Usted es libre de otorgar, denegar o revocar su consentimiento en cualquier momento.
Configurar y más información