Programando con AppEngine de Google y Java

Pues, luego de muchos meses sin poder escribir nada y teniendo en cuenta que me tocó aprender un poco de ejb, jsf y rich faces al fin creo poder haber encontrado un poco de tiempo para escribir un poco. En esta ocasión los primeros pasos con AppEngine, Eclipse y Java, para quién no lo sepa, el AppEngine de Google nos permite hospedar nuestras aplicaciones Web Java en sus servidores (y teniendo en cuenta lo difícil que es conseguir un hosting Java decente y económico…) también soporta python y se espera que soporte más lenguajes a futuro. Me he decido a probar un poco, así que lo primero será configurar nuestro eclipse:

Lo Primero será agregar el servidor de Google a los origenes de descargas de Eclipse, Menú Help / Install new Software y agregamos el depósito según nuestra versión de Eclipse,

para Ganymede usamos
http://dl.google.com/eclipse/plugin/3.4

Europa
http://dl.google.com/eclipse/plugin/3.3

Galileo
http://dl.google.com/eclipse/plugin/3.5

Helios
http://dl.google.com/eclipse/plugin/3.6

Le damos a next… leemos y aceptamos las licencias… reiniciamos eclipse si nos lo solicita.

El siguiente paso será Ir a menú File / New / Web Application Project

Rellenamos el nombre del proyecto y el paquete por default para nuestras clases, también tenemos opción a seleccionar el motor del appengine (hay varias versiones) que deseamos utilizar y también Google GWT.

En mi caso no deseo usar el toolkit de Google GWT que sirve para crear aplicaciones AJAX como Google Maps escribiendo código Java y que será convertido (en donde se necesite) a código javascript. Pueden leer más sobre Google GWT en la página oficial.

Una vez creado nuestro proyecto veremos que nuestro proyecto cuenta con varios archivos:

De esta lista de archivos, vemos un Servlet inicial, en la carpeta META-INF un archivo de nombre jdoconfig.xml que nos permitirá usar la almacenar nuestros datos en los servidores de google, el archivo log4j.properties para configurar el logging de la aplicación.

Luego encontramos el directorio war, que viene siendo la raíz de nuestra aplicación, si agregamos algo a este directorio (un css, imagen, etc) podríamos acceder a él de la manera: http://aplicacion.appspot.com/archivo.css por ejemplo.

También podremos incluír en este directorio nuestros archivos jsp, html, etc.

El directorio war\WEB-INF tiene 2 archivos importantes "appengine-web.xml" que nos permite configurar desde el ID de nuestra aplicación para poder subirla al google engine, como el manejo de sesiones y otras cosas más que veremos luego.

web.xml como en cualquier otra aplicación web nos permitirá configurar nuestros servlet y opciones de nuestra aplicación (Java Server Faces, facelets, etc).

En la carpeta war\WEB-INF\lib debemos agregar todas aquellas bibliotecas que necesitemos utilizar en nuestra aplicación, tal como httpClient, facelets, y otras, para saber si una biblioteca es utilizable en el appengine de google podemos ir a la página que tiene a nuestra disposición con una lista de las bibliotecas que funcionan y con una lista de las que no funcionan.

Puede probar su aplicación ejecutando su aplicación en el servidor de pruebas como se ve en la siguiente imagen:

Y puede acceder a su aplicación con su navegador favorito (chrome, firefox, sí incluso con internet explorer) a la dirección http://localhost:8888

para ver una página como la siguiente:

Hello App Engine!

Available Servlets:
Demo1

Desde el link en dicha página puede probar el servlet que se creó junto con la aplicación que simplemente nos retornará un mensaje: "Hello, World".

Ahora modificaremos el servlet para que nos devuelva algo más interesante, modificando el contenido del método doGet por el siguiente código:

 public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        resp.setContentType("text/plain");
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();

        if (user == null) {
            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
            return;
        }

        resp.getWriter().println("Bienvenido" +
        user.getNickname()+" su IP es " + req.getRemoteAddr());
    }

Necesitará agregar los siguientes import al inicio del código:

import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

Una vez publicado en el appengine este simple servlet nos permitiría saber la IP pública por la que salimos a internet, al estilo de http://whatismyip.org (sí, ya sé, no es más interesante que el servlet original), pero hay un par de cosas interesantes en el código, las líneas:

   UserService userService = UserServiceFactory.getUserService();
   User user = userService.getCurrentUser();

Nos permiten utilizar el servicio de autenticación de google y validar si el usuario ha iniciado sesión o no. Si el usuario no ha iniciado sesión se le redireccionará a la página de inicio de sesión con el código

   if (user == null) {
            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
            return;
   }

A los usuarios que ya iniciaron sesión, se les mostrará el nombre configurado en su cuenta google y su ip. Si ejecutamos la aplicación en nuestra pc con el servidor de desarrollo que nos brinda el jdk de google con eclipse, veremos un diálogo para poner nuestro correo pero no nuestra contraseña, no se preocupe al publicarla se verá distinto.

Nuestro siguiente pasó será iniciar sesión en http://www.appspot.com con nuestra cuenta google y seleccionar la opción de "Crear nueva aplicación" / "Create an application" (al momento de escribir esto podremos crear hasta 10 applicaciones, pero no se preocupen, pueden borrar una app si deciden no utilizarla más)

El Application Identifier es como queremos llamar a nuestra aplicación y será la forma por cómo ingresaremos a ella, por ejemplo http://misuperaplicacion.appspot.com y ojo, recuerden el identificador que utilicen ya que será necesario para configurar nuestra app en desarrollo y poder subirla. Application Title es el nombre descriptivo que se mostrará a nuestros usuarios.

Una vez creada nuestra aplicación, procedemos a abrir el archivo appengine-web.xml del directorio war\WEB-INF de nuestro proyecto, localizamos la cadena  <application></application> y escribimos el ID de nuestra aplicación, por ejemplo: <application>misuperaplicacion</application> para el ejemplo anterior.

Finalmente podemos publicar nuestra aplicación, para ello damos clic derecho sobre la raíz de nuestro proyecto y buscamos la opción "Google" y "Deploy to AppEngine"

Indicamos nuestras credenciales de acceso y publicamos, una vez terminado podremos ir a nuestra aplicación con

Http://nuestroIdentificador.appspot.com/

A Experimentar con AppEngine!

Post a Comment