martes, 2 de julio de 2013

Maven para desplegar en un Tomcat desde el Eclipse


En esta entrega vamos a ver en 5 pasos cómo desplegar un war realizado con maven en un tomcat local o remoto desde el eclipse.
Vamos a asumir que tenemos un eclipse con los plugins de Maven y que tenemos un tomcat en nuestro ordenador. En nuestro caso vamos a desplegar un war que de un proyecto Maven, llamado starter que genera un artefacto "andy.war".
La versión de eclipse utilizada es Helios y los tomcat son un 5.5 en local y un tomcat 6 sobre una máquina virtual(remoto). Por lo demás creo que no hay nada más especial, la versión del jdk es la 1.6 y como plugins en el eclipse además de los de maven el de subversion apuntando a un repositorio de una máquina virtual.
Primer paso: Crear una cuenta de manager en tomcat:
Para ello vamos hasta el directorio del tomcat, carpeta conf y allí editamos el archivo "tomcat-users.xml"
<tomcat-users>
<role rolename="manager"/>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="manager"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
</tomcat-users>
En un alarde de ingenio y originalidad creamos una cuenta "tomcat" con contraseña "tomcat" con el rol de "manager". Siéntete libre de crear la cuenta de manager con usuario "dsx58969" y contraseña "g8r45ft"... pero luego acuerdate de ellos.
Segundo paso: Indicarle a Maven nuestro tomcat.
Para lo cual debemos editar el archivo setting.xml de la carpeta .m2. Dicha carpeta se debería encontrar en el directorio del usuario.
Allí está casi todo comentado, pero nos encontreremos un apartado "servers" en el cual vamos a definir nuestro servidor. Podemos definir varios.
<server>
<id>beaduerme</id>
<username>tomcat</username>
<password>tomcat</password>
</server>
Yo le he puesto el identificador "beaduerme" pero puedes ponerle otro cualquiera. El lector sagaz tardará poco en verle la lógica a los otros dos parámetros: username y password. Quizá en tu caso sea "dsx58969".....:-P
Destacar el hecho de que los parámetros de conexión residen en un archivo que no se suele intercambiar, el de preferencias de maven. Si estuviesen en el pom cada miembre del equipo tendría que cambiarlo a los de su tomcat local.
Tercer paso. Editar el POM.
Es preciso añadir al pom.xml el plugin apropiado en al apartado del build.
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>
  <configuration>
   <server>beaduerme</server>
   <path>/andy</path>
  </configuration>
</plugin>
El groupId y el artefacto son los que corresponden para poder ejecutar la tarea maven apropiada. A nosotros nos corresponde la configuración. En server ponemos el identificador que hemos definido en la configuración de maven y en el path la ruta donde debe desplegarse el war. En mi caso voy a desplegar una aplicación andy.war
El apartado build del pom, quedaría como esto:
<build>
<finalName>andy</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>beaduerme</server>
<url>http://localhost:7777/manager</url>
<path>/andy</path>
</configuration>
</plugin>
</plugins>
</build>
En el subapartado de configuración del plugin hemos puesto la url del tomcat. Si estuviesemos utilizando el puerto por defecto del tomcat, el 8080, sería innecesaria dicha linea.Ya que el plugin toma por defecto "<url>http://localhost:8080/manager</url>". Si el path que queremos para desplegar es el implicito del war también podríamos prescindir de la linea path.
El puerto por defecto de escucha se configura desde el archivo server.xml que se encuentra en la carpeta conf del tomcat.
<Connector port="7777" maxHttpHeaderSize="8192"
maxThreads="50" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443"
connectionTimeout="20000" disableUploadTimeout="true" />
Cuarto paso: Lanzar el tomcat.
Por ejemplo ir hasta la carpeta bin del tomcat y hacer doble click sobre startup.bat.
Puede ser el momento apropiado para comprobar que podemos acceder desde localhost al manager con el nombre de usuario y contraseña que hemos indicado en el paso 1.
Destacar que el tomcat puede estar en una máquina remota y/o estar escuchando en otro puerto, lo único que cambiará en el pom la url.
Se ha probado este minitutorial desplegando en un tomcat 5.5 local y en un tomcat6 remoto. Merece la pena destacar que en el tomcat 6 se indica que a la hora de definir usurios y roles indica que hay que definir un "manager-gui", en versiones anteriores era "manager", para entrar en la consola de gestión.... Para que el plugin funcione correctamente en el tomcat 6 hay que definir el rol como "manager".
Así el tomcat-user.xml del tomcat 6 es tal que así:
<tomcat-users>
<!-- TOMCAT 6
NOTE: By default, no user is included in the "manager-gui" role required to operate the "/manager/html" web application. If you
wish to use this app, you must define such a user - the username
and password are arbitrary.
-->
<role rolename="manager"/>
<user username="tomcat" password="tomcat" roles="manager"/>
</tomcat-users>
Quinto paso. Desplegar desde el eclipse
Para ello iremos a Run As.. Run Configurations ...
Ojo. Para que esto funcione el tomcat tiene que estar lanzado. "Deploy" no lanza el tomcat
Y escribiremos en una configuración de maven el "Goal" tomcat:deploy
Si la ejecutamos la salida en la consola del eclipse debería ser algo como esto...
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Struts 2 Starter 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> tomcat-maven-plugin:1.1:deploy (default-cli) @ andy >>>
.......
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running es.home.andy.prueba.HelloWorldActionTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.031 sec
Running es.home.andy.prueba.IndexActionTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ andy ---
....
[INFO] <<< tomcat-maven-plugin:1.1:deploy (default-cli) @ andy <<<
[INFO]
[INFO] --- tomcat-maven-plugin:1.1:deploy (default-cli) @ andy ---
[INFO] Deploying war to http://localhost:7777/andy
[INFO] OK - Desplegada aplicación en trayectoria de contexto /andy
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.594s
[INFO] Finished at: Sun Nov 06 11:47:08 CET 2011
[INFO] Final Memory: 5M/35M
[INFO] ------------------------------------------------------------------------
Nos compila, pasa los test y nos despliega en el tomcat.
Para replegarla podemos crear otra configuración identica a la anterior con el Goal "tomcat:undeploy". Al ejecutarla obtenemos en la consola del eclipse el resultado esperado
....
[INFO] ------------------------------------------------------------------------
[INFO] Building Struts 2 Starter 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- tomcat-maven-plugin:1.1:undeploy (default-cli) @ andy ---
[INFO] Undeploying application at http://localhost:7777/andy
[INFO] OK - Replegada aplicacación en trayectoria de contexto /andy
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.906s
[INFO] Finished at: Sun Nov 06 12:22:09 CET 2011
[INFO] Final Memory: 3M/15M
[INFO] -----------------------------------------------------------------------
Apendice
Se ha probado a desplegarlo en un tomcat remoto, en 192.168.2.54 simplemente cambiando en el pom. En ese tomcat tengo el mismo usuario y pass para el rol de manager.
Si tuviera distintos user/pass podría definir en el setting.xml de maven otro server y referenciarlo en el pom apropiadamente
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<server>beaduerme</server>
<url>http://192.168.2.54:7000/manager</url>
<path>/andy</path>
</configuration>
</plugin>

jueves, 6 de junio de 2013

Editor Xpath

http://www.online-toolz.com/tools/xpath-editor.php

Script de arranque para jboss

# Jboss
#
# chkconfig: 3 80 20
# description:  Start up the Jboss servlet engine.

start(){
    echo ">> Iniciando JBOSS"
    sudo nohup /opt/oggi/jboss4/bin/run.sh > /dev/null &
}

stop(){
    echo ">> Parando JBOSS"
    /opt/oggi/jboss4/bin/shutdown.sh --server="0.0.0.0" -S &
}


case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    *)
        echo "Usage: jboss {start|stop|restart}"
        exit 1
    ;;
esac

exit 0


miércoles, 5 de junio de 2013

Activar o desactivar servicios al inicio de Ubuntu o Debian

Y siguiendo el tema hace poco vi en Paraiso Linux una herramienta que nos permite activar y desactivar servicios de manera gráfica, sencilla y rápida.
La herramienta en cuestión se llama sysv-rc-conf y se instala escribiendo en una terminal lo siguiente:

sudo apt-get install sysv-rc-conf

Para ejecutarla escribimos:

sudo sysv-rc-conf

Esto nos abrirá algo mas o menos así:



- Cada línea representa un servicio que puede estar activado o desactivado.
- Cada columna representa un runlevel (iniciado, en uso, detenido, reiniciado).
- El runlevel por defecto en Ubuntu o Debian es 2.
- CTRL+N sirve para pasar a la siguiente página de servicios y CTRL+P para ir a la página anterior.
- Con las flechas podemos desplazarnos.
- Con la barra espaciadora podemos marcar o desmarcar una casilla.
- Con la tecla "-" detenemos un servicio.
- Con la tecla "+" iniciamos un servicio.
- Con la tecla Q salimos.
- Para deshabilitar un servicio al inicio, generalmente hay que desmarcar las casillas de las columnas 2 y 5 correspondientes al servicio. Para volver a habilitarlo, marca nuevamente estas casillas.

Arrancar Tomcat como servicio

1. Crear un script en /etc/init.d para automatizar tomcat

# cd /etc/init.d
# vi tomcat

2. Digite lo siguiente:
#!/bin/bash
#
# Iniciación automatica de TOMCAT6D
#
# chkconfig: 2345 55 25
# description: Demonio de iniciación TOMCAT6D 6.0.29
#
# processname: tomcat6d
# pidfile: /var/run/tomcat6d.pid

export JAVA_HOME=/usr/java/jdk1.6.0_20
export CATALINA_HOME=/usr/local/tomcat
start(){
       echo "Iniciando Tomcat6"
       $CATALINA_HOME/bin/startup.sh
       }

stop() {
       echo "Deteniendo Tomcat6"
       $CATALINA_HOME/bin/shutdown.sh
       }
restart(){
       stop
       start
         }

# See how we were called.
case $1 in
     start)
        start
;;
     stop)
        stop
;;
     restart)
        restart
;;
     *)
echo "Utilice los Parámetros: $0 {start|stop|restart}"
     exit 1
esac
     exit 0


2. Cambiar los permisos, para que se pueda ejecutar


# chmod a+x /etc/init.d/tomcat

3. Agregar este script to servicios de sistema
# chkconfig --add tomcat 
4. Verificar modficaciones (este script utiliza Niveles 2,3 y 4)
# chkconfig --level 234 tomcat on
# chkconfig --list tomcat


5.- Agregamos este scrip como un link simbolico para que se inicie automaticamente.
#ln -s /etc/init.d/tomcat /etc/rc5.d/S71tomcat

El 71 es un numero que uno elige segun para que sepa despues o antes de que proceso quiere que se inicie, logicamente debe ser despues que se haya iniciado mysql echen una mirada a al /etc/init.d
Revisar en la lista que este servicio este utilizando estos Niveles 2, 3 y 4:
tomcat 0:off 1:off 2:on 3:on 4:on 5:off 6:off
6. Probar el script con start/stop
# service tomcat start
# service tomcat stop
A este punto el servicio tomcat se ejecutará automáticamente al iniciar el servidor.



http://demetole.blogspot.com.es/2010/07/iniciar-automaticamente-tomcat-en.html