Desde hace bastante tiempo, la plataforma Microsoft Azure lleva dando soporte a otros lenguajes como son Java, Phyton o PHP. Una forma fácil de trabajar con ellos es a través del servicio de web sites, donde se no permite con un simple clic añadir el soporte para cada uno de ellos:
En el caso de Java, las opciones que nos aportan como servidor web son Tomcat y Jetty:
¿Y si quisiéramos trabajar con JBoss?
En este post voy a mostrar cómo es posible instalar JBoss en Cloud Services a través del IDE de Eclipse, donde no sólo subiremos la aplicación en Java, sino también el servidor web que debe servir el sitio.
Instalaciones
Partiendo desde cero, estos son los requisitos necesarios para este escenario:
- Es necesario Azure SDK 2.3.
- En el momento de escribir este post, la version más reciente de JBOSS soportada por el plugin de Eclipse es JBoss AS 7, por lo que es necesario hacer uso de Java Development Kit 7 para que funcione correctamente.
- Añadir a la variable PATH la ubicación de la instalación del runtime de Java:
- Eclipse IDE for Java EE Developers, Indigo o superior (en el momento del post la versión es Kepler).
- Una vez descargado Eclipse, instalamos el plugin que nos da las opciones de Azure dentro del IDE: Help > Install New Software… > Work with http://dl.msopentech.com/eclipse > Deshabilitar Contact all update sites during install to find required software. Avanzamos en el Wizard, aceptamos la licencia y reiniciamos Eclipse cuando lo solicite.
Configuración de JBOSS en local
Antes de iniciar cualquier subida al cloud, lo primero es comprobar que el servidor y la aplicación funcionan correctamente en local. Para ello, lo primero que vamos a hacer es crear un servidor web JBoss desde Eclipse.
Para ello, nos posicionamos en la pestaña Servers y hacemos clic sobre en enlace No servers are available. Click this link to create a new server… o bien con el botón derecho seleccionamos New > Server.
Si nos fijamos en el listado de JBOSS, la última version es la 5.0, por lo que haremos click en Download additional server adapters con el objetivo de descargar JBossAS Tools.
Una vez que volvamos a acceder al listado de servidores disponibles, veremos que la lista ha aumentado y ya podremos seleccionar JBoss AS 7.1:
En el siguiente paso, es necesario descargar el servidor de JBoss, y podemos hacerlo directamente desde el asistente haciendo clic sobre Download runtime and install…
Dentro del listado seleccionamos JBoss AS 7.1.1 (Brontes), avanzamos en el asistente y seleccionamos la carpeta de instalación (asegurate de tener permisos sobre la ubicación que elijas).
A partir de este momento comenzará la descarga y la descompresión de JBoss.
Los últimos pasos para la configuración de JBoss son:
- Modificar el valor de Home Directory a la ubicación de nuestra instalación de JBoss
- Asegurarnos de que el JDK seleccionado para el servidor es la version 7, ya que en otro caso no funcionará correctamente.
Avanzamos sobre las opciones por defecto y terminamos con el asistente. En la pestaña Servers veremos que se han creado dos servidores en lugar de uno. No es necesario mantener los dos, por lo que en mi caso elimino uno de ellos y me quedo con JBoss 7.1 Runtime Server.
Projecto de ejemplo
Para comprobar tanto en local como en Azure que nuestro servidor funciona correctamente, vamos a crear un proyecto del tipo Dynamic Web Project (File > New > Dynamic Web Project) con la siguiente configuración:
Dejamos Los siguientes pasos del asistentes con los valores por defecto.
En el apartado WebContent creamos un nuevo archivo del tipo JSP File. En este post se llamará index.jsp, para que lo tome como documento de inicio por defecto.
El contenido del archivo será el siguiente, con el objetivo de ejecutar algo de código en Java y además saber cuál es la instancia del worker role que está atendiendo la petición:
<%@page import="java.net.InetAddress"%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>JBoss on Microsoft Azure PaaS</title> </head> <body> <article> This is <%= InetAddress.getLocalHost().getHostName() %> instance. </article> </body> </html>
Creación del proyecto de Azure
Antes de realizar la subida al cloud, es necesario crear el proyecto asociado de Azure con la configuración de nuestro servicio. Para ello hacemos clic con el botón derecho sobre el proyecto que acabamos de crear y seleccionamos Azure > Package for Azure…
Eligimos el nombre del proyecto (MyAzureProject) y nos aseguramos de que la pestaña del JDK tiene la siguiente configuración:
En la pestaña de Server debemos seleccionar la ubicación del servidor de JBoss que creamos anteriormente:
En Applications debe aparecer el archivo .war correspondiente al proyecto desde el que hemos creado dicho paquete.
Existe un último apartado, el cual contiene una serie de características opcionales:
Para este ejemplo no seleccionaremos ninguna de ellas.
Emulación en local
Una vez creado el proyecto de Azure, podemos posicionarnos sobre él y lanzar la emulación en local, comprobando que todo funciona según lo previsto:
Este proceso puede tardar algunos minutos ya que realiza la completa emulación de este escenario (crear un worker role, descargar dentro del mismo el servidor web, montarlo, etcetera).
El resultado debe ser similar al siguiente:
Por el lado del worker role veremos un mensaje que pone java.exe is running…:
Para ver el sitio que está desplegado dentro del emulador, basta con acceder al navegador y escribir: http://127.0.0.1:8080/MyJavaHelloWorld:
Además si accedemos a la raíz del sitio, veremos que se trata de la versión de JBoss seleccionada (antes de hacer una subida a producción es necesario modificar la configuración para eliminar este tipo de información ;)):
Subida a un Cloud Service
Para realizar la subida, hacemos clic con el botón derecho sobre el proyecto de Azure y seleccionamos Azure > Deploy to Azure Cloud, lo cual nos abrirá un asistente donde deberemos importar la configuración de nuestra suscripción a través del botón Import from PUBLISH-SETTINGS file…. A través de él se nos permite seleccionar el archivo de configuración de nuestro disco duro y además existe un botón que abre una ventana del navegador y descarga la configuración de la cuenta de Azure con la que nos loguemos.
Una vez importada la configuración, basta con seleccionar la cuenta de Microsoft Azure Storage que queremos utilizar y cuál será el nombre del Cloud Service donde queremos desplegar la solución:
Este proceso puede tardar unos minutos.
Una vez finalizado, podemos hacer clic directamente en el enlace Published de la ventana Azure Activity Log que nos llevará al sitio desplegado:
Por último, otra prueba interesante sería modificar el número de instancias que sirven la aplicación, para comprobar que efectivamente balancea nuestro sitio. Para ello podemos modificar el número de instancias desde el portal o bien editar la configuración del paquete de Azure desde Eclipse:
Desplegamos las opciones de la izquierda y seleccionamos la opción Roles. Hacemos clic en WorkerRole1 y seleccionamos Edit para modificar el valor:
Espero que haya sido de utilidad.
¡Saludos!