Cómo Crear un Proyecto JSF 3 con JEE 9 Paso a Paso [Guía Completa]
Jakarta Server Faces 3 (antes conocido como JavaServer Faces – 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 3 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.
- Integración : JSF se integra bien con otras especificaciones de Jakarta EE como CDI (inyección de contexto y dependencia) y validación de beans, lo que lo hace ideal para aplicaciones empresariales.
Jakarta EE 9 (una evolución de Java EE) es una plataforma de nivel empresarial para crear e implementar aplicaciones basadas en Java, especialmente en entornos empresariales de gran escala. Jakarta EE proporciona un conjunto de especificaciones que definen las API para crear aplicaciones web, microservicios y sistemas empresariales.
- Soporte para microservicios: Facilita la creación de aplicaciones distribuidas y basadas en microservicios.
- Mejoras en la seguridad: Proporciona opciones de autenticación y autorización más robustas.
- Facilidad de desarrollo: Mejora la productividad del desarrollador a través de herramientas y estándares.
- Arquitectura modular : tiene un enfoque modular, que permite a los desarrolladores elegir los componentes que necesitan.
- API y especificaciones : Jakarta EE incluye una variedad de especificaciones para tecnologías web (Servlet, JSP, etc.), acceso a bases de datos (JPA), mensajería (JMS) y más.
- Compatibilidad y evolución : Jakarta EE es compatible con las herramientas de Java EE existentes, lo que facilita la transición desde Java EE. También adopta tecnologías modernas como la implementación nativa de la nube y los microservicios.
Servidores de Aplicaciones Compatibles
Algunos servidores de aplicaciones que son compatibles con Jakarta Server Faces 3 y Jakarta EE 9 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 9 y Jakarta Server Faces 3, lo que permite desarrollar aplicaciones empresariales modernas utilizando las últimas tecnologías.
Crear Proyecto JSF3 con JEE9
Antes de comenzar, asegúrate de tener instalados los siguientes componentes:
- JDK 11 o superior: Necesario para ejecutar Jakarta EE 9.
- 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 3 y Jakarta EE 9, 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 9 API -->
<!--Entorno empresarial-->
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>9.1.0</version>
<scope>provided</scope>
</dependency>
<!-- Opcional: Si deseas usar una versión específica de JSF puedes agregar esta dependencia -->
<!--Jakarta Server Faces 3.0-->
<dependency>
<groupId>jakarta.faces</groupId>
<artifactId>jakarta.faces-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<!--Inyeccion de dependencia-->
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.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 3 API -->
<dependency>
<groupId>jakarta.faces</groupId>
<artifactId>jakarta.faces-api</artifactId>
<version>3.0.0</version>
</dependency>
<!-- Implementación de JSF (Mojarra) -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.faces</artifactId>
<version>3.0.0</version>
</dependency>
<!-- JSTL (si se usa JSTL en las páginas JSF) -->
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>2.0.0</version>
</dependency>
<!-- Dependencia para JSTL implementación -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
<!-- Servlet API para Tomcat/Jetty -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
<scope>provided</scope>
</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 version = "3.0"
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_3_0.xsd">
</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="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-app_5_0.xsd"
version="5.0">
<!-- 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
:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<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.0 en “src/main/resources/META-INF”
<persistence 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_0.xsd"
version="3.0">
<!-- 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.