miércoles, 1 de mayo de 2013

Despliegue de Aplicación Web Con Ant

Retomando la secuencia de tutoriales sobre la creación de un ambiente de desarrollo, finalizaremos con el despliegue de nuestra aplicación usando para esto Apache Ant.
En el tutorial anterior vimos como instalar Ant en nuestra máquina, ya con todo instalado y nuestra aplicación creada, podemos realizar el despliegue mediante las tareas por defecto que se generan con el Proyecto JSF en el que venimos trabajando.

Revisando las Tareas.

Desde Eclipse podemos ver en la estructura creada con nuestro proyecto web, un directorio ant y dentro de este un archivo de propiedades y un build.xml



Como vemos, el build es el archivo xml donde se definen todas las tareas necesarias para el despliegue de nuestra aplicación, allí se define que queremos que se haga, si se genera el javaDoc, si se genera el jar, war, ear en fin, las tareas que queramos establecer.

El archivo build.xml debe tener una estructura general donde se define el nombre del archivo, las tareas requeridas y las dependencias entre ellas, podemos entender mejor la imagen anterior basandonos en la siguiente estructura.


como lo mencionamos, nuestra la aplicación por defecto tiene unas tareas configuradas, si vemos, cumple con la estructura anterior, teniendo por defecto un nombre y tareas asignadas que funcionan sin inconvenientes, así como la tarea por defecto que en este caso es el target deploy, para verificar esto podemos ejecutar la tarea ingresando a la vista Ant desde "Windows/Show view..." y buscamos Ant 


Acto seguido se carga el panel de ant donde simplemente arrastramos nuestro build.xml


Como vemos toma el nombre definido en su configuración, y observamos también las tareas que la componen, la tarea por defecto es deploy, al ejecutar esta se empiezan a ejecutar todas las tareas establecidas como dependencia, sin embargo podemos ejecutar una a una las tareas y obtenemos el mismo comportamiento, por ejemplo, si no queremos desplegar toda la aplicación, sino que solo queremos eliminar despliegues anteriores, solo ejecutamos la tarea clean.

si ejecutamos la tarea deploy, inicia el proceso de despliegue de la aplicación, el cual realiza el empaquetado del proyecto mediante la tarea war y lo almacena en la ruta definida en el archivo, el nombre del war también depende del nombre configurado en el build.xml, tomando el nombre definido para la propiedad "war.name", la ruta por defecto en este caso es en el directorio build que se genera en el workspace de nuestro proyecto.

Configurando el build.xml.

Como vimos ya desplegamos nuestra aplicación, el proceso simplemente consiste en generar los .class, generar los directorios y evaluar lo requerido para empaquetar el proyecto en un .war.
Sin embargo lo anterior solo almacena nuestro empaquetado en la ruta por defecto, nosotros necesitamos que se almacene en la carpeta deploy del JBoss para poder realizar el despliegue sin depender del IDE (al hacer Run as desde Eclipse) sino desde el run.bat en el servidor.

Para esto definimos en el archivo de propiedades (desde el directorio ant del proyecto) los parámetros necesarios para establecer la nueva ruta de despliegue.



Agregamos la propiedad jboss.home la ruta del Jboss instalado y jboss.domain la estableceremos en la carpeta default del servidor (Haciendo pruebas con otro Eclipse, no pude editar el archivo de propiedades desde el IDE, por eso recomiendo que habrán el archivo mediante algún editor que lo soporte, para ese caso pueden utilizar Notepad++)

después de tener los nuevos parámetros, vamos a editar el archivo build.xml, lo abrimos y empezamos a configurar las propiedades necesarias para el despliegue.
 


Como vemos, cambiamos el nombre del archivo por algo mas significativo, además hicimos las siguientes modificaciones:

project.name : Establecemos el nombre del proyecto, con esta propiedad asignaremos el nombre del empaquetado (la propiedad project name define el nombre del archivo xml)

dist.dir : Agregamos la  propiedad y asignamos el value dist, esto crea una carpeta dist en el proyecto y allí se copiara el .war generado.

jboss.domain : Agregamos la propiedad creada anteriormente, se usa esta para establecer la ruta donde se almacena el .war en el servidor.

deploy.dir : Esta propiedad ya existía, pero la cambiamos de lugar, además modificamos el value, anteriormente se creaba una copia del .war en la carpeta deploy del proyecto, ahora modificando el value y usando las propiedades jboss.home y jboss.domain establecemos la ruta de despliegue a la ruta "C:\jboss-4.2.3.GA\server\default\deploy" donde se copiará el empaquetado del proyecto.

war.name : Esta propiedad define el nombre del empaquetado, se almacenará en la carpeta build del proyecto con el nombre definido en project.name y la extensión .war

Al final del archivo encontramos el target "deploy" el cual es el definido por defecto, lo modificamos estableciendo que se realice otra copia del .war en la carpeta dist, así como en el deploy del servidor.


Después de esto, guardamos los cambios y vemos que en el panel de Ant se actualiza nuestro archivo, desde el cual podemos ejecutar la tarea deploy nuevamente.


Si ya ejecutamos el despliegue antes de las modificaciones, vamos al proyecto y eliminamos los .war generados con anterioridad, así como el generado en la carpeta deploy del servidor, esto para evidenciar el proceso (Si se ejecuto desde aquí debemos tener un kickStar.war, se puede eliminar ya que se va a crear un archivo diferente), luego de esto ejecutamos la tarea.


Vemos que empieza nuevamente el proceso de despliegue, pero esta vez se evidencian los cambios realizados, cuando se ejecuta la tarea war, se crea el archivo con el nombre definido en la carpeta build del proyecto. 

luego vemos que se copia el .war generado y se almacenan en la carpeta deploy del servidor y en la carpeta dist respectivamente, también en Eclipse se crea una referencia al servidor mediante la propiedad jboss.home y allí podemos ver el resultado del despliegue.


En caso de que no se ejecute el proceso, se recomienda revisar los pasos anteriores y que no existan problemas con el proyecto, también se pueden eliminar las carpetas temp y work del servidor, ya que en ocasiones por la cantidad de despliegues los archivos temporales son almacenados allí y pueden provocar inconsistencias en los despliegues (Fuente : Experiencia propia :S ).


Ya tenemos el despliegue configurado para realizarlo directamente desde el servidor, si lo realizamos nuevamente, por medio de la tarea clean se borran las referencias y se ejecuta nuevamente el proceso, ya solo seria cuestión de lanzar el run.bat y acceder a nuestra aplicación.

Conclusiones.

Hasta aquí ya vimos como configurar un ambiente de desarrollo (lo único pendiente es la instalación del JDK pero en proximos tutoriales tengo pensado explicarlo en detalle), vimos como crear una aplicación web sencilla y la forma de realizar el despliegue de la aplicación, vimos algunas caracteristicas de las diferentes herramientas utilizadas, evidenciamos como nos facilitan este tipo de procesos y la importancia de contar con un ambiente bien configurado, espero que sea útil y sirva como base para procesos mucho mas robustos.

Y listo!!!! esto fue lo básico en configuración de ambientes Mas adelante podremos retomar el tema de las aplicaciones web haciendo ejemplos de diferentes formas de crear proyectos así como la creación de algunos proyectos mas complejos, también hay un tema pendiente de integración continua donde podremos hacer seguimiento a nuestras aplicaciones.............Espero nuevamente que les sea de útilidad!!!!



También te podría Interesar. 


¿Hay algo que quieras anexar o comentar sobre esta entrada?  no dudes en hacerlo....

1 comentario:

  1. Por que metes el .war en las carpetas dist y en la build?? Si solo con meterla en la de deploy del servidor te levantaria. Otra cosa... como se configuraria si lo que tengo es un servidor virtual con un pluggin en el eclipse y quiero hacer despliegues en caliente....por ejemplo tocar solo jspx?? Gracias

    ResponderEliminar

Eres libre de realizar cualquier comentario, desde que pueda ayudar con gusto lo atenderé, y si es un critica, bienvenida sea!!!