Mostrando las entradas con la etiqueta Integración de JSF y JPA. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Integración de JSF y JPA. Mostrar todas las entradas

09 septiembre, 2020

Crear un CRUD Java Web en NetBeans usando JPA, EJB, JSF y Primefaces

Herramientas

NetBeans IDE 8.0.2

GlassFish Server 4.1


Pasos

1. Creamos la siguiente base de datos


2. Creamos el Pool de Conexiones en el mismo GlassFish

Ir al post

3. Creamos un proyecto web, para ello vamos a la opción File/New/Java Web/Web Application.



Seleccionamos el servidor GlassFish que es en donde tenemos creado el pool de conexiones. (Ir al post para saber como crear un pool de conexiones en el mismo GlassFish)


Agregamos el framework para trabajar con JSF.


Y en componentes agregamos Primefaces (Por defecto no agrega la versión 5 de Primefaces, si queremos utilizar la última versión, debemos descargar el jar para Primefaces 7 y y agregarlo)



4. Creamos una unidad de persistencia

Clic derecho en el proyecto New/Other, en la ventana que aparece debemos buscar la categoría persistence y dentro el tipo archivo Persistence Unit.



Damos en Next y en la opción Data Source seleccionamos el Data Source que creamos en el servidor.


Finalizamos y ya tenemos creado nuestra unidad de persistencia


5. En Source Package creamos los siguientes paquetes


6. Creamos las entidades, para ello, podemos crear las entidades de manera manual creando clase y agregandole las anotaciones de JPA o podemos generar las entidades a partir de una base de datos.


Maestro

Materia

Registro


7. Creamos los EJB, para ello, nos vamos a la carpeta ejb clic derecho New/Other. Buscamos la categoría Persistence y seleccionamos el tipo de archivo Session Bean For Entity Classes.




AbstractFacade

MaestroFacadeLocal

MaestroFacade

MateriaFacadeLocal

MateriaFacade

RegistroFacadeLocal

RegistroFacade


8. En el paquete controller creamos los ManagedBean, por cada entidad debería haber un Managed Bean.

MaestroBean

MaterialBean

RegistroBean

 

9. Creamos la vista

index.xhtml



09 abril, 2020

Crear un proyecto JPA Java Web usando Hibernate en Eclipse (Maven)

En este post aprenderemos a crear un proyecto JPA Java Web usando Hibernate como implementación de JPA y Maven, que es una herramienta de software para la gestión y construcción de proyectos.

¿Qué es JPA?

Java Persistence API es una especificación de persistencia para la plataforma JAVA que aplica el Mapeo Relacional Objeto  (ORM: Object-Relational Mapping) permitiendo interactuar con bases de datos relacionales sin perder las ventajas de la orientación a objetos. Esto permite construir  aplicaciones  completamente orientadas a objetos. Algunas de las implementaciones mas conocidas de JPA son: Hibernate, TopLink, OpenJPA, EclipseLink.

¿Qué es Hibernate?

Hibernate es una herramienta de mapeo objeto-relacional (ORM) para Java, que facilita el mapeo de atributos en una base de datos tradicional, y el modelo de objetos de un aplicación mediante archivos declarativos o anotaciones en los beans de las entidades que permiten establecer estas relaciones.

¿Qué es Maven?

Normalmente cuando trabajamos con Java/JavaEE el uso de librerías es algo común como en cualquier otro lenguaje de programación. Sin embargo, una librería puede depender de otras librerías para funcionar de forma correcta. Por ende, su gestión se puede volver tedioso a la hora de buscar las librerías y ver que versión exacta debemos de elegir. Así pues necesitamos más información para gestionarlo todo de forma correcta  y para ellos existe MAVEN, que es una herramienta que nos va a permitir tener una gestión correcta de nuestra librerías, proyectos y dependencias. Dentro de un proyecto Maven el archivo pom.xml (Proyect Object Model) es el de mayor importancia ya que contiene toda la información del artefacto que usará nuestro proyecto. Un Artefacto puede verse como una librería con esteroides (aunque agrupa mas conceptos). Contiene las clases propias de la librería pero ademas incluye toda la información necesaria para su correcta gestión (grupo, versión, dependencias etc).

