martes, 13 de agosto de 2013

Creación de entidades JPA Parte 1

La idea es que mediante un ejemplo en NetBeans se muestre como se pueden crear entidades JPA, para esto se deben seguir los siguientes pasos.

  • Lo primero que se debe hacer es crear un nuevo proyecto web que para el ejemplo tendrá el nombre PrimerJPA, para esto ir a Archivo > Proyecto Nuevo > Java Web > Web Applicarion. Y poner los datos tal como aparecen en la siguiente imagen.


  • En la siguiente página (Server and Settings) dejar todo como está por defecto para oprimir siguiente y pasar a la pantalla de Frameworks, en esta pantalla hay que elegir JavaServer Faces y sin cambiar nada hacer clic en terminar.


  • Con esto se crea un nuevo proyecto web, ahora se debe agregar una nueva entity. Para esto hay que ir a la siuiente ruta Archivo > Archivo Nuevo > Persistencia > Entity Class y oprimir siguiente.


  • En la siguiente pantalla ingresar el nombre de la Entity que para el ejemplo se llamará Alumno, también hay que indicar un nombre de paquete que puede ser com.tutorial.persistencia dejando la pantalla como muestra la siguiente imagen.


  • Es muy importante tener marcado el check que indica que se debe crear una unidad de persistencia ya que todos los proyectos JPA la requieren, esto se define en un archivo que se llama persistence.xml en donde se incluyen los datos necesarios para acceder al motor de BD que persistirá finalmente las entidades.
  • En la siguietne pantalla se debe ingresar el nombre de la unidad de persistencia que para el ejemplo será el que se indica pro defecto PrimerJPAPU, el proveedor de persistencia también será el que se indica pro defecto que es EclipseLink (Encargado de que los datos de las clases convertidas en entidad persistan)


  • En fuente de datos seleccionar New Data Source, con lo que se abrirá una interfaz en la que hay que ingresar el nombre del JNDI que para el ejemplo se llamará jdbc/primerojpa.

 

  • En conexión a base de datos seleccionar Nueva Conexión de Base de Datos, con lo que se abrirá una nueva interfaz en donde hay que seleccionar el driver Java DB (Network) y oprimir siguiente como se aprecia en la imagen.


  • En esta nueva interfaz hay que ingresar los datos de la conexión a la BD, como está instalada en la misma máquina de trabajo en Servidor hay que escribir localhost, en Puerto el por defecto que es 1527, en Base de Datos el nombre del la BD que para el ejemplo será primerojpa, como la BD aún no existe se agregará en el apartado URL de JDBC el comando ;create=true para indicarle a Java DB que cree una nueva BD. También hay que agregar el nombre de usuario y contraseña que para el ejemplo será app (app porque cada usuario usapor defecto el nombre de esquema del login por lo tanto se usará automáticamente el esquema app que ya existe por defecto en la BD). Finalmente hacer clic en Probar Conexión que indicará Connection Succeeded si todo sale bien, oprimir en siguiente.


  • En la siguiente ventana elegir el esquema a utilizar que para este caso sera el esquema APP y oprimir en terminar con lo que se habrá creado la conexión y fuente de datos.



  • En la siguiente ventana oprimir Aceptar.


  • Finalmente en la última ventana dejar marcado el check Utilice APIs de Java Transaction para que el API sea el que maneje las transacciones de la BD y en Estratergia de generación de tablas elegir la opción Eliminar y Crear (Drop and Create), esta opción se usa para que cada vezque se ejecuta la aplicación se eliminen y vuelvan a crear las tablas por si se generan cambios en las estructuras de las mismas, posupuesto se pierden los datos almacenados pero como es un ambiente de desarrollo esto no es relevante por ahora. Para finalizar oprimir terminar.


Como implementar una entidad

Para ejemplificar la implementación de una entidad se analizará un ejemplo con una clase de nombre libro, a la cual se le incluyen anotaciones del paquete javax.persistence Annotation Types.

  • Para ser reconocida como una entidad, la clase debe aparecer con la anotación @javax.persistence.Entity
  • La anotación @javax.persistence.Id permite determinar la clave primaria.
  • La anotación @javax.persistence.GeneratedValue permite generar valores automáticos para la primary key.
  •  La anotación @javax.persistence.Column permite personalizar la conversión de las columnas.

