Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

12
 Nicolás Bortolotti versión:1.1 Datastore, haciendo uso de transacciones, realizando un commit mediante GWT and GAE  Para esta actividad vamos a trabajar un poco más en detalle con el Datastore y nos vamos a introducir en las relaciones entre objetos y como se pueden realizar actividades de persistencia en este sentido. Introducción Es posible crear relaciones entre objetos persistentes mediante los campos de los tipos de objetos. Una relación entre objetos persistentes puede ser de propiedad, en la que uno de los objetos no puede existir sin el otro, o sin propiedad, en la que ambos objetos pueden existir independientemente de su relación con el otro. La implementación App Engine de la interfaz JDO puede crear relaciones de propiedad uno a uno y uno a varios, tanto unidireccionales como bidireccionales.  Para esta actividad vamos a recrear un ejemplo de relaciones uno a uno direccional para no incrementar tanto la complejidad.  Pero sobre estas relaciones vamos a incorporar el sentido de transacciones, ya que es de vital importancia remarcar que en determinados escenarios de persistencia como la agregación de objetos si no planteamos transacciones puede que tengamos resultados óptimos.  Veamos el diagrama de clases de la actividad a realizar en el marco de persistencia.  Parte del programa "Preguntale al experto de cloud" CC3  

Transcript of Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

Page 1: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 1/12

 

Nicolás Bortolotti

versión:1.1

Datastore, haciendo uso detransacciones, realizando un commitmediante GWT and GAE 

Para esta actividad vamos a trabajar un poco más en detalle con el Datastore y nos vamos a

introducir en las relaciones entre objetos y como se pueden realizar actividades de persistencia

en este sentido.

IntroducciónEs posible crear relaciones entre objetos persistentes mediante los campos de los tipos de

objetos. Una relación entre objetos persistentes puede ser de propiedad, en la que uno de los

objetos no puede existir sin el otro, o sin propiedad, en la que ambos objetos pueden existir 

independientemente de su relación con el otro. La implementación App Engine de la interfaz

JDO puede crear relaciones de propiedad uno a uno y uno a varios, tanto unidireccionales

como bidireccionales.

 

Para esta actividad vamos a recrear un ejemplo de relaciones uno a uno direccional para no

incrementar tanto la complejidad.

 

Pero sobre estas relaciones vamos a incorporar el sentido de transacciones, ya que es de vital

importancia remarcar que en determinados escenarios de persistencia como la agregación de

objetos si no planteamos transacciones puede que tengamos resultados óptimos.

 

Veamos el diagrama de clases de la actividad a realizar en el marco de persistencia.

 

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 2: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 2/12

 

Nicolás Bortolotti

versión:1.1

Fig. 1 Diagrama de clases implicadas en la relación que deseamos modelar.

 

Recordemos que la Fig. 1 modela una relación uno a uno, que no es el reflejo concreto de lo

que se encuentra generalmente en detalles de objetos, solo a es modelo de ejemplo y para

comprender el mecanismo inicial de relación sobre GAE.

 

Presentación de UI utilizada en la actividad

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 3: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 3/12

 

Nicolás Bortolotti

versión:1.1

Fig. 2 UI mediante UiBinder de los datos a ingresar al cliente.

 

Servicio utilizado para la actividad

Para el servicio utilizamos estos 3 elementos:

● ClientesService

● ClientesServiceAsync

● ClientesServiceImpl

 

El elemento para analizar es “ClientesServiceImpl” ya que posee la implementación que se

está proponiendo en el articulo.

 

package ar.com.comunidadxcloud.nbortolotti.server;

import javax.jdo.PersistenceManager;

import javax.jdo.Transaction;

import ar.com.comunidadxcloud.nbortolotti.client.ClientesService;

import ar.com.comunidadxcloud.nbortolotti.server.domain.Cliente;

import ar.com.comunidadxcloud.nbortolotti.server.domain.detalleCliente;

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 4: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 4/12

 

Nicolás Bortolotti

versión:1.1

import ar.com.comunidadxcloud.nbortolotti.shared.ClienteDTO;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

@SuppressWarnings("serial")

public class ClientesServiceImpl extends RemoteServiceServlet implements ClientesService

{

public ClienteDTO GetClienteImportante(String email)

{

return Cliente.toDTO(Cliente.getClienteImportante(email));

}

 

public Boolean agregarCliente(ClienteDTO cDTO)

{

return addCliente(cDTO);

 

}

 

private Boolean addCliente(ClienteDTO cDTO) {

 

PersistenceManager pm = PMF.get().getPersistenceManager();

 

Cliente cliente = new Cliente();

cliente.setNombre(cDTO.getNombre());

cliente.setApellido(cDTO.getApellido());

 

detalleCliente d = new detalleCliente();

d.setDescripcion(cDTO.getDetalle());

 

cliente.setDetalle(d);

 

Boolean estado;

 

try

{

Transaction tx = pm.currentTransaction();

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 5: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 5/12

 

Nicolás Bortolotti

versión:1.1

 

tx.begin();

pm.makePersistent(cliente);

tx.commit();

 

estado = true;

}

catch(Exception e)

{

estado = false;

}

finally

{

pm.close();

}

 

return estado;

 

}

}

