Cómo Crear un Proyecto JSF 4 con JEE 10 Paso a Paso [Guía Completa]
Jakarta Server Faces 4 (JSF) es una parte de Jakarta EE que se centra en la creación de interfaces de usuario basadas en componentes para aplicaciones web. Es un marco de interfaz de usuario que sigue el patrón Modelo-Vista-Controlador (MVC), que proporciona componentes reutilizables y beans administrados para gestionar las entradas y salidas del usuario. Algunas características de JSF 4 incluyen:
- Soporte para AJAX: Permite interacciones más dinámicas sin necesidad de recargar toda la página.
- Marco basado en componentes : permite a los desarrolladores utilizar componentes de interfaz de usuario ya preparados (por ejemplo, botones, tablas) o crear otros personalizados.
- Interfaz de usuario declarativa : los desarrolladores pueden definir la interfaz de usuario utilizando páginas XHTML, mientras que la lógica de respaldo está escrita en Java.
- Gestión de estado : JSF gestiona automáticamente el estado de los componentes de la interfaz de usuario, lo que resulta útil para formularios de varios pasos o para mantener datos de sesión.
- Actualización para soportar Jakarta EE 10: Mejoras en la integración con otras especificaciones de Jakarta EE, como Jakarta CDI (Contexts and Dependency Injection) y Jakarta Security.
- Compatibilidad con nuevos estándares web: Soporte mejorado para tecnologías como WebSockets y otros estándares modernos.
- Mejoras en la gestión del ciclo de vida: Se ha mejorado la gestión del ciclo de vida de los componentes y las vistas, lo que permite un rendimiento más eficiente.
- Más simplicidad en la configuración: Las configuraciones son ahora más fáciles y menos intrusivas, con soporte para configuraciones modernas como CDI.
Jakarta EE 10 (una evolución de Java EE) es una plataforma de nivel empresarial para crear e implementar aplicaciones basadas en Java, bajo la administración de la Eclipse Foundation. Después de que Oracle donara Java EE a Eclipse, el proyecto pasó a llamarse Jakarta EE. Esta plataforma ofrece un conjunto de especificaciones para desarrollar aplicaciones empresariales robustas y escalables en Java, como servicios web, APIs para gestionar transacciones, mensajería, persistencia de datos, entre otros.
- Mejoras en la seguridad: Proporciona opciones de autenticación y autorización más robustas.
- Arquitectura modular: tiene un enfoque modular, que permite a los desarrolladores elegir los componentes que necesitan.
- APIs actualizadas: Varias especificaciones fueron actualizadas, incluyendo Jakarta Servlet, Jakarta RESTful Web Services (JAX-RS), y Jakarta Persistence (JPA).
- Soporte mejorado para cloud-native y microservicios: Facilita la construcción de aplicaciones nativas de la nube y arquitecturas basadas en microservicios.
- Simplificación del desarrollo: Muchas APIs se han refinado para hacer el desarrollo más fácil y con menos código repetitivo. Mejora la productividad del desarrollador a través de herramientas y estándares.
- Nuevas especificaciones: Algunas nuevas características fueron introducidas, como Jakarta Core Profile, que está optimizada para microservicios y aplicaciones basadas en la nube.
Servidores de Aplicaciones Compatibles
Algunos servidores de aplicaciones que son compatibles con Jakarta Server Faces 4 y Jakarta EE 10 incluyen:
- Apache TomEE: Una versión de Tomcat que incluye soporte para Jakarta EE.
- WildFly: Anteriormente conocido como JBoss, es un servidor de aplicaciones ligero y flexible.
- GlassFish: El servidor de referencia para Jakarta EE, desarrollado inicialmente por Sun Microsystems.
- Payara Server: Un fork de GlassFish que se enfoca en el soporte y la estabilidad.
- IBM WebSphere Liberty: Un servidor de aplicaciones modular y ligero para Jakarta EE.
- Oracle WebLogic: Un servidor de aplicaciones comercial muy utilizado en entornos empresariales.
Cada uno de estos servidores tiene diferentes características, pero todos brindan soporte para Jakarta EE 10 y Jakarta Server Faces 4, lo que permite desarrollar aplicaciones empresariales modernas utilizando las últimas tecnologías.
Crear Proyecto JSF4 con JEE10
Antes de comenzar, asegúrate de tener instalados los siguientes componentes:
- JDK 11 o superior: Necesario para ejecutar Jakarta EE 10.
- Un servidor de aplicaciones: Como Apache Tomcat, WildFly o GlassFish.
- Un IDE: Recomendamos Eclipse, IntelliJ IDEA o Apache NetBeans para el desarrollo.
Para crear un proyecto web con Java utilizando JSF 4 y Jakarta EE 10, asegurarte de que funcione tanto en servidores de aplicaciones Jakarta EE (como GlassFish, Payara, JBoss, WildFly) como en contenedores de servlets (como Tomcat o Jetty), es necesario ajustar las dependencias en función de los servidores.
Aquí te dejo una guía para crear el proyecto y las dependencias que necesitarías para cada tipo de servidor.
1. Estructura del proyecto maven
El proyecto puede seguir la estructura básica de una aplicación web Java usando Maven. Crea un proyecto Maven con las siguientes configuraciones mínimas:
/my-jsf-app
├── src
│ ├── main
│ │ ├── java
│ │ ├── resources
│ │ └── webapp
│ │ ├── WEB-INF
│ │ │ └── web.xml
│ │ └── index.xhtml
└── pom.xml
2. Configurar el archivo pom.xml
El archivo pom.xml
gestionará las dependencias. Dependiendo del servidor de aplicaciones o contenedor de servlets, deberás incluir diferentes dependencias.
Para servidores de aplicaciones Jakarta EE (GlassFish, Payara, JBoss, WildFly)
En servidores de aplicaciones Jakarta EE completos, no necesitas incluir explícitamente todas las dependencias de Jakarta EE, ya que estos servidores ya las proveen. Simplemente puedes definir la API de Jakarta EE como una dependencia con un «scope» de provided
.
Estos servidores (GlassFish, Payara, WildFly, JBoss) ya incluyen la implementación de JSF, así que las dependencias son mínimas.
<dependencies>
<!-- Jakarta EE 10 API -->
<!--Entorno empresarial-->
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>10.0.0</version>
<scope>provided</scope>
</dependency>
<!-- Opcional: Si deseas usar una versión específica de JSF puedes agregar esta dependencia -->
<!--Jakarta Server Faces 4.0-->
<dependency>
<groupId>jakarta.faces</groupId>
<artifactId>jakarta.faces-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--Inyeccion de dependencia-->
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.2</version>
</dependency>
</dependencies>
Para contenedores de servlets (Tomcat, Jetty, etc.)
En contenedores de servlets como Tomcat y Jetty, es necesario agregar explícitamente las dependencias para JSF, ya que estos servidores no son servidores Jakarta EE completos y no incluyen todas las especificaciones de Jakarta EE (como JSF) de forma predeterminada.
En este caso, debes incluir las implementaciones de JSF, ya que los contenedores de servlets como Tomcat o Jetty no las incluyen.
<dependencies>
<!-- JSF 4 (Jakarta Faces) Implementation -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.faces</artifactId>
<version>4.0.1</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<!-- CDI -->
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JSP -->
<dependency>
<groupId>jakarta.servlet.jsp</groupId>
<artifactId>jakarta.servlet.jsp-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
3. Estructura del proyecto WEB
- Coloca tus archivos JSF (páginas XHTML) en el directorio
src/main/webapp/
. - El archivo de configuración principal de JSF (si es necesario) será
faces-config.xml
, ubicado ensrc/main/webapp/WEB-INF/
.
faces-config.xml
:<faces-config
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-facesconfig_4_0.xsd"
version="4.0">
</faces-config>
Configuración del archivo web.xml
:
El archivo web.xml
será el descriptor de despliegue que conectará tu aplicación con JSF.
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="6.0"
xmlns="https://jakarta.ee/xml/ns/jakartaee"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" >
<!-- Faces Servlet -->
<servlet>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<!-- Welcome file list -->
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
Configuración de la vista/pagina JSF index.xhtml
:
El desarrollo de aplicaciones con Jakarta Server Faces 4.0 viene con unos cambios en la estructura de sus XHTML, anteriormente las especificaciones de sus URL en la estructura html cambiaron de “http://xmlns.jcp.org/jsf/” a “jakarta.faces ” .
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:faces="jakarta.faces"
xmlns:ui="jakarta.faces.facelets"
xmlns:f="jakarta.faces.core"
xmlns:h="jakarta.faces.html"
xmlns:pt="jakarta.faces.passthrough"
xmlns:cc="jakarta.faces.composite"
xmlns:c="jakarta.tags.core"
xmlns:fn="jakarta.tags.functions">
<h:head>
<title>Mi Proyecto JSF 3</title>
</h:head>
<h:body>
<h1>Hola, Mundo!</h1>
</h:body>
</html>
Configuración del persistence.xml
:
Para configurar el motor de base de datos mediante JPA/HIBERNATE se utiliza Jakarta Persistence Api en su version 3.1 en “src/main/resources/META-INF”
<persistence version="3.1" xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_1.xsd">
<!-- Define Persistence Unit -->
<persistence-unit name="CRUD_PU" transaction-type="JTA">
<jta-data-source>java:/CrudJsfDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Este proyecto funcionará tanto en servidores de aplicaciones Jakarta EE completos como en contenedores de servlets al configurar las dependencias correctas para cada entorno.
Tutorial de Configuración
Conclusión
Dependiendo de la plataforma que elijas (Jakarta EE application server o un contenedor de servlets), debes ajustar las dependencias en tu archivo pom.xml
. Los servidores Jakarta EE ya incluyen muchas de las librerías necesarias, mientras que en Tomcat o Jetty debes incluirlas manualmente.
WALTER ROSERO
Creador de Walter Rosero - SuperTecnoDroid | Responsable del Canal de YouTube Walter Rosero. Amante de la tecnología y juegos, me gusta aportar con un granito de arena al aprendizaje y la enseñanza. Soy editor y compositor en el área multimedia. Combino mi pasión por la enseñanza a través de la World Wide Web.
WALTER ROSERO
Hola soy Robinson Rosero, me dedico a crear contenido por medio de la World Wide Web, para ayudar a las personas y así poder desarrollar experiencia con nuevas ideas.