datastore haciendo uso de transacciones realizando un commit mediante gwt and gae
Post on 07-Jul-2015
126 Views
Preview:
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
top related