Archivos

Listando datos en AppEngine, ¿el servicio de mail me puede ayudar?

En este artículo vamos a profundizar algunos conceptos sobre AppEngine en donde utilizaremos una aplicación que procese solicitudes desde el envío de un mail para realizar de forma simulada una solicitud de artículos a determinada organización.
Generalmente nos encontramos con diversos problemas a resolver y automatizar en el desarrollo de aplicaciones, y sinceramente es muy probable que se desencadenen requerimientos que necesiten interacción de un servicio de mail para por ejemplo recibir peticiones de clientes en solicitudes de pedidos.En el artículo se plantea una simulación para mostrar la solución desarrollada con Google AppEngine. Con esta solución estoy pensando en un modelo de cloud computing, gozando de todos los privilegios que propone el concepto y además facilitando escalar rápidamente y a demanda de requerirlo en mi aplicación.
Para esta solución se utiliza el servicio de mail de appengine pero no para enviar mails sino para recibir peticiones y procesarlas y con ello mostrar en un listado muy simple los resultados del pedido.

Tecnología utilizada:
  • Eclipse Helios Release
  • SDK AppEngine 1.2.6


Vamos al desarrollo!. En primer lugar generaremos una solución en Eclipse para AppEngine y en esta oportunidad voy utilizar simples JSP para mostrar los resultados como presentación.
En primer lugar voy a generar las entidades del modelo que se requieren para resolver la problemática, en esta oportunidad solo requiero de una entidad Articulo.

Fig. 1 – Modelo de Articulo


La Fig.1 muestra el modelo de código implementado para la generación de la entidad Articulo.
package xcloudPackage.shared;

public class Articulo
{
private String nombre;
private String descripcion;
private int precio;

public Articulo(String pNombre, String pDescripcion, int pPrecio)
{
this.nombre = pNombre;
this.descripcion = pDescripcion;
this.precio = pPrecio;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getNombre() {
return nombre;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getDescripcion() {
return descripcion;
}
public void setPrecio(int precio) {
this.precio = precio;
}
public int getPrecio() {
return precio;
}

}

Code. 1 – Código Fuente de la Entidad Articulo

Una vez generada la entidad de mi modelo que de hecho es muy simple, tengo que definir la estrategia de persistencia, en esta oportunidad voy a utilizar una clase bien simple que almacena en un arraylist.

Fig.2 – Modelo de persistencia propuesta en la clase dataArticulo


La Fig.2 muestra el escenario de persistencia de la entidad Articulo, para este ejemplo se han definido dos métodos, uno que agrega Artículos y otro que lista la cantidad de artículos.
package xcloudPackage.shared;

import java.util.ArrayList;
import java.util.List;

public enum dataArticulo
{
INSTANCE;
private static long number=1;

private final List articulos = new ArrayList();

private dataArticulo()
{
//Sin implementar
}

public void Agregar(String nombre, String descripcion, int precio)
{
synchronized (this) {
number ++;
articulos.add(new Articulo(nombre, descripcion, precio));
}
}
public List getArticulos()
{

return articulos;
}

}

Code. 2 – Código Fuente de la solución de persistencia

Bien en el siguiente paso se requiere generar el servlet que de soporte a la inserción del articulo, para ello generaremos el “servletCrearArticulo”.

Fig. 3 – ServletCrearArticulo


La Fig.3 muestra el servletCrearArticulo que me permite como ustedes puede visualizar obtener parámetros como el nombre, descripción y precio de un artículo y persistirlos utilizando la instancia de “data Articulo”
package xcloudPackage.shared;

import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class servletCrearArticulo extends HttpServlet
{
public void doPost(HttpServletRequest a, HttpServletResponse resp)
throws IOException
{
String nombre = checkNull(a.getParameter("nombre"));
String descripcion = checkNull(a.getParameter("descripcion"));
int precio = Integer.parseInt(a.getParameter("precio"));


dataArticulo.INSTANCE.Agregar(nombre, descripcion, precio);

resp.sendRedirect("/Articulos.jsp");
}

private String checkNull(String s) {
if (s == null)
{
return "";
}
return s;
}
}

Code. 3 – Código Fuente del servletCrearArticulo

Como pueden observar en el Code 3, se realiza un “sendRedirect” a Articulos.jsp, vamos a generar esta página para poder completar los componentes necesarios para la visualización y solo quedará colocar la lógica de interacción con el servicio de mail.

Fig.4 – Representación de Articulos.jsp


La Fig.4 muestra el mecanismo de presentación para poder visualizar el listado de artículos que generaremos con cada envío de mail al servicio de appengine. Como podemos observar se mostrará en una tabla que posee como columnas, nombre, descripción y precio. Además no está detallado en el articulo pero a esta solución se le propone interactuar con la autenticación de Google para dar formalidad en ambientes más avanzados.
Finalmente vamos a construir el código fuente que permita procesar el email y persistir el mismo para poder visualizarlo en el listado anteriormente detallado de mi JSP.

Fig. 5 – EmailServlet para la insteracción con el servicio de mail.


Como se puede observar en la Fig. 5 se procesa el mail recibido y se realizar mediante la instancia de “dataArticulo” el agregado al escenario de persistencia, de esta forma podremos acceder al listado completo de artículos desde el JSP desarrollado.
Para completar el desarrollo tengo que detallar un punto importante, como es la configuración del archivo web.xml:
xml version="1.0" encoding="UTF-8"?>
DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>



<servlet>
<servlet-name>CrearNuevoArticuloservlet-name>
<servlet-class>xcloudPackage.shared.servletCrearArticuloservlet-class>
servlet>
<servlet-mapping>
<servlet-name>CrearNuevoArticuloservlet-name>
<url-pattern>/newurl-pattern>
servlet-mapping>

<servlet>
<servlet-name>Emailservlet-name>
<servlet-class>xcloudPackage.shared.EmailServletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>Emailservlet-name>
<url-pattern>/_ha/mail/*url-pattern>
servlet-mapping>


<welcome-file-list>
<welcome-file>/Articulos.jspwelcome-file>
welcome-file-list>

web-app>

Code 4 – Archivo de Configuración Web.xml

En el Code 4 se pude observar la declaración de los servlets necesarios para realizar la solución planteada en el articulo.
Finalmente podemos realizar una prueba local, y realizar el despliegue en la infraestructura de Google.
El siguiente Vídeo muestra la implementación del desarrollo descripto.

Ver Video

Espero les sea de utilidad!

Nicolas Bortolotti, Ingeniero U.T.N. Regional San Francisco - Comunidad Xcloud

Comments are closed.