PASOS

1. Crear un Maven Project

Clic en File/New/Maven Project.


Seleccionamos el arquetipo "maven-archetypes-webapp" de "org.apache.maven.archetypes".


Group Id: identifica de forma exclusiva su proyecto en todos los proyectos. Una ID de grupo debe seguir las reglas de nombre de paquete de Java . Esto significa que comienza con un nombre de dominio invertido que controlas. Por ejemplo, org.apache.maven, org.apache.commons.

Artifact Id: es el nombre del jar sin versión. Si lo creó, puede elegir el nombre que desee con letras minúsculas y sin símbolos extraños. Si se trata de un jar de un tercero, debe tomar el nombre del jar tal como está distribuido.

Versión: si distribuye, entonces usted puede elegir cualquier versión típica con números y puntos (1.0, 1.1, 1.0.1, ...). No use fechas, ya que generalmente están asociadas con compilaciones SNAPSHOT (todas las noches). Si se trata de un artefacto de un tercero, debe usar su número de versión, sea lo que sea, y por extraño que parezca. Por ejemplo, 2.0, 2.0.1, 1.3.1.


Clic en "Finish" y tendremos la siguiente estructura


El error que no muestra va a desaparecer cuando agreguemos las dependencias.

2. Agregar las dependencias para este proyecto

Abrimos el archivo "pom.xml" y agregamos las siguientes dependencias:

javax.servlet-api: para trabajar con serlvets (hace que desaparezca el error anterior).
mysql-connector-java: driver de conexión mysql.
hibernate-core: para trabajar con hibernate.

No olvidemos que tenemos que cambiar la versión de Java de 1.7 a 1.8.

Guardamos los cambios y podemos observar que dentro del directorio Maven Dependencies se han descargados todas las librerías. Si no les descarga las librerías de manera automática, debemos hacer clic derecho al proyecto y seleccionar la opción Maven/Update Project...


Pero podemos notar que aún nos marca algunos errores y eso es debido a que todavia falta algunas configuraciones.

3. Actualizar la versión del Servlet

Actualmente nuestro proyecto se ha creado con la versión 2.1 de servlet y debemos cambiarlo a la versión 3.1. Para realizar ello, debemos ir a la pestaña Windows/Show View/Navigator.


En esta nueva perspectiva, seleccionamos nuestro proyecto y navegamos hasta la parte de settings, dentro de esta carpeta seleccionamos el archivo "org.eclipse.wst.common.project.facet.core,xml" y cambiamos la versión de la etiqueta jst.web de 2.3 a 3.1.


Debe quedar de la siguiente manera:
 <installed facet="jst.web" version="3.1"/>

Guaramos los cambios y ahora debemos de cambiar la versión del descriptor de despliegue web.xml que se encuentra alojado dentro de la carpeta src/webapp/WEB-INF.

Como se puede observar en la imagen, dicho archivo ha sido creado con la versión 2.3, debemos de cambiarlo a la versión 3.1.


Para ello vamos a reemplazar el código anterior por el siguiente:




¿Para que sirve agregar /faces/ en el web.xml? (ver respuesta)

Cada aplicación JSF incluye un servlet javax.faces.webapp.FacesServlet para gestionar el proceso de todo el ciclo de vida de una petición dirigida a dicha aplicación. Esto significa que una aplicación JSF se parece a cualquier otra aplicación servlet/JSP: tiene páginas JSP, etiquetas personalizadas que proporcionan los componentes de la interfaz gráfica, recursos estáticos, JavaBeans para almacenar
los datos introducidos por el usuario, un descriptor de despliegue, etc. Para que la petición sea dirigida al servlet FacesServlet, tenemos que describir este en las etiquetas servlet y servlet-mapping del fichero de configuración web. xml.

Volvemos a la pestaña del Explorador de Proyecto, hacemos clic derecho a nuestro proyecto y seleccionamos la opción Maven/Update Project..., y desaparecerán los errores.


4. Crear página xhtml

