Vamos a realizar un pequeño ejemplo de aplicación JavaSE implementando MVC, utilizando un fichero DAO para separar de manera eficiente la capa de persistencia de la capa de negocio.
Construiremos una sencilla aplicación que consiste en realizar una consulta a una base de datos: suministraremos un login y un password, y se nos retornará el nombre y el email del usuario o un mensaje en caso de no existir el usuario buscado.
El objetivo es mostrar la utilidad de un DAO como intermediario entre persistencia y negocio. Para ello, inicialmente construiremos un proyecto cuya capa de datos será una base de datos mysql. Probaremos y comprobaremos que funciona una consulta a mysql. A continuación, cambiaremos del proyecto la capa de datos, que pasará a ser un fichero .txt que leeremos mediante java.io.*
Definamos inicialmente el objeto userdata:
OBJETO USERDATA
- long id, no puede ser nulo o vacío.
- String login hasta 15 caracteres, no puede ser nulo o vacío.
- String password hasta 15 caracteres, no puede ser nulo o vacío.
- String name hasta 100 caracteres, no puede ser nulo o vacío.
- String email hasta 100 caracteres, no puede ser nulo o vacío.
Estas son las instrucciones sql para crear el schema, la tabla, e insertar un usuario en mysql:
- CREATE SCHEMA `dbPruebas` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
- CREATE TABLE `dbPruebas`.`userdata` ( `id` BIGINT NOT NULL AUTO_INCREMENT , `login` VARCHAR(15) NOT NULL , `password` VARCHAR(15) NOT NULL , `name` VARCHAR(100) NOT NULL , `email` VARCHAR(100) NOT NULL , PRIMARY KEY (`id`) );
- INSERT INTO `dbPruebas`.`userdata` (`login`, `password`, `name`, `email`) VALUES ('pepeuser', '123456', 'Jose user user', 'pepeuser@gmail.com');
Después de ejecutar estas sentencias mysql, tendremos una base de datos llamada "dbPruebas", habremos creado la tabla "userdata" que replica un objeto userdata como el definido anteriormente; además habremos insertado un objeto userdata, es decir, un usuario llamado "Jose user user", con el login "pepeuser", etc.Construcción del proyecto en java
El proyecto se llamará EjemploDAO. Tendrá 3 paquetes, controls, models y views, para implementar el modelo MVC. Ubicaremos en ellos los ficheros correspondientes.De acuerdo con el gráfico superior, y según las especificaciones de nuestro proyecto, tendremos que construir 4 ficheros: la vista (que llamaremos, como el proyecto, EjemploDAO), el managedBean (EjemploBean), el fichero DAO (EjemploBeanDAO) y el entity (Userdata).
Crearemos un proyecto que se llame EjemploDAO. El proyecto será un proyecto java SE. A continuación, crearemos los 3 java package: "controls", "models", "views".
Creación de la vista
Dentro del paquete views ubicaremos nuestro fichero main, el cual, a efectos de simplificar el ejemplo, hará las funciones de la vista mediante el objeto System.out.
Generaremos una consulta al javaBean que controle nuestra aplicación en el mismo fichero de acceso a la aplicación (el cual llamaremos EjemploDAO.java) . Después, imprimiremos el mensaje recibido desde el javaBean.
package views;
public class EjemploDAO {
private static EjemploDAO ejemplo;
public static void main(String[] args) {
String mensaje;
ejemplo=new EjemploDAO();
mensaje=ejemplo.executeQuery("pepeuser","123456");
System.out.println(mensaje);
}
private String executeQuery(String login, String password) {
String respuesta="";
EjemploBean eBean=new EjemploBean();
respuesta=eBean.getUser(login,password);
return respuesta;
}
}
Así pues, nuestra vista consistirá simplemente en un mensaje con el resultado de la consulta.
Creación del javaBean de control
El javaBean de control que llamaremos EjemploBean, será creado en el directorio controls. El objetivo es implementar la capa de negocio de nuestra aplicación.
El javaBean realizará las comprobaciones pertinentes, delegará en el DAO la gestión de la capa de persistencia, y devolverá la consulta. El sistema de acceso delegado incrementa un poco la complejidad pero a cambio mejora la independencia entre las 3 capas de nuestro proyecto.
package controls;
public class EjemploBean {
public EjemploBean() {
}
public String getUser(String login, String password) {
if (login==null || login.isEmpty()) { return "USUARIO ERRÓNEO O NULO"; } if (password==null || password.isEmpty()) { return "PASSWORD ERRÓNEO O NULO"; }
String respuesta;
Userdata user=new Userdata();
EjemploBeanDAO dao=new EjemploBeanDAO();
user=dao.getUserData(login,password);
if (user!=null) {
respuesta="DATOS DEL USUARIO:\n"+"NOMBRE: "+user.getName()+"\n"+"EMAIL: "+user.getEmail();
} else {
respuesta="NO HAY NINGÚN USUARIO CON ESE LOGIN-PASSWORD";
}
return respuesta;
}
}
Creación del entity JPA
Dentro del package models, creamos un entity JPA, que básicamente consiste en añadir las correspondientes anotaciones a un fichero pojo normal.
package models;
@Entity
@Table(name="userdata")
public class Userdata implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private String id;
@Column(name = "email", nullable = false)
private String email;
@Column(name = "login", nullable = false)
private String login;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "password", nullable = false)
private String password;
// AÑADIR LOS GETTERS Y SETTERS
}
Creación del fichero persistence.xml
El fichero persistence.xml es el fichero que se encarga de configurar las conexión y transacciones de datos con la capa de datos, a través de la creación de un EntityManagerFactory:<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="ejemploDAO" transaction-type="RESOURCE_LOCAL">
<class>models.Userdata</class> <properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/dbPruebas"/>
<property name="javax.persistence.jdbc.user" value="root(poner aquí vuestro mysql user)"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.password" value="xxxxxx (poner aquí vuestro mysql password)"/>
</properties>
</persistence-unit>
</persistence>
Creación del interface EjemploBeanInterface
Construiremos un interface para obligar a implementar los métodos que consideremos necesarios. En este caso concreto, solo será un método:
public interface EjemploBeanInterface {
public Userdata getUserData(String login, String password);
}
Creación del DAO EjemploBeanDAO
Finalmente solo nos queda un último paso en la construcción de nuestra aplicación: la creación del fichero DAO.
Antes de definir el DAO, vamos a recordar el sentido de su creación. El DAO va a intermediar entre la capa de persistencia y la de negocio, ayudándonos a aislar las capas, y a facilitarnos los cambios en la arquitectura de nuestro proyecto.
Este es nuestro EjemploBeanDAO.java :
package models;
public class EjemploBeanDAO implements EjemploBeanInterface {
public EjemploBeanDAO() {
}
public Userdata getUserData(String login, String password) {
Userdata user;
// este no es el metodo más eficiente de crear un EntityManagerFactory y gestionar la factory
EntityManagerFactory emf;
emf=Persistence.createEntityManagerFactory("ejemploDAO");
EntityManager em=null;
EntityTransaction tx=null;
Query q=null;
em=emf.createEntityManager();
tx=em.getTransaction();
tx.begin();
try {
user = (Userdata)em.createQuery("SELECT c FROM Userdata c WHERE c.login LIKE :custLogin AND c.password LIKE :custPass").setParameter("custLogin", login).setParameter("custPass", password).getSingleResult();
tx.commit();
} catch (NoResultException nr) {
tx.rollback();
System.err.println("No existen datos");
nr.printStackTrace();
return null;
} catch (Exception e) {
tx.rollback();
System.err.println("Se ha producido un error durante la busqueda");
e.printStackTrace();
return null;
} finally {
try {
em.close();
} catch (Exception fl) {
// do nothing
System.err.println("Se ha producido un error cerrando database");
}
}
return user;
}
}
Estructura del proyecto y ficheros
Para que funcione JPA, será necesario añadir a las librerías del proyecto EclipseLink y mysql-connector.java. Una vez agregadas, así quedará la estructura final:
Ejecutando la aplicación...
Ejecutamos la aplicación y el resultado es :
DATOS DEL USUARIO:
NOMBRE: Jose user user
EMAIL: pepeuser@gmail.com
Éxito total ... ;-)
Ahora cambiaremos la capa de datos, alterando el proyecto, y así comprobaremos la utilidad del DAO como intermediario entre capa de persistencia y capa de negocios.
Siguiente tema
No hay comentarios:
Publicar un comentario