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"
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