Eliminamos el archivo index.jsp que esta dentro de src/main/webapp y en esa misma ruta creamos el archivo index.xhtml.

Para crear este archivo con esa extensión, hacemos clic derecho en la carpeta webapp y seleccionamos la opción New/HTML File. En la venta que se muestra escribimos el nombre del archivo y damos clic en siguiente.


En la siguiente ventana selecionaremos la plantilla que diga New HTML File (1.0 transitional) y damos clic en Finalizar.


5. Aparecer directorio ocultos de Java

Clic derecho al proyecto y seleccionamos la opción /Build Path/Configure Build Path...

En la venta que se abre marcamos la casilla Maven Dependencies y hacemos clic en Aplicar.




Y hasta aquí ya tenemos nuestro proyecto listo para probar hasta este punto. Clic derecho al proyecto y seleccionar la opción Run As/ Run on Server.



6. Crear la base de datos

Abrir el MySQL Workbench y ejecutar el siguiente script:



7. Crear el archivo persistence.xml

Clic derecho al proyecto y seleccionamos la opción New/Folder.

Dentro del proyecto seleccionamos la ubicación src/main/java y creamos el folder llamado META-INF


Ahora damos clic derecho en la carpeta META-INF y seleccionamos la opción  New/Other/XML File. 


Dentro de esta carpeta crearemos el archivo persistence.xml y copiamos el siguiente código.


El código "?useTimezone=true&amp;serverTimezone=UTC" es adicional. Si no colocaba esta instrucción me iba a saltar el error "Client does not support authentication protocol requested by server; consider upgrading MySQL client".

8. Crear el modelo

Crear la clase Cliente.java dentro del paquete com.aprendec.model.

⧭ ORM es una técnica para convertir datos entre el sistema utilizado en lenguaje de POO y el utilizado en una Base de Datos Relacional. Como resultado de aplicar esta técnica, el programador podrá codificar en Java como si interactuará virtualmente con una Base de Datos Orientada a Objetos, cuya base es una Base de Datos Relacional, permitiendo así aprovechar todas las características de la programación Orientada a Objetos al interactuar con una Base de Datos Relacional.

⧭ Una instancia de una clase Entidad representará una fila de una Tabla relacional.

⧭ En el caso de JPA, tenemos 2 posibilidades de aplicar ORM
  1. Utilizando el archivo de configuración orm.xml 
  2. Utilizando @Anotaciones 
En el post nosotros aplicaremos @Anotaciones.  El uso de las anotaciones requiere que se importe el paquete “javax.persistence.*” dentro de la clase Java que representa a la Entidad.

Aplicando ORM a la Clase “Cliente”.

@Entity: Significa que esta clase entidad representa una tabla de datos relacional
@Table: es la tabla que representa esta clase entidad.
@id: sirve para indicar el atributo que representa la PK de la tabla.
@column: sirve para indicar que el atributo es una columna, en este caso no es necesario ya que los atributos de la clase tienen el mismo nombre que las columnas de la tabla relacional.



9. Invocar a la unidad de persistencia

Crearemos las clases en donde se implementarán las funcionalidades de acceso a base de datos y operaciones CRUD con las tablas relacionales.

Crear la clase JPAUtil.java dentro del paquete com.aprendec.model para que haga el llamado a la unidad de persistencia definida en el archivo persistence.xml, de tal manera que podamos instanciar a este archivo y podamos tener contacto con la base de datos.


Crear la clase ClienteDAO.java dentro del paquete com.aprendec.daopara crear las operaciones CRUD.


Donde: 

Método listar:

- em.getResultList(): obtiene la lista de entidades, en base al JPQL definido.

Método insertar:

- em.persist(entidadEmpleado): genera un insert a la tabla relacional mapeada con los datos del objeto.

Método actualizar:

- em.merge(entidadEmpleado): genera un update a la tabla relacional mapeada con los datos del objeto.

Método eliminar: 

