Java EE 8. Componentes de la capa de datos, entitys, dao e interfaces

Crear entitys de las tablas

Primero se debe verificar en la ventana Data Source Explorer que la conexión a las Base de Datos esta activa.

Coneccion activa

Clic derecho sobre el proyecto -> New -> Other… -> JPA -> JPA Entities from Tables.

JPA Entities from Tables

Seleccionar la conexión, el esquema y las tablas. También debemos asegurarnos que la opción List generated classes in persistence.xml este habilitado. En nuestro caso seleccionamos las tablas Logins_users y Users y clic en Next >.

Seleccionar tablas

Muestra la relaciones entre las tablas. Clic en Next.

Relaciones entre las tablas

En el campo Package: de la sección Domain java class elegimos el paquete donde se generaran los entitys. en nuestro caso com.aor.test.entity. Clic en Next >.

Seleccionar paquete

Aquí podemos editar cualquier campo de la tabla de forma individual desplegando la tabla y seleccionando el campo.

editar de forma individual

Lo recomendable es dejar todo como esta y clic en Finish.

Editar de forma individual

Nos vamos al paquete de com.aor.test.entity y podemos ver las clases entity que se generaron.

Entity generados


 

Descripción de entity

Los entity son JavaBean con anotaciones

  1. @Entity. Anotación que indica que es un entity
  2. @Table(name=»Users»). Anotación que indica que hace referencia a la tabla correspondiente.
  3. @NamedQuery(name=»User.findAll», query=»SELECT u FROM User u»). Anotación que muestra los querys que podemos utilizar en la aplicación.
  4. @OneToMany(mappedBy=»user»). Anotación que indica las relaciones con otras tablas.
  5. Cuenta con los métodos get y set como un JavaBean.

entity


 

Crear interfaces

Clic derecho sobre el paquete com.aor.test.entityinterface  -> New -> Interface. Escribir en el campo Name: IDaoLogins_user. Clic en Finish.

Crear interface

Abrimos la interfaz y escribimos todos los métodos que vamos a ocupar sobre la tabla. Los más comunes son: insert, update, delete.  Para el caso de los select es más recomendable poner una descripción más precisa por ejemplo, logins_userFindAll, el cual indica que obtenemos todos los datos de la tabla logins_user. Siempre ponemos primero el nombre de la tabla en minúsculas y posteriormente la acción. Otro ejemplo, logins_userById significa que queremos obtener los registros de la tabla logins_user por el campo id.

Tecleamos los métodos de la interfaz.

public boolean insert(EntityManager em,Logins_user logins_user) throws Exception;
public boolean update(EntityManager em,Logins_user logins_user) throws Exception;
public boolean delete(EntityManager em,Logins_user logins_user) throws Exception;
public List<Logins_user> logins_userFindAll(EntityManager em) throws Exception;
  • EntityManager em, es parte de la API de JPA para gestionar los entitys.
  • Logins_user logins_user, entity correspondiente.
  • logins_userFindAll. Regresa un lista de Logins_user.

El resultado será.

Metodos de la interfaz

Creamos la interfaz para users.

  • Nombre de la interfaz: IDaoUser
  • Métodos:
    public boolean insert(EntityManager em,User user) throws Exception;
    public boolean update(EntityManager em,User user) throws Exception;
    public boolean delete(EntityManager em,User user) throws Exception;
    public List<User> userfindAll(EntityManager em) throws Exception;
    

El resultado será:

metodo de la interfaz de user


 

Crear DAO

Son la implementación de la interfaz.

Clic derecho sobre el paquete com.aor.test.dao -> New -> Class. Escribir en el campo Name: DaoLogins_user. Clic en Add…, seleccionar la interfaz IDaoLogins_user y Clic en Finish.

implementar interfaz Logins_user

Tecleamos los métodos de la clase.

        @Override
	public boolean insert(EntityManager em, Logins_user logins_user) throws Exception {
		em.persist(logins_user);
		return true;
	}

	@Override
	public boolean update(EntityManager em, Logins_user logins_user) throws Exception {
		em.merge(logins_user);
		return true;
	}

	@Override
	public boolean delete(EntityManager em, Logins_user logins_user) throws Exception {
		em.remove(logins_user);
		return true;
	}

	@Override
	public List<Logins_user> logins_userFindAll(EntityManager em) throws Exception {
		TypedQuery<Logins_user> query = em.createNamedQuery("Logins_user.findAll", Logins_user.class);
		List<Logins_user> logins_user = query.getResultList();
		return logins_user;
	}
  • persist, merge, remove y createNamedQuery son métodos que proporciona la API de JPA.
  • El método createNamedQuery toma como parámetro el nombre de la anotación @NamedQuery del entity User.

El resultado será.

metodo de la clase

Creamos la clase para users.

  • Nombre de la clase: DaoUser
  • Métodos:
    	@Override
    	public boolean insert(EntityManager em, User user) throws Exception {
    		em.persist(user);
    		return true;
    	}
    	@Override
    	public boolean update(EntityManager em, User user) throws Exception {
    		em.merge(user);
    		return true;
    	}
    	@Override
    	public boolean delete(EntityManager em, User user) throws Exception {
    		em.remove(user);
    		return true;
    	}
    	@Override
    	public List<User> userfindAll(EntityManager em) throws Exception {
    		TypedQuery<User> query = em.createNamedQuery("User.findAll", User.class);
    		List<User> user = query.getResultList();
    		return user;
    	}
    

El resultado será:

Metodos de la clase

 


Resultado final

Finalmente tenemos para user y logins_user los entity, interfaz de entity, dao e interfaz de dao.

finalmente

 

Java EE 7. Crear estructura del proyecto

Vamos a crear la estructura del proyecto en Eclipse para que cumpla con las capas que propone la arquitectura JEE de java.

Crear paquetes

Para crear los paquetes en el proyecto, nos posicionamos en appWeb -> Java Resources -> src/main/java, clic con el botón derecho del mouse ->New -> Package. Escribir Name: y clic en Finish.

new package

Los nombres de los paquetes deben estar en minúsculas.

Crear carpetas

Para crear las carpetas en el proyecto, nos posicionamos en appWeb -> src -> main -> webapp. clic con el botón derecho del mouse ->New -> Folder. Escribir Folder name: y clic en Finish.

Crear Folder


Capa de datos

Parte del back-end

Paquete com.aor.test.entity

  1. Modela las tablas de la Base de Datos en objetos Java.
  2. Contiene todos los entity de las tablas.
  3. Apoyo para el API jpa.

Paquete com.aor.test.entityinterface

  1. Expone los métodos para la comunicación con otras capas.
  2. Cada una de las capas solo se debe de comunicar por interfaces.

Paquete com.aor.test.dao

  1. Todos los métodos para persistir la información.
  2. Toda interacción con la Base de Datos.
  3. Interactúan directamente con los entitys..

Paquete com.aor.test.daointerface

  1. Expone los métodos para la comunicación con otras capas.
  2. Cada una de las capas solo se debe de comunicar por interfaces.

Capa de negocio

Parte del back-end

Paquete com.aor.test.ejb

  1. Se agrega toda la lógica de negocio.
  2. Todos los métodos transaccionales.

Paquete com.aor.test.ejbinterface

  1. Expone los métodos para la comunicación con otras capas.
  2. Cada una de las capas solo se debe de comunicar por interfaces.

Capa de dominio

Parte del back-end

Paquete com.aor.test.jb

  1. JavaBean
  2. Se ocupa para enviar objetos hacia las vistas
  3. Modela una tabla para enviarla a la capa de presentación, por que los entitys son exclusivos para la capa de datos. Esto para evitar problemas de seguridad.

Capa de otros

Parte del back-end

Paquete com.aor.test.appWeb

  1. Tiene el nombre de la aplicación.
  2. Se ocupa para métodos auxiliares o genéricos que se ocuparan en toda la aplicación.
  3. Por ejemplo la encriptación de la contraseña de los usuarios.

Capa de presentación

A excepción del paquete de servlet que es parte del back-end, las carpetas son parte del front-end.

Paquete com.aor.test.servlet

  1. Es el controller
  2. Solo envían y reciben información.
  3. No debe haber ninguna lógica de negocio.

Carpeta por cada tabla de la Base de Datos

  1. El nombre de la carpeta es igual al nombre de la tabla en minúsculas.
  2. Por cada tabla crear una carpeta
  3. En nuestro caso crearíamos las carpetas users y logins_users.
  4. En estas agregaremos todas las acciones, por ejemplo insert, update, delete y select.

Carpeta js/controllers

  1. Para cumplir con el MVC.
  2. Acciones sobre el formulario.
  3. Todos los eventos relacionados con el formulario.

Carpeta js/models

  1. Para cumplir con el MVC.
  2. Modelan un formulario.
  3. Es una analogía de un JavaBean.

Carpeta css

  1. Hojas de estilos particulares.

Carpeta img

  1. Cualquier imagen que se utilice en la aplicación.

Carpeta library

  1. Plug-ins, librerías externas o framework para la vista. Por ejemplo bootstrap.

Resultado

El resultado final es.

Para los paquetes:

Paquetes

Para las carpetas:

Carpetas


NOTAS

  1. La capa de presentación es el conjunto de Servlet’s y JSP’s.
  2. La arquitectura de JEE propone JavaServer Faces, pero tiene los siguiente inconvenientes:
    1. Se pierden las ventajas del HTML5.
    2. El diseñador no puede trabajar de forma paralela, ya que es código del lado del servidor.
    3. No es posible enfocarse cada quien en una capa.
    4. Por esta razón se propone trabajar con Servlet’s y JSP’s.
  3. En el caso de que se necesitara agregar servicios para ser consumidos por otros sistemas, se puede agregar una nueva capa de servicios por encima de la capa EJB. La capa de servicios interactuara con la capa de EJB. Este caso se vera posteriormente.