Code 1 Implementación del servicio “ClientesServiceImpl”

 

Como se puede ver en el Code 1 se encuentra un método que realiza la operación de

agregación del elemento Cliente, esta actividad se realiza mapeando el objeto ClienteDTO

que trae consigo la información desde el cliente a los objetos de persistencia “Cliente”

y “detalleCliente”. Se puede visualizar resaltado en amarillo la creación de los objetos

persistentes “Cliente” y “detalleCliente”. Se visualiza en celeste la asignación del objeto

hijo “detalleCliente” al padre “Cliente”. Finalmente se visualiza en verde la operación de

inserción del cliente donde de no utilizar una transacción la persistencia se realizaría de forma

atómica para “Cliente” y ”detalleCliente”.

 

Entidad de persistencia 

package ar.com.comunidadxcloud.nbortolotti.server.domain;

import javax.jdo.PersistenceManager;

import javax.jdo.Query;

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 6: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 6/12

 

Nicolás Bortolotti

versión:1.1

import javax.jdo.annotations.Extension;

import javax.jdo.annotations.IdGeneratorStrategy;

import javax.jdo.annotations.IdentityType;import javax.jdo.annotations.PersistenceCapable;

import javax.jdo.annotations.Persistent;

import javax.jdo.annotations.PrimaryKey;

import ar.com.comunidadxcloud.nbortolotti.server.PMF;

import ar.com.comunidadxcloud.nbortolotti.shared.ClienteDTO;

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")

public class Cliente

{

@PrimaryKey

@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)

@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")

private String id;

 

@Persistent

private String nombre;

@Persistent

private String apellido;

@Persistent

private String email;

 @Persistent

private detalleCliente detalle;

 

public Cliente()

{

 

}

 

public String getId() {

return id;

}

public void setNombre(String nombre) {

this.nombre = nombre;

}

public String getNombre() {

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 7: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 7/12

 

Nicolás Bortolotti

versión:1.1

return nombre;

}

public void setApellido(String apellido) {this.apellido = apellido;

}

public String getApellido() {

return apellido;

}

 

public void setEmail(String email) {

this.email = email;

}

public String getEmail() {return email;

}

 

public void setDetalle(detalleCliente detalle) {

this.detalle = detalle;

}

 

public detalleCliente getDetalle() {

return detalle;

}

}

Code 2 Clase Cliente

package ar.com.comunidadxcloud.nbortolotti.server.domain;

import javax.jdo.annotations.Extension;

import javax.jdo.annotations.IdGeneratorStrategy;

import javax.jdo.annotations.IdentityType;

import javax.jdo.annotations.PersistenceCapable;

import javax.jdo.annotations.Persistent;import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")

public class detalleCliente

{

@PrimaryKey

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 8: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 8/12

 

Nicolás Bortolotti

versión:1.1

@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)

@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")

private String id; 

@Persistent

private String descripcion;

 

public String getId() {

return id;

}

 

public void setDescripcion(String descripcion) {

this.descripcion = descripcion;

}

 

public String getDescripcion() {

return descripcion;

}

 

}

Code 3 Clase detalleCliente

 

Realizando la llamada a la actividad

 

@UiHandler("button")

void onButtonClick(ClickEvent event)

{

ClienteDTO obj = new ClienteDTO("",txtNombre.getText(),

txtApellido.getText(), txtDetalles.getText());

 

clienteService.agregarCliente(obj, new AsyncCallback<Boolean>() {

 

@Override

public void onSuccess(Boolean result) {

if(result == true)

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 9: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 9/12

 

Nicolás Bortolotti

versión:1.1

{

Window.alert("Creación Correcta");

}else

{

Window.alert("Creación Incorrecta");

}

 

}

 

@Override

public void onFailure(Throwable caught) {

Window.alert("Problemas con el servicio"); 

}

});

Code 4 Manejador del evento click en el botón grabar.

 

En el Code 4 se muestra la llamada al servicio “clienteService” que desencadena la llamada al

método de agregación propuesto en la actividad para cumplir el objetivo del artículo.

 

Vamos a medir con el profile el desempeño de nuestro código, y además visualizaremos en

AppWrench el estado de Datastore.

 

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 10: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 10/12

 

Nicolás Bortolotti

versión:1.1

Fig. 3

 

Fig. 4

 

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 11: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 11/12

 

Nicolás Bortolotti

versión:1.1

Fig. 5

 

Parte del programa "Preguntale al experto de cloud"

CC3

 

Page 12: Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE

5/8/2018 Datastore haciendo uso de transacciones realizando un commit mediante GWT and GAE - slidepdf.com

http://slidepdf.com/reader/full/datastore-haciendo-uso-de-transacciones-realizando-un-commit-mediante-gwt-and-gae 12/12

 

Nicolás Bortolotti

versión:1.1

Fig. 6 

Tecnología utilizada - Entorno de desarrollo Eclipse Helios:http://www.eclipse.org/ - GAE y GWT:http://code.google.com/webtoolkit/http://code.google.com/appengine/ 

- Pueden consultar el vídeo de implementación.

- Puenden consultar la presentación resumen.

 

Parte del programa "Preguntale al experto de cloud"

CC3