Para eliminar una entidad en JPA, primero debe colocarse en estado “managed”, es decir, debe cargarse al contexto de persistencia. Para ello primero debe realizarse una búsqueda.

 - em.find(ClaseEntidad.class, valorLlavePrimaria): realiza una búsqueda por llave primaria en la tabla que representa la Clase Entidad.

 - em.remove(entidadEmpleado): genera un delete a la tabla relacional mapeada con los datos del objeto.

IMPORTANTE: Asegúrense que los objetos “entidad” fueron cargados con todos los valores necesarios en sus atributos antes de ejecutar las transacciones, de lo contrario puede dar error al momento de ejecutarlas.


10. Crear el Managed Bean


💁 Un "Manged Bean" es una clase java que representa información de un formulario web y existe dos maneras de configurarlos:

➢ Usando anotaciones dentro del programa Java. Es la forma más recomendada pues permite un código más cohesionado y fácil de mantener. Se emplea la anotación @ManagedBean antes de la definición de la clase (desde JSF 2.0).
➢ Usando XML dentro del archivo faces-config.xml. Se emplea el tag <managed-bean> para efectuar la declaración.

💁 Un “managed Bean” tipicamente tiene 3 partes:

  1. Las propiedades del Bean: generalmente un getter y un setter por cada atributo. Los métodos setter son invocados automáticamente por el JSF cuando el formulario web es enviado.
  2. Métodos para controlar acciones: Generalmente es sólo un método, pero podrían ser varios si es que el formulario posee múltiples botones de envío.
  3. Un lugar para los datos resultantes: No es invocado automáticamente por JSF. Debe ser llenado por el método controlador en base a los resultados de la lógica de negocio.
Creamos la clase ClienteBean.java dentro del paquete com,aprendec.controller.



11. Crear las páginas xhtml

Creamos las siguientes paginas: crear.xhtml, listar.xhtml, editar.xhtml dentro de la carpeta src/webapp/main que vendría hacer el WebContent de nuestro proyecto.

💁 La construcción de páginas se realiza con “Facelets XHTML” empleando para ello “tag libraries”.

➢ Se puede declarar las librerías usando “XML namespaces”:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

➢ o usando la forma tradicional:
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

. inicio.xhtml



. nuevo.xhtml



. editar.xhtml



12. Probar la aplicación


13. Estructura Final



Descargar archivo

20 septiembre, 2018

Desarrollo de Aplicaciones Web II (Java)

LOGRO PRINCIPAL

En este cursos aprenderemos a desarrollar aplicaciones webs en N-CAPAS utilizando los patrones de diseño JEE, el estilo arquitectónico MVC y las funcionalidades provistas por los framework JSF (Java Server Faces) a nivel de vista-controlador y por JPA (Java Persistence API) a nivel de persistencia. 

Este pequeño curso estará divido en dos partes, En la primera parte, aprenderemos a configurar y utilizar el framework JPA mediante el desarrollo de aplicaciones Stand.Alone. En la segunda parte, aprenderemos  a utilizar el framework JSF para desarrollar aplicaciones web. Por último, integraremos las funcionalidades de ambos frameworks en una aplicación final.

Sin mas, trataré de explicar de una manera rápida y sencilla algunos conceptos que sean necesarios sin extender demasiado el post y al finalizar cada publicación dejaré el link del proyecto finalizado para que puedan ser descargado.

Herramientas Utilizadas (Opcional):

Eclipse Java EE IDE for Web Developers
Apache Tomcat 7.0.22
JSF 2.0 (Mojarra 2.0.3)
EclipseLink 2.3.3 - Indigo


Primera Parte

Introducción a JPA


Java Persistence API es una especificación de persistencia para la plataforma JAVA que aplica el Mapeo Relacional Objeto  (ORM: Object-Relational Mapping) permitiendo interactuar con bases de datos relacionales sin perder las ventajas de la orientación a objetos. Esto permite construir  aplicaciones  completamente orientadas a objetos.


Persistencia de objetos

La persistencia permite respaldar en una fuente de datos el estado de un objeto, representado por los valores de sus atributos en un determinado momento.

Entidad

