Entidades en Google App Engine para Java

En este articulo, se mostrará el proceso de creación de una entidad que será utilizada para mostrar información usando el “datastore”(almacén de datos) de GAE (Google App Engine).

Para que estos procedimientos y el codigo funcionen se necesitara :

– NetBeans 6.8

– Tener instalado el GAE para NetBeans 6.8

En terminología del datastore de GAE todo lo que guarda y extrae son llamados objetos de datos y los define como entidades” que en si es un objeto que forma parte de una Base de datos de tu aplicación.

Nuestra entidad se llamara Cliente y tendra las siguientes “propiedades” en terminología de GAE :

nombre
dni
direccion
telefono
negocio
sector
fecha de ingreso
fecha de nacimiento

Esta clase de java , caundo sea instanciada por el datastore de Google tendra las siguientes características.

– 1 o mas propiedades que son valores con nombre de tipo entero, flotantes, cadenas ,fechas , datos binarios entre otros.
-1 key que es unico en el datastore. La forma mas simple de key tiene un kind (clase) y un entity ID , el key que es provista por el datastore y sirve para categorizar la entidad y el entity ID es un string provisto por el datastore o por la aplicacion.

Debido a la naturaleza del datastore, las entidades pueden tener propiedades comunes entre cada una, no siendo esto obligatorio.
Cuando se crea un Proyecto en Netbeans , este usa por defecto JPA para persistencia.Para cambiar el API de persistencia que usaremos , se tendrá que cambiar las anotaciones que se usa para JPA por las que se usa para JDO.

package modelo;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;
import javax.persistence.Temporal;

@Entity
public class Cliente implements Serializable {

    private static long serialVersionUID = 1L;

    /**
     * @return the serialVersionUID
     */
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    /**
     * @param aSerialVersionUID the serialVersionUID to set
     */
    public static void setSerialVersionUID(long aSerialVersionUID)
   {
        serialVersionUID = aSerialVersionUID;
    }
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
// atributos no generados por Netbeans a continuacion de aquí
    private String nombre;
    private int dni;
    private String direccion;
    private String telefono;
    private String negocio;
    private String sector;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaNacimiento;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fechaIngreso;
}

Las anotaciones son válidas para JPA asi que lo que tendrá que hacerse es lo siguiente :

– Cambiar @Entity por @PersistenceCapable(identityType = IdentityType.APPLICATION)

– Poner @Persistent en la línea superior de cada atributo.

Luego de aplicados los cambios la clase seria asi :

package modelo;

import java.util.Date;
//para la anotacion @PersistenceCapable
import javax.jdo.annotations.PersistenceCapable;
// para el objeto key
import com.google.appengine.api.datastore.Key;
// para IdGeneratorStrategy.IDENTITY
import javax.jdo.annotations.IdGeneratorStrategy;
// para la anotacion @Persistent
import javax.jdo.annotations.Persistent;
//para la anotacion @PrimaryKey
import javax.jdo.annotations.PrimaryKey;
@PersistenceCapable
public class Cliente {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private String nombre;
    @Persistent
    private int dni;
    @Persistent
    private String direccion;
    @Persistent
    private String telefono;
    @Persistent
    private String negocio;
    @Persistent
    private String sector;
    @Persistent
    private Date fechaNacimiento;
    @Persistent
    private Date fechaIngreso;
//...
}

Luego en otro paquete o si se quiere el mismo de Cliente crear la clase para el singleton de PersistenceManagerFactory:

import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;

public final class PMF {

private static final PersistenceManagerFactory pmfInstance =
   JDOHelper.getPersistenceManagerFactory("transactions-optional");

    private PMF() {
    }

    public static PersistenceManagerFactory get() {
        return pmfInstance;
    }
}

Para hacer persistente al objeto miCli en index.jsp añadiremos este codigo en alguna parte HTML.

<%
//Creamos un nuevo objeto Cliente y le asignamos datos
Cliente miCli = new Cliente();
miCli.setDireccion("Jose Sabogal 963");
miCli.setDni(18245928);
miCli.setFechaIngreso(new Date("06/02/2011"));
miCli.setFechaNacimiento(new Date("06/02/1989"));
miCli.setNegocio("Frutas");
miCli.setNombre("Kylia Durk");
miCli.setSector("Primavera II");
miCli.setTelefono("568978");
//Obtenemos la instacia de PersistenceManagerFactory
PersistenceManager pm = PMF.get().getPersistenceManager();
//Colocamos un try para capturar las excepciones
try {
//Hacemos persistente el objeto miCli
     pm.makePersistent(miCli);
} finally {
     pm.close();
}
%>

Ahora ejecutaremos el proyecto para comprobar que funciona y que hara persistente al objeto miCli .

Si no hay error el objeto miCli habra sigo almacenado en el datastore  y ese proceso se realizo con la implementacion JDO del GAE.

El siguiente paso es usar las posiblidades del datastore de GAE para poder recuperar la informacion.

Para eso se usan keys .

entonces en index. jsp en la parte superior en la seccion de @page añadimos :

<%@page import="com.google.appengine.api.datastore.KeyFactory" %>
<%@page import="com.google.appengine.api.datastore.Key" %>

Luego en el codigo añadir lo siguiente despues de la asignacion de valores a miCli .

//Version para recuperar entidades
Key key = KeyFactory.createKey(Cliente.class.getSimpleName(),"Emiliana");
Cliente miCli2 = new Cliente();
miCli2.setKey(key);
miCli2.setDireccion("Jose Sabogal 963");
miCli2.setDni(18245928);
miCli2.setFechaIngreso(new Date("06/02/2011"));
miCli2.setFechaNacimiento(new Date("06/02/1989"));
miCli2.setNegocio("Frutas");
miCli2.setNombre("Emiliana");
miCli2.setSector("Primavera II");
miCli2.setTelefono("568978");
Cliente miCli3;

Ahora en el bloque try – catch agregamos despues del anterior makePersistent

pm.makePersistent(miCli2);
//Recuperamos el objeto miCli2 y lo asignamos a uno nuevo miCli3
//que ha sido definido antes del bloque try-catch
Key k = KeyFactory.createKey(Cliente.class.getSimpleName(),"Emiliana");
miCli3 = pm.getObjectById(Cliente.class, k);

Como se puede ver se creo una entidad con clave Emiliana y para obtenerla con el keyFactory usamos el mismo nombre de clave

Para ver que esto es cierto ejecutamos el proyecto para asegurarnos que no hay errores.

Luego si no hay errores ponemos antes de </body>

Cliente 2 es : <%= miCli3.getNombre() %>
y su direccion es : <%= miCli3.getDireccion() %>

y ejecutamos .

Entonces aparecera la pagina mostrandonos los datos correctos de la entidad que habiamos creado.

Para comprobar que funciona , comentar la linea

//pm.makePersistent(miCli2);

y ejecutar el Proyecto.

Veremos que de igual forma la entidad sigue persistiendo y podemos acceder a sus datos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s