Introducción
Que es un JBoss?
Básicamente, JBoss es un servidor de aplicaciones de código abierto, basado en la plataforma JEE. Y implementada completamente en lenguaje de programación Java.
Y como esta basado en Java, JBoss puede ser usado en cualquier Sistema Operativo que soporte Java.
Entrando en el tema de JBoss, no podemos dejar de hablar de su pariente mas cercano 'TomCat'... El Tomcat básicamente es la implementación de WebContainer de JBoss creado por la fundación Apache, este utiliza el modulo mod_jdk para 'cargar' aplicaciones desenvueltas en Java.
El Tomcat tiene como característica principal, su practicidad, en cuanto a practicidad no se aproxima a JBoss (algunos pueden discrepar de mi conclusión), mas en mi caso pude notar eso.
Una de las cosas que pude darme cuenta fue que al crear una aplicación para acceder a un BD MySQL y utilizar Tomcat, obligatoria mente necesita tener los Drivers "jar" dentro de su aplicación (.war), ya que no dispone.
En este punto el JBoss es pero diferente, como?
Necesita del Driver MySQL para acceder a un DB MySQL, pero puede habilitar su Data Source dentro del propio JBoss, que el ira a cargar el Driver cuando sea necesario con mas rapidez que el Tomcat.
Con esto usted no va a necesitar tener en su aplicación (.war) los Drivers "jar", dejando este bajo el manejo del propio JBoss.
- Links para programas que vamos utilizar:
JDK 1.7 ( Java SE Development Kit 7)
JBoss AS 7
- Informaciones adicionales:
Comunidad de JBoss
Ahora, después de la presentación vamos a lo importante.
Para esta instalación fue utilizada la distro CentOS 5.5 final.
Particularmente me gusta hacer las cosas de manera mas antigua pero mas eficaz, después de realizar la descarga del JDK, realice los siguientes pasos.
* Consejo: Si utilizas Ubuntu, siga los pasos 1 y 2, y luego ir paso a paso en la parte inferior. Red Hat y derivados, puede continuar.
1. Verificando la existencia de otras maquinas java instaladas
$ java -version
En caso de ya existir Java instalado, usted tendrá una respuesta parecida a esta:
java version "VERSIÓN INSTALADA"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)
2. Si existiese alguna versión de Java instalada, tendrá el siguiente directorio en su maquina: "/usr/lib/jvm/(javaversion)".
Para descompactar el Java descargado ejecute:
$ tar -zxvf jdk-7u3-linux-i586.tar.gz
$ mv jdk-7u3-linux-i586 jdk1.7
Despues, retornar con la siguiente ruta:
[/color]
$ pwd
/usr/lib/jvm/Jdk1.7
Obs.: Caso no existiera el directorio "/usr/lib/jvm", podra descompactar el paquete en "/usr/local".
3. Java 1.7 está instalando, pero aun falta declarar algunas variables para hacer nuestro 'ver' el JDK1.7 como estándar.
Localice el archivo "/etc/profile".
- Por que?
- Por que en Gnu/Linux, todas las variables especificadas en este archivo serán inicializados automáticamente y automáticamente exportadas a la inicialización del sistema.
# vim /etc/profile
Agregar:
JAVA_HOME=/usr/lib/jvm/jdk1.7
PATH=$JAVA_HOME/bin:$PATH export PATH JAVA_HOME
CLASSPATH=$JAVA_HOME/lib/tools.jar
CLASSPATH=.:$CLASSPATH
export PATH JAVA_HOME CLASSPATH
4. Para validar las lineas adicionadas en el archivo Profile, realice el Logout con su usuario y retorne al Prompt. Para verificar si esta funcionando, ejecute:
# echo $PATH
La salida debe de ser algo similar a:
/usr/lib/jvm/jdk1.7/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
$ java -version
La salida debe ser algo parecido a esto:
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)
Con el Java ya instalado y funcionando, vamos a partir para la instalación del JBoss.
Ubuntu
1. Habilitando el "/etc/alternatives", ejecute:
$ sudo update-alternatives --install /usr/bin/java java /SEU/java/DIRECTORY/jre/bin/java 3
2. Cambiar la versión de Java utilizado con alternativas, ejecute:
$ sudo update-alternatives --config java
Obs: Verifique el numero de Java 1.7, y escriba en la opción de arriba.
3. Testeando nuestro Java 1.7, ejecute:
$ java -version * La salida debe de ser algo similar a:
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b04)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)
Con el Java instalado y funcionando, vamos a partir para la instalación del JBoss.
Instalando el JBoss AS 7
La instalación del JBoss consiste, básicamente en descompactar el archivo "jboss-as-7.1.1.Final.tar.gz".
Como la instalación es simple, necesitamos atar bien para tener un ambiente fácil de administración y funcional.
1. Descompactar el JBoss:
$ tar -zxvf jboss-as-7.1.1.Final.tar.gz -C /usr/local
$ mv jboss-as-7.1.1.Final jboss
2. Entendiendo la arquitectura y el funcionamiento:
El JBoss es iniciado con el Script "standalone.sh" localizado dentro de la carpeta "bin", que usted acaba de descompactar. Este Script consulta los archivos de configuración contenidos dentro del directorio "jboss/standalone/configuration" para iniciar el Servidor.
Dare un 'overview' de los principales directorios que vamos a utilizar.
Directorio: jboss/standalone
- Contiene las principales configuraciones del Servidor, dentro de ellas los archivos:
Guardan configuraciones de (IP - PUERTO - PROTOCOLO, ETC):
standalone-full.xml
standalone.xml
standalone-full-ha.xml
standalone-ha.xml
standalone_xml_history
- Guardan las configuraciones de usuarios de JBoss:
application-roles.properties
logging.properties
application-users.properties
mgmt-users.properties
- jboss/standalone/deployments : Contendrá sus proyectos! Todos los archivos ".war" colocados en este directorio, sufrirán el Deploy automáticamente.
- jboss/standalone/log : Contendrá el Log de Boot y ejecución del Servidor JBoss.
- jboss/standalone/lib : Contendrá las extensiones cargadas por el Servidor.
- jboss/standalone/tmp : Contendrá los archivos temporales generado por la aplicación y por el Servidor.
Directorio: jboss/modules
Contiene los libs (módulos). Vamos a adicionar los Drivers de nuestra aplicación dentro de este directorio.
El formato utilizado por este directorio es: modules/<oracle . exemplo>/jdbc/main/
Dentro de este directorio deberá contener el "modulo.jar" + la instrucción en XML para utilización de este modulo, en formato "module.xml". Vamos a tratar este punto con mas detalle.
Directorio: jboss/bin
[code]
Contiene los binarios para inicio de administración de su Servidor JBoss.
En este articulo, usaremos los Scripts de abajo:
[code]
add-user.sh : Adicionar usuarios para acceder a JBoss;
standalone.sh : Script de inicialización del Servidor de JBoss.
3. Configuración del usuario JBoss (sistema)
El proceso de instalación del JBoss es relativamente simple, pero necesitamos algunos pasos, así que al terminar de descompactar el JBoss, quedará como usuario root y grupo root, entonces manos a la obra.
Cree el usuario con los siguientes parámetros:
jboss:x:<UUID>:<GUID>::/usr/local/jboss:/bin/nologin
Despues, agregar los debidos permisos:
# chown -R jboss.jboss /usr/local/jboss
# chmod -R 750 /usr/local/jboss
4. Testeando el JBoss
Entramos al directorio "jboss/bin", y ejecutamos el Script "standalone.sh"
# ./standalone.sh
Despues de ejecutar, pedera su terminal, pues el dejara el proceso ejecutando en la termina, entonces, abrimos otro terminal y ejecutamos:
# netstat -nlp | grep java
Usted deberá de recibir una respuesta similar a esta:
tcp 0 0 127.0.0.1:9990 0.0.0.0:* LISTEN 5389/java
tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN 5389/java
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 5389/java
tcp 0 0 127.0.0.1:4447 0.0.0.0:* LISTEN 5389/java
Teniendo esta respuesta, accedemos al JBoss via browser utilizando la URL: http://localhost:8080
Realizado esto, vamos a Administrar Consola, sera solicitado su usuario y contraseña.
5. Configurando nuestro usuario
Accedemos al directorio "/usr/local/jboss/bin" y ejecutamos el "add-user.sh". Seguimos paso a paso para crear un usuario en JBoss.
Obs.: Para administrar el JBoss, cree un usuario del tipo: Management User
Despues de crear el usuario, accedemos al browser y accedemos de nuevo al sistema con nuestro usuario y contraseña.
Creando un Control para el Servidor JBoss.
Bien, tenemos nuestro JBoss instalado.
Ya podemos el Deploy en nuestras aplicaciones, pero como buen analista no podemos dejar que el Servidor quede 'jugado'.
Toda ves que necesite iniciar el Servidor, voy a tener que entrar en el directorio BIN y ejecutar el "standalone.sh"?, NO.
Vamos a crear una especie de Daemond del Servidor para verificar el status y dejar el PID guardado en algun lugar, donde podemos encontrar rápidamente.
Obs.: Voy a facilitar el Script de inicialización, el mismo puede ser usado y modificado.
#
#SCRIPT RESPONSABLE POR INICIALIZAR EL SERVIDOR DE JBOSS
#
#
#
export TERM=vt100
STAT=$1
if [ -e /var/log/servidorjboss.log ]
then
sleep 0
else
touch /var/log/servidorjboss.log
fi
if [ -e /var/run/jboss/jboss.pid ]
then
sleep 0
else
touch /var/run/jboss/jboss.pid
chmod 750 /var/run/jboss/jboss.pid
fi
LOGFILE="/var/log/servidorjboss.log"
STANDALONE="/usr/local/jboss/bin/standalone.sh"
PIDFILE="/var/run/jboss/jboss.pid"
VAR(){
VERPID=`cat $PIDFILE | xargs`
CONF=`cat $PIDFILE | wc -l`
}
llamajboss() {
VAR
[ $CONF -gt 0 ] && verjboss
if [ $CONF = 0 ]
then
MSG01="INICIANDO SERVIDOR JBOSS"
$STANDALONE >/dev/null &
JBOSS_PID01=$!
sleep 2
echo $JBOSS_PID01 >> $PIDFILE
MSG02="SERVIDOR JBOS INICIADO"
echo $MSG01 >> $LOGFILE
echo $MSG02 >> $LOGFILE
else
MSGERRO="ERROR DESCONOCIDO AL INICIAR EL SERVIDOR JBOSS"
echo $MSGERRO >> $LOGFILE
fi
}
#
#
#
#
#FUNCION DE PARAR EL JBOSS
parajboss() {
VAR
if [ $CONF = 0 ]
then
echo "NO EXISTE NINGUN SERVIDOR JBOSS EJECUTANDOSE"
exit 0
else
echo -E "Localizando servicio Jboss"
echo -E "Servidor Jboss encontrado, parando el servicio"
for i in $VERPID; do kill -9 $i;done
echo -E "Servidor parado"
rm -rf $PIDFILE
MSG001="PARANDO SERVIDOR JBOSS"
MSG001="SERVIDOR JBOSS PARADO"
echo $MSG001 >> $LOGFILE
echo $MSG001 >> $LOGFILE
exit 0
fi
}
#
#
#
#FUNCION DE VERIFICACIÓN DE STATUS DEL JBOSS
verjboss() {
VAR
if [ $CONF = 0 ]
then
echo "NO EXISTE NINGUN SERVIDOR JBOSS EJECUTANDOSE"
exit 0
else
echo "YA EXISTE SERVIDOR JBOSS EJECUTANDOSE : $VERPID" | xargs
exit 0
fi
}
case $STAT in
start ) llamajboss ;;
stop ) parajboss ;;
status ) verjboss ;;
*) echo "OPCION INCORRECTA UTILIZE (start|stop|status)" ;;
esac
1º Paso - Guardamos el Script dentro del directorio "bin" del JBoss y creamos un link para el directorio "init.d":
# ln -s /usr/local/jboss/bin/jbossd /etc/init.d/jbossd
Realizado esto, testeamos el Script:
# service jbossd status
* NO EXISTE NINGUN SERVIDOR JBOSS EJECUTANDOSE.
# service jbossd start
INICIANDO SERVIDOR JBOSS
SERVIDOR JBOSS INICIADO
# service jboosd status
YA EXISTE SERVIDOR JBOSS EJECUTANDOSE: <PID DEL PROCESO>
2º Paso - Realizado el Script de inicialización, vamos a utilizarlo de manera simple para llamar al JBoss cuando su servidor ejecute el reboot, y precisa ser apagado.
# cd /usr/local/jboss/bin
# touch MTjboss
# echo -E ". /usr/local/jboss/bin/jbossd start" > MTjboss
Verificamos en que nivel de ejecución esta nuestra maquina:
# runlevel
# ln -s MTjboss /etc/rc.<SEU RUNLEVEL>/S96jbossd
# ln -s MTjboss /etc/rc.<SEU RUNLEVEL>/K96jbossd
Realizado esto, ya tenemos nuestro ambiente 'armado'
Habilitando módulos, Drivers y Data Sources en JBoss.
Bien, vamos a comenzar a modular nuestro JBoss AS 7 para nuestras aplicaciones.
Por ejemplo, si su API realiza una conección a una Base Oracle para consultar, o escribir datos, el JBoss no va a ofrecer soporte para su API, en caso que usted no disponga del Driver para realizar esta conección.
En este capitulo estare facilitanco un ejemplo de instalación del Driver Oracle.
Como vimos en el Overview del JBoss, el directorio "jboss/modules" contiene los libs (módulos). Dentro de este directorio utilizamos la siguiente estructura:
jboss/modules/com/<SU MODULO>/main/ - A pasta main deve conter o seu módulo no formato .jar.
1º Paso : Crear los directórios
Para configurar una base de manera adecuada en el JBoss AS 7, es necesario agregar el Driver JDBC como un módulo.
Para realizar este paso, creamos el directorio para colocar el driver del Oracle:
# mkdir jboss/modules/com/oracle/ojdbc6/main
Descargamos el modulo en el link: Oracle.com - JDBC
Copiamos el Driver Oracle (ojdbc6.jar) para el directorio recien creado, creamos un archivo "module.xml" con el siguiente contenido:
<module xmlns="urn:jboss:module:1.0" name="com.oracle.ojdbc6">
<resources>
<resource-root path="ojdbc6.jar">
</resource-root></resources>
<dependencies>
<module name="javax.api">
</module></dependencies>
</module>
2º Paso - Editamos el archivo "$JBOSS_HOME/standalone/configuration/standalone.xml", en el modulo Standalone, en el archivo "$JBOSS_HOME/domain/configuration/domain.xml" en modo Domain.
Procure por la linea<drivers> que es 'hijo' de <subsystem xmlns=”urn:jboss:domain:datasources:1.0″> y añadir el siguiente contenido dentro de los tags <drivers>…</drivers>:
<driver name="oracle" module="com.oracle.ojdbc6">
<xa-datasource-class>
oracle.jdbc.OracleDriver
</xa-datasource-class>
</driver>
3º Paso - Cree un 'datasource' en este mismo XML:
<datasource jndi-name="java:jboss/datasources/VIVAOLINUXDS" pool-name="OracleDS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:oracle:thin:@localhost:1521:oradb1</connection-url>
<driver>oracle</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<prefill>true</prefill>
<min-pool-size>0</min-pool-size>
<max-pool-size>20</max-pool-size>
</pool>
<security>
<user-name>SEU_USUARIO_BANCO</user-name>
<password>SUA_SENHA_SECRETA</password>
</security>
</datasource>
Obs.: El parametro 'use-java-context', se ha colocado como 'false', hara con que el nombre JNDI quede global (disponible externamente). El 'use-ccm' habilita el Cached Connection Manager.
Para configuraciones de aislamiento de transacciones, podemos tener los siguientes posibles valores.:
TRANSACTION_READ_UNCOMMITTED,TRANSACTION_READ_COMMITTED,TRANSACTION_REPEATABLE_READ,TRANSACTION_SERIALIZABLE, TRANSACTION_NONE
Para mayores informaciones sobre el nivel de aislamiento, de un vistazo a este link: Wikipedia.org - Isolation
Obs.: En el grupo, el perfil igual a 'true' ya realiza las conexiones y llena el grupo. El 'mix-pool-size' y el 'max-pool-size' definen el numero minimo y maximo de conexiones en el Pool o Grupo.
Para mas parametros, consule el XSD del datasource:
$JBOSS_HOME/docs/schema/jboss-as-datasources_1_0.xsd
Inicie el JBoss y aparecera el siguiente mensaje en el archivo de Log:
[org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying JDBC-compliant driver class oracle.jdbc.OracleDriver (version 11.2)
2 ...
3 [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) Bound data source 1
. . . Su modulo ya esta compilado y listo para utilizarlo.
Lo utilizado arriba, va a servir de modelo para los otros módulos.
Modificando Configuraciones de Red en el JBoss
El JBoss, por defecto, trabaja utilizando el Localhost en sus archivos de configuracion.
Podemos modificar estas configuraciones, inclusive el puerto que el programa ira a utilizar.
Accedemos al directorio "jboss/standalone/configuration/", y ejecutamos:
# grep localhost *
standalone.xml: <wsdl-host>${jboss.bind.address:localhost}</wsdl-host>
standalone.xml: <inet-address value="${jboss.bind.address.management:localhost}"/>
standalone.xml: <inet-address value="${jboss.bind.address:localhost}"/>
standalone.xml: <inet-address value="${jboss.bind.address.unsecure:localhost}"/>
Obs.: Como estamos instalando el JBoss de cero la salida del comando de arriba sera mayor.
# vim standalone.xml
Para substituir todas las ocurrencias de Localhost para su IP, ejecute:
:%s/localhost/SEUIP/g
Realizado esto su JBoss ya esta respondiendo a su IP.