Es un objeto que tiene atributos y relaciones con otras entidades y debe cumplir con las siguientes características: debe ser persistente, debe tener granularidad (bajar de nivel, país, departamento, distrito, ...),  debe tener identidad (tener un identificador único) y debe tener transaccionalidad (las operaciones de insertar, eliminar, actualizar deben realizarse en un contexto transaccional para ser grabados en una base de datos). 

Una entidad está descrita por Metadata (Anotaciones ó XML). Las anotaciones de JPA se clasifican en dos categorías (no se almacena en base de datos).


Persistence Unit

Contiene la configuración implícita o explícita (con un nombre asociado) para las entidades y para el Entity Manager.

EntityManagerFactory

Genera una especie de plantilla para la persistencia, tomando la configuración particular desde una unidad de persistencia


EntityManager

Es la que ejecuta todo el trabajo de persistencia. Por tanto, una entidad mientras que no se trabaje con el Entity Manager es un objeto Java simple como cualquier otro. Cuando el Entity manager obtiene una referencia a una entidad, se dice que dicha entidad está en estado “managed”. Los Entity Managers son configurados para trabajar con determinados tipos de objetos, bases de datos y son implementados por un proveedor (provider) conocido
como “persistence provider”. En términos prácticos este provider es la implementación de la especificación JPA. Los Entity Managers se generan a partir de una factoría de tipo EntityManagerFactory,

Persistence Context

Es el conjunto de entidades en estado managed o gestionadas dentro de un Entity Manager.

Lenguaje Nativo

JPQL (Java Persistence Query Languaje

El siguiente diagrama muestra la relación entre los componentes principales de la arquitectura de JPA:


Implementaciones

Algunas de las implementaciones mas conocidas de JPA son: Hibernate, TopLink, OpenJPA, EclipseLink.

Si quiere comparar las implementaciones de JPA: Toplink, EclipseLink, Hibernate y OpenJPA, aquí te dejo un link: http://terrazadearavaca.blogspot.com/2008/12/comparativa-de-implementaciones-de-jpa.html

Publicaciones:

➣ Sesión01 - (JPA) Introducción al framework de persistencia JPA
➣ Sesión02 - (JPA) Gestión de la capa de persistencia
➣ Sesión03 - (JPA) Relación entre entidades

Segunda Parte

Introducción a JSF

Java Server Faces (JSF) es el estándar “oficial” en la capa web para la plataforma Java EE. JSF incluye un conjunto de componentes predefinidos para la interfaz gráfica web (UI), un modelo de programación basado en eventos y la habilidad para añadir componentes desarrollados por terceros. En resumen toma los mejores elementos de los frameworks que le precedieron (CGI, Servlet, JSP, Struts, Spring MVC) y los combina en un conjunto de API’s estándares para el desarrollo de interfaces de usuario. Al ser JSF una especificación, se pueden encontrar implementaciones de diferentes fabricantes, lo cual permite no vincularse con ningún proveedor en particular y tener la total libertad de seleccionar aquel que más se acomode a nuestras necesidades.

Algunas implementaciones de JSF son:

Proyecto Mojarra (La implementación de referencia de SUN Microsystems ahora propiedad de Oracle Corp).

Oracle ADF Faces, extiende la funcionalidad de JSF proporcionando muchas funcionalidades Ajax.

MyFaces, proyecto de Apache Software Foundation, para mantener una implementación abierta de JavaServer Faces JSF, por medio del desarrollo de bibliotecas y componentes.

Rich Faces, alojado por Jboss (Grupo RedHat), agrega componentes visuales y soporte para AJAX: 

ICE Faces, contiene diversos componentes para interfaces de usuarios más enriquecidas, tales como editores de texto enriquecidos, reproductores de multimedia, entre otros.

PrimeFaces, es una librería muy liviana, todas las decisiones hechas son basadas en mantener a PrimeFaces lo más liviano posible, muy simple que no necesita dependencias y configuraciones.

OpenFaces, es un librería open source que contiene diferentes componentes JSF, un Framework Ajax y un Framework de validación por parte del cliente.

jQuery4jsf, contiene componentes basados en el Framework JavaScript jQuery. Es un proyecto alojado por Google Code:

Publicaciones: