Está en la página 1de 11

Implementacin de aplicaciones en Google App Engine

utilizando el lenguaje Java y JDO


Alvarado Figueroa Kenny Limachi Calatayud Roxana Marticorena Rios Luis
Turpo Apaza Elizabeth isniegues !blitas "orge
Resumen# El presente paper busca
de$inir y explicar como es el proceso de
implementaci%n y organizaci%n de
&oogle App Engine 'ue es un servicio de
alo(amiento )eb 'ue presta &oogle de
$orma gratuita hasta determinadas cuotas*
este servicio permite e(ecutar
aplicaciones sobre la in$raestructura de
&oogle+
,or el momento las cuentas gratuitas
tienen un l-mite de .// megabytes de
almacenamiento permanente y la
su$iciente cantidad de ancho de banda y
C,0 para cinco millones de visitas
mensuales* y si la aplicaci%n supera estas
cuotas* se pueden comprar cuotas
adicionales+
Actualmente las aplicaciones &oogle App
Engine se implementan mediante los
lengua(es de programaci%n ,ython* "ava*
&o y ,1,+ en este paper se va utilizar el
lengua(e "ava y "2!+
Palabras Clave#&oogle App Engine*
persistencia de ob(etos* "ava* "2!
I. INTRODUCCIN
&oogle App Engine o tambin conocido
ms comnmente como &AE o App
Engine nos abre la infraestructura de
produccin de Google de forma gratuita
como plataforma de desarrollo y hospedaje
de aplicaciones web.
El servicio fue lanzado el de abril del !""#
comoun servicio de cloud pero a diferencia
de otros servicios en la nube como Amazon
Web Services o AzureServicesPlatform de
$icrosoft% el servicio ofrecido por Google es
un servicio de Plataforma como Servicio y
no de Infraestructura como Servicio.
El uso de la infraestructura de servicio de
Google &pp Engine es completamente
gratuita hasta '"" megabytes de
almacenamiento y cinco millones de visitas
mensuales. (i superamos esos l)mites
entonces tendremos *ue pagar por ms
recursos a Google a unos precios bastante
ase*uibles. &dems podemos usar un
dominio propio para la +,- de nuestra
aplicacin o bien podemos usar un
subdominio de appspot.com ofrecido de
manera gratuita por Google al estilo de
.ero/u.
En el presente paper esta organizado de la
siguiente forma0 en la seccin ! vamos a ver
*ue es Google &pp Engine% en la seccin 1 la
instalacin del complemento de Google para
2ava eclipse y la utilizacin de 234 en
Google appengine% en la seccin 5 la
implementacin de un aplicativo en 2ava con
234 y por ultimo en la seccin ' las
conclusiones finales
II. GOOGLE APP ENGINE
Google &pp Engine te permite ejecutar tus
aplicaciones web en la infraestructura de
Google. -as aplicaciones &pp Engine son
fciles de crear% de mantener y de ampliar al
ir aumentando el trfico y las necesidades de
almacenamiento de datos. 6on &pp Engine
no necesitars utilizar ningn servidor0 solo
tendrs *ue subir tu aplicacin para *ue los
usuarios puedan empezar a utilizarla.
7uedes proporcionar a la aplicacin tu propio
nombre de dominio 8como% por
ejemplo% http099www.e:ample.com9; a travs
de Google &pps. <ambin puedes
proporcionarle un nombre *ue est
disponible en el dominio appspot.com.
7odrs compartir tu aplicacin con todo el
mundo o limitar el acceso a los miembros de
tu organizacin.
Google &pp Engine admite aplicaciones
escritas en varios lenguajes de
programacin. Gracias al entorno de tiempo
de ejecucin 2ava de &pp Engine% puedes
crear tu aplicacin a travs de tecnolog)as
2ava estndar% *ue incluyen 2=$% servlets
2ava y el lenguaje de programacin 2ava% o
cual*uier otro lenguaje *ue utilice un
intrprete o compilador basado en 2=$
como% por ejemplo% 2ava(cript o ,uby. &pp
Engine tambin ofrece un entorno de tiempo
de ejecucin 7ython dedicado% *ue incluye
un rpido interprete 7ython y la biblioteca
estndar 7ython. -os entornos de tiempo de
ejecucin 2ava y 7ython se generan para
garantizar *ue tu aplicacin se ejecute de
forma rpida% segura y sin interferencias de
otras aplicaciones en el sistema.
a3 El entorno de Aplicaci%n
Google &pp Engine permite desarrollar
fcilmente aplicaciones *ue se ejecuten de
forma fiable% incluso con pesadas cargas de
trabajo y grandes cantidades de datos. &pp
Engine incluye las siguientes funciones0
(ervidor web dinmico%
totalmente compatible con las
tecnolog)as web ms comunes.
&lmacenamiento permanente
con funciones de consulta%
clasificacin y transacciones.
Escalado automtico y
distribucin de carga.
&7> para autenticar usuarios y
enviar correo electrnico a travs
de Google &ccounts.
+n completo entorno de
desarrollo local *ue simula
Google &pp Engine en tu e*uipo.
6olas de tareas *ue realizan
trabajos fuera del mbito de una
solicitud web.
<areas programadas para activar
eventos en momentos
determinados y en intervalos
regulares.
<u aplicacin se puede ejecutar en uno de
estos dos entornos de tiempo de ejecucin0
el entorno 2ava o el entorno 7ython. 6ada
uno de ellos proporciona protocolos estndar
y tecnolog)as comunes para el desarrollo de
aplicaciones web.
b3 La zona de pruebas
-as aplicaciones se ejecutan en un entorno
seguro *ue proporciona acceso limitado al
sistema operativo subyacente. Estas
limitaciones permiten a &pp Engine distribuir
solicitudes web de la aplicacin en varios
servidores e iniciar y detener los servidores
segn las demandas del trfico. -a zona de
pruebas a)sla la aplicacin en su propio
entorno seguro de confianza% totalmente
independiente del hardware% del sistema
operativo y de la ubicacin f)sica del servidor
web.
&lgunos ejemplos de las limitaciones del
entorno seguro de la zona de pruebas son0
+na aplicacin solo podr
acceder a otros e*uipos de
>nternet a travs de los servicios
de correo electrnico y
e:traccin de +,-
proporcionados. 4tros e*uipos
solo se podrn conectar a la
aplicacin mediante solicitudes
.<<7 8o .<<7(; en los puertos
estndar.
+na aplicacin no podr escribir
en el sistema de archivos. +na
aplicacin podr leer archivos%
pero solo a*uellos subidos con el
cdigo de la aplicacin. -a
aplicacin deber utilizar el
almacn de datos de &pp
Engine% $emcache u otros
servicios para todos los datos
*ue permanezcan entre las
solicitudes.
El cdigo de aplicacin solo se
ejecuta en respuesta a una
solicitud web% a una tarea en cola
o a una tarea programada y debe
devolver datos de respuesta en
un periodo de 1" segundos en
cual*uier caso. +n controlador
de solicitudes no podr generar
un subproceso ni ejecutar cdigo
despus de haber enviado la
respuesta.
c3 El 2atastore
6uando usamos Google &pp Engine% no
tenemos acceso a una base de datos
relacional tradicional como $y(?-% 4racle o
7ostgres. @uestros datos se almacenan en
el &oogle 2atastore *ue usa un enfo*ue
jerr*uico orientado a objetos al estar basado
en otra tecnolog)a de Google% el Google
Aigtable *ue es un sistema distribuido de
almacenamiento de datos estructurados.
El enfo*ue de utilizar Aigtable como
almacenamiento a travs del Google
3atastore consiste en ofrecer una forma
eficiente de escalabilidad a nuestras
aplicaciones en la nube de Google% las bases
de datos @o(?- son conocidas por su
predisposicin a facilitar la escalabilidad.
>ntroducir un nuevo registro en el 3atastore
no tiene complicacin alguna0
6onsultar al modelo de datos es realmente
sencillo
&l igual *ue con las bases de datos
relacionales% Google 3atastore nos provee
de una interfaz de consulta a travs de una
cadena GQL0
newperson B
7erson8nameBC7ericoC%
passwordBCD!f1bEDDa!ba"E"1dC;
newperson.put8;
*uery B db.?urery87erson;
*uery B *uery.filter8Fname BF%
name;
*uery B *uery.filter8Fpassword B F%
password;
results B *ue.fetch8limitBG;
*uery B db.G*l?uery8C(E-E6< H
I,4$ 7erson J.E,E name B
0name C
C&@3 password B 0pwd C%
nameBC7ericoC%
passwordBCD!f1bEDDa!bC
;
d3 ervicios de App Engine
&pp Engine proporciona una gran variedad
de servicios *ue te permitirn realizar
operaciones comunes al administrar tu
aplicacin. (e incluyen las siguientes &7>
para acceder a estos servicios0
Extraccin de URL
-as aplicaciones pueden acceder a recursos
en >nternet% como servicios web u otros
datos% mediante el servicio de e:traccin de
+,- de &pp Engine. Este servicio recupera
recursos web mediante la misma
infraestructura de alta velocidad de Google
*ue obtiene pginas web para muchos otros
productos de Google.
Correo
-as aplicaciones pueden enviar mensajes de
correo electrnico mediante el servicio de
correo de &pp Engine. Este servicio utiliza la
infraestructura de Google para enviar
mensajes de correo electrnico.
Memcache
$emcache proporciona a tu aplicacin el
servicio de memoria cach de valoresKclaves
de alto rendimiento accesible desde varias
instancias de tu aplicacin. $emcache
resulta til para los datos *ue no necesitan
las funciones de persistencia y transacciones
del almacn de datos% como los datos
temporales o los datos copiados del almacn
de datos en la cach para un acceso a gran
velocidad.
Manipulacin de imgenes
El servicio de imgenes permite a tu
aplicacin manipular imgenes. 6on esta
&7>% podrs recortar% girar% dar la vuelta o
ajustar el tamaLo de imgenes en formato
27EG o 7@G.
III. INSTALACIN DEL
COMPLEMENTO DE GOOGLE
PARA ECLIPSE
+na vez *ue tenemos instalado eclipse% en
este caso tenemos la versin Mepler% vamos
al men help y vamos a la opcin instalar
nuevo software% nos aparece una ventana y
damos clic/ en el te:t bo: Jor/withy
ingresamos la +,- de donde se va
descargar el plugin
https://dl.google.com/eclipse/plu
gin/4.3
y hacemos un chec/ en Google pluginfor
Eclipse y tambin hacemos un chec/ en
Google &pp Engine 2ava (3M G.#.#
& continuacin damos clic/ en ne:t y nos
aparece la siguiente pantalla
N luego nos aparee la siguiente pantalla
@os muestra un mensaje de advertencia de
seguridad% le damos clic/ en 4M
+na vez reiniciado el eclipse% vemos *ue
aparece un nuevo botn en la barra de
herramientas
a+ Creaci%n de un proyecto en
eclipse con App Engine
7ara crear un nuevo proyecto de &pp Engine0
El asistente crea una estructura de
directorios para el proyecto *ue incluye un
directorio src9 para archivos fuente 2ava y un
directorio war9 para clases compiladas y
otros archivos para la aplicacin% bibliotecas%
archivos de configuracin% archivos estticos
8p. ej.% imgenes y 6((; y otros archivos de
datos.
El directorio war9 utiliza el formato
estndar J&, para asociar aplicaciones
web. 8-os archivos del archivo J&, todav)a
no son compatibles con el (3M;. El
complemento de Eclipse utiliza este directorio
para ejecutar el servidor de desarrollo y para
implementar la aplicacin en &pp Engine.
6uando Eclipse compila tu proyecto% crea un
directorio denominado classes9 en war9JEAK
>@I9 y coloca en l los archivos de clase
compilados. Eclipse tambin copia archivos
*ue no son archivos fuente
de src9 a war9JEAK>@I9classes9% entre los
*ue se incluyen $E<&K>@I9% as) como los
archivos log5j.properties ylogging.properties.
El contenido final del directorio war9 prepara
la aplicacin para poderse probar e
implementar.
b+ 0so de "2! con App Engine
-a interfaz de objetos de datos de 2ava
8234; es una interfaz estndar para
almacenar objetos con datos en una base de
datos. El estndar permite *ue las interfaces
realicen tareas de anotacin de objetos 2ava%
de recuperacin de objetos con consultas y
de interaccin con una base de datos
mediante transacciones. +na aplicacin *ue
utilice la interfaz de 234 puede funcionar con
distintos tipos de bases de datos sin usar
ningn cdigo espec)fico para estas%
incluidas las bases de datos relacionales%
jerr*uicos y de objetos. &l igual *ue otros
estndares de interfaz% 234 simplifica la
transferencia de tu aplicacin entre diferentes
soluciones de almacenamiento.
El (3M de 2ava de &pp Engine incluye 234
!.1 para el almacn de datos de &pp Engine.
Esta implementacin se basa en
3ata@ucleus &ccess 7latform% la
implementacin de referencia de cdigo
abierto para 234 !.1.
6onfiguracin de 234
(i *uieres usar 234 para acceder al almacn
de datos% necesitas lo siguiente para la
aplicacin de &pp Engine0
-os archivos de 234 y del plugKin
3ata@ucleus de &pp Engine deben
ubicarse en el directorio war9JEAK
>@I9lib9de la aplicacin.
3ebe haber un archivo de
configuracin
llamado jdoconfig.:ml en el
directorio war9JEAK
>@I9classes9$E<&K>@I9 de la
aplicacin cuya configuracin solicite
a 234 el uso del almacn de datos
de &pp Engine.
El proceso de creacin del proyecto
re*uiere una mejora posterior a la
compilacin en las clases de datos
compilados para asociarlas con la
implementacin 234.
(i utilizas Google 7lugin for Eclipse% el plugK
in realiza estos tres pasos por ti. El asistente
de nuevos proyectos coloca los archivos 2&,
de 234 y del plugKin 3ata@ucleus de &pp
Engine en la ubicacin correcta y% a
continuacin% crea el archivojdoconfig.:ml.
3urante el proceso de creacin se realiza la
mejora de forma automtica.
Copia de los archivos "AR
-os archivos 2&, de 234 y del almacn de
datos se incluyen en el (3M de 2ava de &pp
EngineO los encontrars en el directorio
appengineKjavaKsd/9lib9user9orm9.
6opia los archivos 2&, en el
directorio war9JEAK>@I9lib9 de tu aplicacin.
&segrate de *ue appengineKapi.jar tambin
se encuentre en el directorio war9JEAK
>@I9lib9 8es posible *ue ya lo hayas copiado
al crear el proyecto;. El plugKin 3ata@ucleus
de &pp Engine utiliza este archivo 2&, para
acceder al almacn de datos.
Creaci%n del archivo (docon$ig+xml+
-a interfaz de 234 re*uiere un archivo de
configuracin llamado jdoconfig.:ml en el
directorio war9JEAK>@I9classes9$E<&K>@I9 d
e la aplicacin. 7uedes crear directamente
este archivo en dicha ubicacin o hacer *ue
se copie desde un directorio determinado
durante el proceso de creacin.
Con$iguraci%n de la pol-tica de lectura y el
tiempo l-mite de la llamada al almac4n de
datos
<al como se describe en los aspectos
generales% puedes configurar la pol)tica de
lectura 8consistencia fuerte o consistencia
eventual; y el tiempo l)mite para la invocacin
al almacn de datos
para 7ersistence$anagerIactory en el
archivojdoconfig.:ml. Esta configuracin se
incluye en el elemento PpersistenceK
managerKfactoryQ. <odas las invocaciones
realizadas con una instancia
de 7ersistence$anager determinada usan la
configuracin especificada
cuando7ersistence$anagerIactory cre el
gestor. <ambin puedes saltarte estas
opciones cuando se trate de un
objeto?uery nico.
7ara establecer una pol)tica de lectura
para 7ersistence$anagerIactory% incluye
una propiedad denominada
datanucleus.appengine.datastore,ead6onsis
tency.
Esta admite los valores E=E@<+&- 8para
lecturas con consistencia eventual;
y (<,4@G 8para lecturas con consistencia
fuerte;. (i no se especifica% el valor
predeterminado es(<,4@G.
<property
name="datanucleus.appengine.datastoreReadConsistency"
value="EVENTUAL" !
7uedes definir distintos tiempos l)mite en las
invocaciones del almacn de datos tanto
para procesos de lectura como de escritura.
7ara procesos de lectura% usa la propiedad
estndar de 234
javax.jdo.option.DatastoreReadTimeoutMillis;
y para procesos de escritura% usa
javax.jdo.option.DatastoreWriteTimeoutMillis.
El valor es una cantidad de tiempo e:presada
en milisegundos.
<property name=""ava#."do.option.$atastoreReadTimeout%illis"
value="&'''" !
<property
name=""ava#."do.option.$atastore(riteTimeout%illis"
value=")''''" !
7uedes tener varios elementos PpersistenceK
managerKfactoryQ en el mismo archivo
jdoconfig.:ml% con distintos atributos name%
para usar instancias de 7ersistence$anager
con diferentes configuraciones en la misma
aplicacin. 7or ejemplo% el siguiente archivo
jdoconfig.:ml establece dos conjuntos de
configuracinO uno se denomina
CtransactionsKoptionalC% y el otro
CeventualKreadsKshortKdeadlinesC0
<*#ml version=").'" encoding="ut+,-"*!
<"docon+ig #mlns=".ttp/"ava.sun.com#mlns"do"docon+ig"
#mlns/#si=".ttp/000.01.org2'')3%L4c.ema,instance"

#si/noNamespace4c.emaLocation=".ttp/"ava.sun.com#mlns"do
"docon+ig"!
<persistence,manager,+actory name="transactions,optional"!
<property name=""ava#."do.5ersistence%anager6actoryClass"

value="org.datanucleus.store.appengine."do.$atastore7$85ersisten
ce%anager6actory"!
<property name=""ava#."do.option.ConnectionURL"
value="appengine"!
<property name=""ava#."do.option.NontransactionalRead"
value="true"!
<property name=""ava#."do.option.Nontransactional(rite"
value="true"!
<property name=""ava#."do.option.RetainValues"
value="true"!
<property
name="datanucleus.appengine.autoCreate$atastoreT#ns"
value="true"!
<persistence,manager,+actory!
<persistence,manager,+actory name="eventual,reads,s.ort,
deadlines"!
<property name=""ava#."do.5ersistence%anager6actoryClass"

value="org.datanucleus.store.appengine."do.$atastore7$85ersisten
ce%anager6actory"!
<property name=""ava#."do.option.ConnectionURL"
value="appengine"!
<property name=""ava#."do.option.NontransactionalRead"
value="true"!
<property name=""ava#."do.option.Nontransactional(rite"
value="true"!
<property name=""ava#."do.option.RetainValues"
value="true"!
<property
name="datanucleus.appengine.autoCreate$atastoreT#ns"
value="true"!
<property
name="datanucleus.appengine.datastoreReadConsistency"
value="EVENTUAL" !
<property
name=""ava#."do.option.$atastoreReadTimeout%illis"
value="&'''" !
<property
name=""ava#."do.option.$atastore(riteTimeout%illis"
value=")''''" !
<persistence,manager,+actory!
<"docon+ig!
!btenci%n de una instancia de
,ersistenceManager
+na aplicacin interacta con 234 utilizando
una instancia de la clase
7ersistence$anager. Esta instancia se
obtiene al reproducir e invocar un mtodo en
una instancia de la clase
7ersistence$anagerIactory. -a fbrica utiliza
la configuracin de 234 para crear instancias
de 7ersistence$anager.
3ado *ue la instancia de
PersistenceManagerFactory tarda un tiempo
en iniciarse% las aplicaciones deber)an
reutilizar siempre la misma instancia. 7ara
garantizar *ue esto suceda% se genera una
e:cepcin cuando la aplicacin crea ms de
una instancia de PersistenceManagerFactor
8con el mismo nombre de configuracin;. +na
forma sencilla de gestionar la instancia de
PersistenceManagerFactor es crear una
clase envoltorio nica con una instancia
esttica. 7or ejemplo0
import "ava#."do.7$89elper:
import "ava#."do.5ersistence%anager6actory:
pu;lic +inal class 5%6 <
private static +inal 5ersistence%anager6actory pm+=nstance =
7$89elper.get5ersistence%anager6actory>"transactions,
optional"?:
private 5%6>? <@
pu;lic static 5ersistence%anager6actory get>? <
return pm+=nstance:
@
@
-a aplicacin utiliza la instancia de la fbrica
para crear una instancia de
7ersistence$anager por cada solicitud *ue
acceda al almacn de datos.
import "ava#."do.7$89elper:
import "ava#."do.5ersistence%anager:
import "ava#."do.5ersistence%anager6actory:
import 5%6:
...
5ersistence%anager pm = 5%6.get>?.get5ersistence%anager>?:
Iunciones no disponibles en 234
-as siguientes funciones de la interfaz de
234 no se encuentran disponibles en la
implementacin de &pp Engine0
,elaciones sin propiedad. 7uedes
implementar relaciones sin propiedad
mediante valores Mey e:pl)citos. Es
posible *ue la sinta:is de 234 para
relaciones sin propiedad se incluya
en pr:imas versiones.
,elaciones de propiedad
multidireccionales.
6onsultas C2oinC. @o puedes usar el
campo de una entidad secundaria en
un filtro al realizar una consulta del
tipo principal. <en en cuenta *ue
puedes probar el campo de relacin
del elemento principal directamente
en las consultas mediante una clave.
6onsultas de agrupacin 234?- y
otras consultas de agrupacin
conjunta.
6onsultas polimrficas. @o puedes
realizar consultas de una clase para
obtener instancias de una subclase.
6ada clase se representa mediante
un tipo de entidad independiente en
el almacn de datos.
>dentity<ype.3&<&(<4,E para la
anotacin R7ersistence6apable.
(olo se admite
>dentity<ype.&77->6&<>4@.
&ctualmente% e:iste un error *ue
evita *ue haya relaciones de
propiedad de uno a varios cuando el
elemento principal y el secundario
pertenecen a la misma clase% lo cual
dificulta el modelo de las estructuras
en rbol. Esto se solucionar en
futuras versiones. 6omo solucin
provisional% puedes almacenar los
valores de Mey e:pl)citos para el
elemento principal o para el
secundario.
IV. CONCLUSIONES
-a nube tiene sus ventajas e
inconvenientes% el sistema de
7lataforma como (ervicio de Google
&pp Engine tiene un nivel de
abstraccin tan alto *ue al utilizarlo
solo tenemos *ue prestar atencin
al desarrollo de nuestra aplicacin y
no a infraestructuras% servicios y
tecnolog)as como si ocurre por
ejemplo con la nube de &mazon%
donde somos nosotros los *ue
debemos iniciar y parar los servicios
*ue vamos a utilizar.
-os precios del &pp Engine
son bastante ase*uibles y para la
mayor)a de las aplicaciones *ue
podemos construir los usuarios%
es dif)cil *ue rebasaremos las
cuotas gratuitas.
V. REFERENCIAS
SGT. &pp(cale0 (calable and 4pen
&ppEngine &pplication
3evelopment and 3eployment.
http099www.cs.ucsb.edu9Uc/rint
z9papers9cloudcomp"E.pdf
S!T. Google &pp Engine
&le:ander Vahariev .elsin/i
+niversity of <echnology
http099www.cse.hut.fi9en9public
ations9A9'9papers9GVaharievWfi
nal.pdf
S1T. &n Evaluation of 3istributed
3atastores +sing the &pp(cale
6loud 7lataform
http099citeseer:.ist.psu.edu9vie
wdoc9downloadX
doiBG".G.G.G#!.11GYrepBrepG
YtypeBpdf
S5T. Google &pp Engine and
performance of the web
&pplication
http099citeseer:.ist.psu.edu9vie
wdoc9downloadX
doiBG".G.G.1#".GDEYrepBrep
GYtypeBpdf

También podría gustarte