Con esto el proveedor de persistencia JPA realiza lo siguiente:
  • Asigna la Entity Libro a la tabla Libro.
  • Genera una clave primaria (id).
  • Sincroniza los valores de los atributos de la clase Libro en las columnas de la tabla Libro.

El resultado es el que se muestra a continuación

 

La ventaja de esto es que JPA permite consultar entidades y sus relaciones en un modo orientado a objetos sin tener que usar claves externas o las columnas de las bases de datos.
La interfaz que permite manejar las entidades es javax.persistence.EntityManager quien proporciona los métodos necesarios para acceder a la base de datos y llevar a cabo las distintas acciones. Además oculta la llamada JDBC a la BD y las declaraciones de tipo CRUD (Create, Read, Update and Delete), estas últimas se generan no mediante SQL sino mediante JPQL.

Un ejemplo de un JPQL es el que se muestra a continuación.


En la imagen anterior se muestra una consulta en amarillo que forma parte de uno de los parametros de la anotación @javax.persistence.NamedQuery la cual posteriormente debe ser ejecutada por el método EntityManager.createNamedQuery() quien finalmente es el que devuelve los datos que se buscan (esto no se meustra en el ejemplo).


lunes, 5 de agosto de 2013

Entity Bean

Un Entity Bean es una clase ( POJO ) que representa una tabla de una base de datos, y cada instancia de esta clase representa un registro de la tabla, es decir, con los entity beans lo que se consigue es crear un mapeo entre las propiedades de una clase y los campos de una tabla. Además de este mapeo también se puede especificar las relaciones que tienen las clases entre sí ( uno a uno, uno a muchos, muchos a uno y muchos a muchos ). Todo Entity Bean debe de tener una clave primaria que identifica a ese registro de forma única dentro de la tabla. Todas estas configuraciones se realizan a través de anotaciones, y el API que se encarga de gestionar todos los aspectos relativos a la persistencia es JPA ( Java Persistent API).
Las entidades al ser manejadas por el EntityManager tienen un estado persistente pero al desconectarse del EntityManager las entidades al ser POJOs pueden ser utilizadas como cualquier otra clase Java.
A continuación se muestra el ciclo de vida de una entity.


  • Cuando se crea una instancia de la entity Libro con el operador new lo que se crea es un objeto que "existe en memoria" y de momento JPA no sabe del objeto en cuestión por lo cual es un objeto como cualquier otro.
  • Cuando es manejado por el EntityManager su estado es mapeado (asignado) y sincronizado con la BD, para este ejemplo con una tabla de nombre Libro.
  • Si se llama al método EntityManager.remove() se borran los datos de la BD y el objeto continua "existiendo en la memoria" hasta que sea recolectado como basura
 Las operaciones que pueden llevar a cabo las entity son las siguientes.


Cada una de las operaciones a excepción de loading tienen un evento pre y post, con esto el EntityManager puede interceptar estos eventos he invocar algún método en particular de la aplicación. La declaración de cada uno de estos eventos es la siguiente.
  • @PrePersist
  • @PostPersist
  • @PostLoad
  • @PreUpdate
  • @PostUpdate
  • @PreRemove
  • @PostRemove
Estas anotaciones pueden ser configuradas como métodos entity (callback) y clases externas (listeners) muy parecidas en funcionamiento a los trigger de BD.


jueves, 1 de agosto de 2013

Tecnologías para persistir objetos en Java

La idea es poder hacer que los datos de un objeto sean persistentes teniendo en cuenta lo siguiente:

  • Los objetos encapsulan su estado y son visibles mientras la JVM se está ejecutando.
  • Si la JVM se detiene o el GarbageColector limpia su contenido en memoria los objetos desaparecen y con ellos su estado o contenido.
Para poder persistir los estados de sus objetos Java cuenta con diversos métodos:

  • Mediante serialización: Convertir un objeto en una secuencia de bits mediante la implementación de la interfaz java.io.serializable. Sin embargo no es un lenguaje de consulta ni soporta un alto acceso concurrente.

  •  Mediante Java Database Connectivity JDBC: API estándar para acceder a bases de datos relacionales con todo lo que ello involucra. Sin embargo se están viendo reemplazadas por otras herramientas como las ORM.


  •  Mapeo Objeto Relacional ORM: Técnica de programación para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una base de datos relacional, utilizando un motor de persistencia.



 Para esto se utilizan Frameworks como; Hibernate, JDO y JPA




