martes, 18 de diciembre de 2012

Java + Eclipse & Apache Tomcat en Windows Azure. ¡Buceando de principio a fin…!

WindowsAzure_And_JavaMuy buenas,

Cada día son más los clientes que me preguntan sobre cómo llevar sus aplicaciones Java a la Nube y, aunque conozco la teoría, me he querido enfrentar directamente al problema indagando en todo detalle para evitar así imprevistos de los que suelen surgir en el último momento. Además, creo que puede ayudarnos a estimar mejor y más claramente nuestro esfuerzo a la hora de comenzar una migración o un nuevo desarrollo en Windows Azure. De esta manera, el cliente, tendrá mucho más claro a que se enfrenta y cómo abordar este primer paso.

El tema no es para nada complicado, si bien es cierto, para los que pertenecemos al mundo Microsoft, puede resultar algo más “engorroso” de a lo que estamos acostumbrados. Es más, podemos llegar a desentendernos del tema por no tratarse de .NET y dejar al cliente sin su solución, sin embargo, se sigue tratando de una solución a un problema que Windows Azure si puede resolver y con bastante facilidad. ¡No debemos perder de vista este objetivo!

Aunque el IDE de Visual Studio .NET, proporciona grandes avances e infinidad de facilidades con respecto a cualquier otro IDE, para Java, Eclipse, está cogiendo carrera en esa misma dirección y, llega a hacer tan fácil la labor de desarrollo y despliegue en Windows Azure que no le tiene nada que envidiar.

¡Si aún no lo has intentado, esta es tu oportunidad y también el momento!

Veamos los pasos a seguir partiendo totalmente desde cero:

REQUISITOS PREVIOS Y PREPARACIÓN DEL ENTORNO DE DESARROLLO

1) Instalamos el SDK de Java desde aquí:

image

2) Instalamos Eclipse desde aquí u optamos directamente por “Eclipse IDE for Java EE Developers”.

3) Una vez instado Eclipse, instalamos el plugin para Windows Azure siguiendo los siguientes pasos e incluyendo este enlace: http://dl.msopentech.com/eclipse, en el campo Work with:”

imageimage

4) Una vez instalado el Plug-In chequeamos las actualizaciones para estar seguro de que tenemos la última:

imageimage

5) A continuación instalamos “Apache Tomcat” desde aquí: http://tomcat.apache.org/download-70.cgi.

Importante: El instalable (.exe) para Windows no funciona.  Después de tanto probar y Googlear en distintos foros Java, a este instalable le falta algo. En el último momento durante la ejecución siempre se produce el error: “Windows cannot find ‘startup.bat’. Make sure you typed the name correctly, and then try again”.

Así que, descargamos el (.ZIP) de 32bit o 64bits y lo descomprimimos por ejemplo en “C:\Program Files\Tomcat7\

6) Establecemos y actualizamos las siguientes variables de entorno para asegurar que nuestro entorno Java funciona todo correctamente.

DESARROLLO

7) Desde Eclipse, creamos un proyecto “File > New > “Dinamic Web Project” con el nombre “MyJavaApp1” y pulsamos “Finish

image

8) Añadimos un fichero JSP de prueba, “index.jsp” (a partir de la plantilla html), dentro de la carpeta “WebContent”:

imageimage

9) Añadimos a este fichero, a modo de ejemplo, en el tag <body> la instrucción “<b><% out.println("My first Java application to run on Azure!"); %></b>”.

10) Probamos que nuestra aplicación funciona correctamente, pulsando sobre el icono de “play” (image) y siguiendo los siguientes pasos:

image imageimage

11) Creamos el proyecto de despliegue en Windows Azure.  Aunque podemos hacerlos desde la opción de menú: “File > New > Windows Azure Deployment Project”, lo haremos más rápido haciendo “click derecho” sobre el proyecto Java “MyJavaApp1” y ”Windows Azure > Package for Windows Azure….” e introduciendo el nombre “MyJavaApp1Azure”. Seguidamente indicamos la información de nuestro JDK de Java y Servidor Tomcat y “Finish”.

imageimageimage

12) Una vez tenemos nuestro desarrollo listo,  aseguramos que nuestro servidor de Tomcat se ejecuta correctamente ejecutando nuestro proyecto web:

imageimage

Nota: Si se produce el error: “Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.”, revisaremos que los puertos 8080 y 8009, no están siendo usados. Para ello podemos ejecutar el comando “netstat -n -f -a -o” desde la línea de comandos y obtener el PID del proceso que esté usando dicho puerto y a continuación actuar en consecuencia. Para esta prueba, “maté” el proceso que lo utilizaba sin más.

EJECUCIÓN EN EL EMULADOR LOCAL

13) Al fin, ejecutamos Eclipse. En este punto es necesario, sin duda, tener instalado el Emulador de Windows Azure que podemos descargar desde la página de descargas de Windows Azure (SDK Only), o directamente desde aquí.

imageimage

DESPLIEGUE Y EJECUCIÓN EN WINDOWS AZURE

14) Desplegamos/Publicamos el proyecto directamente en Azure:

imageimage

Nota: ¡Aunque he dejado el password del certificado por defecto, Password1, las credenciales de conexión remota las he modificado a mi antojo!.

Tengamos en cuenta también, que la configuración anterior, puede ser modificada en cualquier momento, haciendo uso de las propiedades del proyecto de Azure (“MyJavaApp1Azure”):

image

Durante el despliegue puede ocurrir que no se llegue a realizar. ¿Por qué? Pues muy buena pregunta, porque al menos yo no he encontrado ningún fichero de log en el que mirar.

image

Si el error persiste, hacemos el despliegue manual (a partir de los ficheros “.cspkg” y “.cscfg” generados desde la opción “Build Cloud Package for Windows Azure”) desde el portal de Windows Azure, bien desde local o bien desde el storage, donde previamente habremos realizado la subida, por ejemplo con “Azure Storage Explorer”.

image

15) Esperamos a que finalice el proceso de subida de los ficheros al Storage de Azure y el despliegue, y tras ello, al acceder a la url “http://juanluelguerre.cloudapp.net/”, podremos ver como el Servidor Apache Tomcat ha sido instalado. Si a la misma añadimos la ruta de nuestra aplicación, “http://juanluelguerre.cloudapp.net/MyJavaApp1/index.jsp”, Voilá, tenemos nuestra aplicación Java ejecutándose en Azure !!!

imageimage

16) Si accedemos al portal, podremos ver nuestras instancias en ejecución. Y, además, podremos conectarnos vía terminal server con cada una de ellas.image image

Por último, ¿Qué ocurre si el servidor Web en lugar de ser Tomcat es otro, ej.: Jetty, etc….? Aunque el automatismo no es exactamente igual, las posibilidades son las mismas. Aquí os dejo por el momento algunos enlaces relacionados con Jetty:

Espero una vez más, haber despertado el interés y, por supuesto, que el post haya sido y sea de utilidad.

Saludos and Happy Azure from Java.  FELIZ NAVIDAD A TOD@S
Juanlu

Etiquetas: , , ,


This page is powered by Blogger. Isn't yours?