Instalar JBoss en CentosInstalar Jboss en Centos
Hace mucho tiempo que venía escuchando sobre Jboss, pero mi interés solo era de conocer, para que servía y que se podía hacer con el, pues bien, por motivos laborales tuve que retomar lecturas, definiciones sobre Jboss, no comentaré que es, y para que sirve, lo que leerán aquí es la instalación y algunos tips sobre la instalación, pues bien empecemos ... Para realizar la instalación, esta será usando centOS, también puede usarse en RHEL u OpenSuse.
Disco duro de 120Gb, 2Gb Ram, y CPU Core 2 Duo 2.4Ghz, deben contar con acceso al usuario root
1.- Comprobamos la versión de Java
#java -version
2.- Si tenemos algún mensaje en consola por ejm. "java version 1.4" está bien, pero sino, es igual, ya que usaremos la versión actual de Java para nuestra instalación.
Tip.- si desean borrar java, pueden ejecutar: yum remove java
3.- Nos dirigimos este enlace para descargar la última versión de java. Tip. Descargen JDK 6u21 o la que sea la más actual, y a su vez pueden escoger la plataforma que deseen, i386 o x86_64 y en el formaro "rpm.bin"
4.- Una vez descargado ejecutamos:
#chmod 755 jdk-6u21-linux-i386-rpm.bin
5.- Ahora ejecutamos:
#./jdk-6u21-linux-i386-rpm.bin
6.- Ejecutamos lo siguiente para saber la versión de java:
#java -version
7.- Creamos la carpeta "java" en el directorio opt:
#mkdir -p /opt/java
8.- Realizamos un enlace simbólico al directorio java:
#ln -s /usr/java/jdk1.6.0_21 /opt/java
9.- Crearemos un fichero ejecutable, en el indicaremos el "JAVA_HOME" que es muy importante para nuestra instalación, este "script" estará en la ruta /etc/profile.d:
#vim /etc/profile.d/java.sh
- - - -
#java
JAVA_HOME=/opt/java/jdk
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/lib LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/i386
export JAVA_HOME PATH CLASSPATH LD_LIBRARY_PATH
- - - -
Tip. En LD_LIBRARY_PATH, deben de escoger si, por ejm. su server es X86_64, /lib/amd6410.- Ahora damos permisos de ejecución al script y lo ejecutamos:
#chmod 755 /etc/profile.d/java.sh #sh /etc/profile.d/java.sh
11.- Ahora que tenemos java configurado, procedemos a instalar Jboss.
12.- Procedemos a descargar Jboss de este enlace yo, he descargado la version 4.3, el método de instalación funciona para cualquiera de las versiones.
13.- Descomprimimos Jboss:
#unzip jboss-4-0.3.GA-jdsk6.zip -d /usr/java
14.- Creamos un enlace simbólico:
#ln -s /usr/java/jboss-4.0.3.GA /opt/java/jboss
15.- Creamos el script "jboss.sh" en la ruta /etc/profile.d/
# vim /etc/profile.d/jboss.sh
- - -
# JBoss As
JBOSS_HOME=/opt/java/jboss
PATH=$PATH:$JBOSS_HOME/bin
export JBOSS_HOME PATH
- - -
16.- Damos permisos de ejecución y ejecutamos el script:
#chmod 755 /etc/profile.d/jboss.sh #sh /etc/profile.d/jboss.sh
17.- Agregamos el usuario "jboss"
#adduser jboss o useradd jboss
18.- Cambiamos permisos en la carpeta "jboss":
#chown -Rf jboss.jboss /opt/java/jboss/
19.- Ingresamos con el user "jboss":
#su jboss
20.- Ahora ejecutaremos el "run.sh", script por default que inicia los servicios para Jboss: $/opt/java/jboss/bin/run.sh
21.- Ahora, si queremos que escuche cualquier ip:
$/opt/java/jboss/bin/run.sh -b 0.0.0.0 (Tiene que digitar 0.0.0.0, con esto publica a toda la red)
22.- Si revisamos el log, veremos un mensaje así:
18:23:18,035 INFO [ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)] Started in 1m:15s:48
23.- Para ingresar al panel de Jboss, desde nuesto browser: http://ip_server:8080
Espero que les sea de utilidad, y para la próxima, escribiré como crear instancias, definir proyectos bajo instancias y más.
Si usas JBoss desde consola debes modificar el archivo run.bat o run.sh, encontrarás en el script una parte que dice:
"%JAVA%" %JAVA_OPTS% ^ -Djava.endorsed.dirs="%JBOSS_ENDORSED_DIRS%" ^ -classpath "%JBOSS_CLASSPATH%" ^ org.jboss.Main %*Debe modificarse a:
"%JAVA%" %JAVA_OPTS% ^ -Djava.endorsed.dirs="%JBOSS_ENDORSED_DIRS%" ^ -classpath "%JBOSS_CLASSPATH%" ^ org.jboss.Main -b0.0.0.0 %*(El 0.0.0.0 puede ser modificado si deseas colocar una IP específica)
Otra forma es iniciarlo desde la línea de comandos pasando el parámetro:
run -b 0.0.0.0
El objetivo de este manual es explicar breve y básicamente la estructura de este servidor de aplicaciones.
Hay que aclarar que esta descripción es igual para Linux que para Windows.
El Jboss escucha por defecto en el puerto 8080.
El servidor de aplicaciones Jboss es libre y puede descargarse de la pagina oficial de la comunidad
Una vez descargado y descomprimido o instalado, analizaremos los directorios mas importantes.
Bajo la carpeta principal JBOSSX.X.X, se crearan los siguientes directorios
- BIN
- CLIENT
- LIB
- LICENSES
- SCRIPT
- SERVER
Los que mas usaremos serán BIN y SERVER. En ellos se alojarán los archivos ejecutables y nuestras aplicaciones, respectivamente.
EL DIRECTORIO BIN
Aquí se encuentran los ejecutables y los ficheros de configuración de la aplicación.
Los más importantes son:
- JBOSS_INIT_REDHAT y JBOSS_INIT_SUSE: son scripts muy básicos para convertir nuestro Jboss en un daemon (servicio). Estos ficheros son exclusivos de Linux y sirven (como su nombre indica) para distros RedHat o Suse respectivamente.
- RUN.BAT: Es el ejecutable por excelencia. Sirve para levantar nuestro Jboss en Windows.
Este fichero se puede editar (como todos los punto BAT) para modificar la ubicación de nuestra maquina JAVA por ejemplo. Otra linea para modificar muy importante es la siguiente:
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -server -XX +UseConcMarkSweepGC -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000
En esta linea, podemos configurar cuanta memoria reservaremos para el servidor. -Xms indicara el valor mínimo. -Xmx, el máximo.
- RUN.SH: es el ejecutable por excelencia, pero de los sistemas Linux. Sirve para levantar nuestro Jboss. A diferencia de Windows, en este archivo no se puede modificar la cantidad reservada de memoria para la aplicación. Este archivo apunta a otro para coger la configuración. Este archivo se llama RUN.CONF
- RUN.CONF: este archivo contiene las opciones de las que leerá el RUN.SH para arrancar Jboss. Es exclusivo de Linux.
- RUN.JAR: es el ejecutable para Java.
- SHUTDOWN.BAT: Sirve para detener nuestro servidor Jboss en Windows.
- SHUTDOWN.SH: Sirve para detener nuestro servidor Jboss en Linux.
Si no hay errores, al ejecutar RUN.BAT (Windows) o RUN.SH (Linux) podremos acceder al Jboss, poniendo en un navegador la dirección IP donde esta instalado el servidor con el puerto 8080.
EL DIRECTORIO SERVER
Para empezar nos encontraremos con 3 carpetas (MINIMAL, ALL, DEFAULT) cada carpeta cargara mas o menos servicios al ejecutar el Jboss. Cuanto mas servicios por defecto mas memoria consumirá nuestro servidor de aplicaciones.
La parte que explicaremos es la de DEFAULT, aunque también es valida para las otras 2 opciones.
Dentro de la carpeta DEFAULT, encontraremos los siguientes directorios:
- CONF
- DEPLOY: Este directorio es el mas importante, ya que ahí se alojara nuestra aplicación. Esta puede ser un archivo .WAR, .SAR, etc. El Jboss cargará todas las aplicaciones que copiemos aquí.
- LIB: las librerías del Jboss.
- LOG: aquí se encuentran dos archivos.
- BOOT.LOG: Es un archivo de texto plano, donde registra todas las incidencias producidas al inicio del Jboss.
- SERVER.LOG: Es un archivo de texto plano, donde registra todas las incidencias producidas por el servidor de aplicaciones, incluido los errores producidos por nuestra aplicación. Este fichero “rota” diariamente generando ficheros con el siguiente formato server.log.2009-x-x con los logs de días anteriores. Hay que controlar estos archivos, ya que suelen ser muy pesados y si no los borramos pueden saturar en pocos días nuestro disco duro.
- TMP: archivos temporales.
- WORK: mas archivos temporales.
Aumentar el tamaño de memoria de la máquina virtual en Java
En Java, hay varios parámetros para controlar el tamaño inicial y el tamaño máximo que puede tomar la máquina virtual.
Además, hay que tener en cuenta el tipo de memoria sobre el que se quiere actuar: heap, non-heap (PermGen). Los valores por defecto que se dan corresponden a máquina virtuales de Sun, y son orientativos, porque pueden cambiar entre versiones de la máquina virtual. Los parámetros son los siguientes, fijándose a 128Mb.
* -Xms128m: Tamaño de inicio de la máquina virtual de Java a 128Mb. El valor por defecto son 64Mb. Si se aumenta este valor, se elimina el tiempo que se tardaría en aumentar el tamaño en memoria de la máquina virtual si se llegara el caso de que se necesitara más memoria, por lo que aumentaría el rendimiento en los casos que la aplicación haga uso intensivo de la memoria.
* -Xmx128m: Tamaño máximo de la máquina virtual de Java a 128Mb. El valor por defecto son 128Mb. Si la aplicación supera el tamaño máximo de memoria que marca este parámetro, se lanza la excepción java.lang.OutOfMemoryError. No conviene asignar a este parámetro el máximo de la memoria de la máquina porque si ya no queda memoria física disponible (por la que usa el sistema operativo u otras aplicaciones) se pueden producir escrituras en memoria asignada a otros programas y provocar un auténtico lío.
* -XX:PermSize=128m: Tamaño de inicio de la memoria de tipo PermGen a 128Mb. Arrancar la máquina virtual con un valor superior al por defecto agiliza la carga de aplicaciones, sobre todo en el caso de aplicaciones que hagan uso intensivo de este tipo de memoria (Spring, Hibernate…)
* -XX:MaxPermSize=128m: Tamaño máximo de la memoria de tipo PermGen a 128Mb. El valor por defecto son 64Mb. Si la aplicación supera el tamaño máximo de memoria para este tipo que marca este parámetro, se lanza la excepción java.lang.OutOfMemoryError: PermGen space. El valor necesario para este parámetro siempre suele ser menor que el de la memoria de tipo heap.
Si se quiere especificar un valor distinto de 128Mb, que se utiliza para todos los parámetros como ejemplo para simplificar, bastaría con sustituir el valor 128 del parámetro con el que se desee, siempre que sean múltiplos de 2 (64, 128, 256, 512, 768, 1024, 2048…)
Conocidos los tipos de memoria y los parámetros que los controlan, ahora viene la pregunta, ¿cómo especifico estos valores para mi aplicación? La respuesta es la misma para todos los casos: Los valores se especifican como parámetros en el arranque de la máquina virtual que ejecutará la aplicación. La diferencia estribará en cómo se arranca la aplicación: con un script, desde línea de comandos, mediante ant…
A continuación se dan distintos ejemplos de modificación de la memoria de distinta forma. No es necesario especificar todos los parámetros, se pueden especificar todos o ninguno (y se tomarían los valores por defecto)
Línea de comandos
* Ejecución de un jar: java -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -jar example.jar
* Ejecución de una clase: java -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m com.programacionenjava.examples.MemoryExample
Ant
Script
Si el arranque de la máquina virtual se produce en un script, hay que editar el script y añadir estos parámetros en la sentencia de arranque. El siguiente ejemplo muestra cómo añadir estos parámetros en el script de arranque de un Tomcat.
* En Windows: set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m
Tomado de
Además, hay que tener en cuenta el tipo de memoria sobre el que se quiere actuar: heap, non-heap (PermGen). Los valores por defecto que se dan corresponden a máquina virtuales de Sun, y son orientativos, porque pueden cambiar entre versiones de la máquina virtual. Los parámetros son los siguientes, fijándose a 128Mb.
* -Xms128m: Tamaño de inicio de la máquina virtual de Java a 128Mb. El valor por defecto son 64Mb. Si se aumenta este valor, se elimina el tiempo que se tardaría en aumentar el tamaño en memoria de la máquina virtual si se llegara el caso de que se necesitara más memoria, por lo que aumentaría el rendimiento en los casos que la aplicación haga uso intensivo de la memoria.
* -Xmx128m: Tamaño máximo de la máquina virtual de Java a 128Mb. El valor por defecto son 128Mb. Si la aplicación supera el tamaño máximo de memoria que marca este parámetro, se lanza la excepción java.lang.OutOfMemoryError. No conviene asignar a este parámetro el máximo de la memoria de la máquina porque si ya no queda memoria física disponible (por la que usa el sistema operativo u otras aplicaciones) se pueden producir escrituras en memoria asignada a otros programas y provocar un auténtico lío.
* -XX:PermSize=128m: Tamaño de inicio de la memoria de tipo PermGen a 128Mb. Arrancar la máquina virtual con un valor superior al por defecto agiliza la carga de aplicaciones, sobre todo en el caso de aplicaciones que hagan uso intensivo de este tipo de memoria (Spring, Hibernate…)
* -XX:MaxPermSize=128m: Tamaño máximo de la memoria de tipo PermGen a 128Mb. El valor por defecto son 64Mb. Si la aplicación supera el tamaño máximo de memoria para este tipo que marca este parámetro, se lanza la excepción java.lang.OutOfMemoryError: PermGen space. El valor necesario para este parámetro siempre suele ser menor que el de la memoria de tipo heap.
Si se quiere especificar un valor distinto de 128Mb, que se utiliza para todos los parámetros como ejemplo para simplificar, bastaría con sustituir el valor 128 del parámetro con el que se desee, siempre que sean múltiplos de 2 (64, 128, 256, 512, 768, 1024, 2048…)
Conocidos los tipos de memoria y los parámetros que los controlan, ahora viene la pregunta, ¿cómo especifico estos valores para mi aplicación? La respuesta es la misma para todos los casos: Los valores se especifican como parámetros en el arranque de la máquina virtual que ejecutará la aplicación. La diferencia estribará en cómo se arranca la aplicación: con un script, desde línea de comandos, mediante ant…
A continuación se dan distintos ejemplos de modificación de la memoria de distinta forma. No es necesario especificar todos los parámetros, se pueden especificar todos o ninguno (y se tomarían los valores por defecto)
Línea de comandos
* Ejecución de un jar: java -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -jar example.jar
* Ejecución de una clase: java -Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m com.programacionenjava.examples.MemoryExample
Ant
Script
Si el arranque de la máquina virtual se produce en un script, hay que editar el script y añadir estos parámetros en la sentencia de arranque. El siguiente ejemplo muestra cómo añadir estos parámetros en el script de arranque de un Tomcat.
* En Windows: set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m
* En Linux: JAVA_OPTS=”$JAVA_OPTS -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m”
Por último, recordamos que resolver el problema de una excepción de tipo java.lang.OutOfMemoryError simplemente aumentando el tamaño de la memoria virtual puede retrasar el problema pero no evitarlo si el problema es una fuga de memoria. Puedes encontrar más información aquí.Tomado de
Script para subir, bajar y Reiniciar un JBoss
Tomado de: Script JBOSS
Vamos a crear un script completo que permite subir, bajar y reiniciar un JBoss sobre Kubuntu 10.10.
Las opciones de branches, trunk es para subir (si esta arriba lo baja y publica un aplicativo) desde la copia de trabajo del subversion.
Creamos el archivo que contendrá el script: sudo vi /etc/init.d/jboss
Copia este contenido:
#! /bin/sh
#
# $Id: jboss_init_redhat.sh 71252 2008-03-25 17:52:00Z dbhole $
#
# JBoss Control Script
#
# To use this script run it as root - it will switch to the specified user
#
# Here is a little (and extremely primitive) startup/shutdown script
# for RedHat systems. It assumes that JBoss lives in /usr/local/jboss,
# it's run by user 'jboss' and JDK binaries are in /usr/local/jdk/bin.
# All this can be changed in the script itself.
#
# Either modify this script for your requirements or just ensure that
# the following variables are set correctly before calling the script.
# Init script modified for Ubuntu Server 8.04 by
# Chiral Software, Inc.
#define where jboss is - this is the directory containing directories log, bin, conf etc
JBOSS_HOME=${JBOSS_HOME:-"/RUTA/JBOSS/jboss-5.1.0.GA"}
#define the user under which jboss will run, or use 'RUNASIS' to run as the current user
#JBOSS_USER=${JBOSS_USER:-"jboss"}
JBOSS_USER=${JBOSS_USER:-"RUNASIS"}
#make sure java is in your path
#this must be set even if java is in a well-known place like /usr/bin
#JAVAPTH=${JAVAPTH:-"/RUTA/java/jdk1.6.0_22"}
#configuration to use, usually one of 'minimal', 'default', 'all'
JBOSS_CONF=${JBOSS_CONF:-"default"}
#if JBOSS_HOST specified, use -b to bind jboss services to that address
# JBOSS_BIND_ADDR=${JBOSS_HOST:+"-b $JBOSS_HOST"}
#JBOSS_BIND_ADDR=${JBOSS_HOST:-"-b IP_DEL_EQUIPO"}
#define the script to use to start jboss
JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c $JBOSS_CONF $JBOSS_BIND_ADDR"}
#define la ruta de la ubicación del branches donde esta el codigo fuente
BRANCHES=${BRANCHES:-"/RUTA/2_Fuentes/branches/VERSION"}
#define la ruta de la ubicación del trunk donde esta el codigo fuente
TRUNK=${TRUNK:-"/RUTA/2_Fuentes/trunk"}
if [ "$JBOSS_USER" = "RUNASIS" ]; then
SUBIT=""
else
SUBIT="su - $JBOSS_USER -c "
fi
if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
# ensure the file exists touch $JBOSS_CONSOLE if [ ! -z "$SUBIT" ]; then chown $JBOSS_USER $JBOSS_CONSOLE fi
fi
if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE" echo "WARNING: ignoring it and using /dev/null" JBOSS_CONSOLE="/dev/null"
fi
#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"$JBOSS_HOME/server/$JBOSS_CONF/log/console.log"}
JBOSS_CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH"
#if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
# export PATH=$PATH:$JAVAPTH
#fi
if [ ! -d "$JBOSS_HOME" ]; then
echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME exit 1
fi
procrunning () {
procid=0 for procid in `pidof -x $JBOSS_HOME/bin/run.sh`; do ps -fp $procid | grep "${JBOSSSH% *}" > /dev/null && pid=$procid done
}
stop () {
pid=0 procrunning if [ $pid = '0' ]; then /bin/echo -n -e "\nNo JBossas is currently running\n" exit 1 fi
RETVAL=1
# If process is still running
# First, try to kill it nicely for id in `ps --ppid $pid | awk '{print $1}' | grep -v "^PID$"`; do if [ -z "$SUBIT" ]; then kill -15 $id else $SUBIT "kill -15 $id" fi done
sleep=0 while [ $sleep -lt 120 -a $RETVAL -eq 1 ]; do /bin/echo -n -e "\nwaiting for JBoss processes to stop\n"; sleep 10 sleep=`expr $sleep + 10` pid=0 procrunning if [ $pid = '0' ]; then RETVAL=0 fi done
count=0 pid=0 procrunning
if [ $RETVAL != 0 ] ; then /bin/echo -e "\nTimeout: Shutdown command was sent, but process is still running with PID $pid\n" exit 1 fi
echo exit 0
}
case "$1" in
start)
echo "Iniciando el JBoss" eval touch $JBOSS_HOME/server/$JBOSS_CONF/log/server.log cd $JBOSS_HOME/bin if [ -z "$SUBIT" ]; then
# eval $JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &
eval $JBOSS_CMD_START 2>&1 & else
# $SUBIT "$JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &"
$SUBIT "$JBOSS_CMD_START 2>&1 &" fi eval tail -f $JBOSS_HOME/server/$JBOSS_CONF/log/server.log ;;
stop)
stop ;;
restart)
$0 stop $0 start ;;
trunk)
$0 stop echo "Eliminando archivos existentes" rm $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.jar rm $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.war rm $JBOSS_HOME/server/$JBOSS_CONF/lib/librerias_propias*.jar
echo "Publicando nuevos archivos" cp $TRUNK/RUTA/target/empaquetado.jar $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.jar cp $TRUNK/RUTA/target/empaquetado.war $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.war
$0 start ;;
branches)
$0 stop echo "Eliminando archivos existentes"
rm $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.jar
rm $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.war
rm $JBOSS_HOME/server/$JBOSS_CONF/lib/librerias_propias*.jar
echo "Publicando nuevos archivos"
cp $BRANCHES/RUTA/target/empaquetado.jar $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.jar
cp $BRANCHES/RUTA/target/empaquetado.war $JBOSS_HOME/server/$JBOSS_CONF/deploy/empaquetado.war
;;
*)
echo "usage: $0 (start|stop|restart|branches|trunk|help)"
esac
Terminando de pegar el contenido del script, lo guarda dando ESC :wq
Ya tenemos el script, ahora es solo darle permisos de ejecución: sudo chmod 755 jboss
Y listo, ya lo podemos ejecutar: service jboss aplicacion
Con esto debería subir el JBoss realizando la publicación de nuestro aplicativo que esta en el aplicacion del repositorio.
Tomado de: Jboss basico
| ||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||