Es un framework del lenguaje de programación Java que maneja datos relacionales en aplicaciones usando la Plataforma Java que le permite ser independiente de SQL,m se basa en el paquete javax.persistence.

Los principales componentes de esta API son:
  • Object-Relational Mapping ORM: Es el mecanismo de mapeo (asignación) de objetos a los datos almacenados en BD relacionales.
  • EntityManager: API encargada de ejecutar operaciones CRUD (Create, Read, Update y Delete) en la BD relacional.
  • Java Persistence Query Language JPQL: Es el lenguaje persistente de consulta Java que permite recuperar datos con un lenguaje orientado a objetos.
  • Java Transaction API JTA: Transacciones y mecanismos de bloqueo cuando se accede a datos de modo concurrente.

 
 Son objetos que viven muy poco tiempo en la memoria y de manera persistente en la BD. Estas pueden ser mapeadas a una BD, pueden ser concretas o abstractas, soportan herencia, relaciones y una vez asignadas se pueden manejar mediante JPA.
Se pueden insertar, eliminar y consultar mediante JPQL gracias a la manipulación que permite ORM mientras se accede a la BD.

 A continuación se muestra un resumen de todo lo visto



martes, 30 de julio de 2013

Como integrar un RDBMS



En este ejemplo veremos como agregar HyperSQL como sistema de manejo de base de datos a NetBeans, para esto se deben seguir los siguientes pasos.


  • Abrir NetBeans he ir a la opción Ventana / Prestaciones para visualizar los controladores de BD que se encuentran instalados. En la imagen de abajo se ven los controladores que vienen configurados por defecto en NetBeans.


  • Hacer clic derecho sobre Controladores / Nuevo Controlador se abrirá una ventana que solicitará ingresar algunos datos del nuevo controlador de BD
  • Hacer clic en agregar y seleccionar el archivo hsqldb.jar de la carpeta lib que se encuentra dentro de la carpeta de HyperSQL con lo cual se llenarán los campos solicitados y oprimir Aceptar.

  • Comprobar que el controlador de BD se haya agregado correctamente.
  • Hacer clic derecho sobre HSQLDB y oprimir en Conectar usando, con esto se abrirá una nueva ventana que solicita los datos de la BD a conectar. 

  • Para obtener estos datos hay que ingresar al panel de control de la BD ejecutando el archivo memorydbmanager.html que se encuentra en la carpeta bin dentro de la carpeta de HyperSQL. Con esto se cargará la siguiente página en el browser.

  • Hacer clic en File / Connect, con lo cual se mostrará la siguiente pantalla con la información necesaria para ingresar en la pantalla de NetBeans

  • Al llenar los datos en la ventana de NetBeans, esta debe quedar de la siguiente forma. Luego de ello oprimir siguiente.
  • En esta última pantalla de configuración seleccionar el esquema PUBLIC y hacer clic en terminar.

  • Finalmente comprobar que el sistema de base de datos se haya agregado correctamente mediante el explorador de prestaciones de NetBeans.


Como integrar un servidor de aplicaciones



En este ejemplo veremos como agregar JBoss como servidor de aplicaciones a NetBeans, para esto se deben seguir los siguientes pasos.


  • Abrir NetBeans he ir a la opción Ventana / Prestaciones para visualizar los servidores de aplicaciones que se encuentran instalados. En la imagen de abajo se ven los dos servidores de aplicaciones que ya vienen instalados en NetBeans que son Apache Tomcat y GlassFish.


  • Hacer clic derecho sobre Servidores y Agregar Servidor, se abrirá una ventana que muestra los servidores de aplicaciones disponibles para agregar y en la lista seleccionar JBoss Aplication Server y oprimir siguiente.


  • seleccionar la carpeta donde se encuentren los archivos de JBoss y oprimir siguiente.



  • Dejar las opciones por defecto y hacer clic en terminar.



  • Comprobar que el servidor de aplicaciones JBoss se haya agregado correctamente.



lunes, 29 de julio de 2013

Configuración del entorno de desarrollo

Descargar los siguientes componentes:





NetBeans viene preconfigurado con el servidor de aplicaciones GlassFish y el RDBMS JavaDB: