martes, 20 de mayo de 2014

Creación de clusters en JBoss EAP, modo standalone

La generación de clusters en EAP es para tener alta disponibilidad del servicio. En JBoss EAP 6, no es necesario generar dos configuraciones de servidor JBoss para hacer clusters, pero si crear un nuevo archivo XML.

La generación de clusters en EAP es para tener alta disponibilidad del servicio. En JBoss EAP 6, no es necesario generar dos configuraciones de servidor JBoss para hacer clusters, pero si crear un nuevo archivo XML.

La configuración standalone en cluster es útil para entornos de desarrollo, debido a que solo puede contener un perfil de configuración. Por lo general, se utiliza el archivo standalone-ha.xml. Es buena páctica hacer un respaldo del archivo original antes de hacer modificaciones.

Con la configuración standalone, se pueden hacer cluster con los equipos ejecutandose en el mismo servidor o residiendo en distintos servidores.

Los clusters se suelen utilizar con balanceadores de carga, y en JBoss EAP 6, el balanceador se hace con apache server, pero eso se verá en otra entrada.

Al primer archivo, lo llamaremos standalone-ha-node1.xml

En este archivo, revisaremos la etiqueta <interfaces>, que debe apuntar hacia la ip de nuestro servidor, en este caso, localhost (127.0.0.1)


<interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>


y en la parte de los sockets, lo dejamos sin cambios para el primer servidor:


<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">


Para el segundo server, crearemos otro archivo standalone-ha-node2.xml. Solo que en este configuraremos un offset de puertos en el socket binding:


<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:100}">


Asi mismo, para evitar conflicto de puertos, en el archivo standalone-ha-node2.xml cambiaremos los puertos de administración:


<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:100}">
        <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>


Para iniciar los servidores, solo tenemos que espnecificar el archivo de configuración con el que queremos ejecutar el servidor:

Servidor 1
D:\programas\jboss-eap-6.2\bin>standalone.bat --server-config=standalone-ha-node1.xml

Servidor 2
D:\programas\jboss-eap-6.2\bin>standalone.bat --server-config=standalone-ha-node2.xml

Podremos ver el servidor 1 en el puerto 8080:



y el servidor 2 en el puerto 8180:



Y con esto podremos ver dos servidores en clúster, donde podremos desplegar las aplicaciones con un balanceador de carga, para lo cuál apache nos servirá, y una aplicación distribuida en clúster, pero eso será tema de otra entrada.


martes, 13 de mayo de 2014

JBoss: uso del CLI (Command Line Interface)

La interfaz de linea de comando de JBoss (CLI) se encuentra en la ubicacion $JBOSS_HOME/bin. Para iniciarlo, damos al comando jboss-cli. En windows es jboss-cli.bat y linux ./jboss-cli.sh.

Una vez que ejecutamos el comando, la consola nos responde que no estamos conectados aun:

You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /] 

Damos al comando connect. Si damos el comando sin especificar IP, se conectará al servidor en el que se encuentra, sin embargo, especificando la IP, se conectará al servidor que hayamos especificado.

connect 127.0.0.1
[standalone@127.0.0.1:9999 /]

Nota: El servidor al que queremos conectarnos debe estar arrancado para que el cliente se pueda conectar. jboss-cli no arranca el servidor.

Una vez conectados al servidor, podemos reiniciarlo con el comando:

[standalone@127.0.0.1:9999 /] reload

O podemos detenerlo con el comando shutdown

[standalone@127.0.0.1:9999 /] shutdown
[disconnected /] 

El cual enviará la señal de shutdown al servidor al que estábamos conectados.

También podemos hacer un snapshot de la configuración actual con :take-snapshot

[standalone@127.0.0.1:9999 /] :take-snapshot
{
    "outcome" => "success",
    "result" => "/opt/jboss-6/standalone/configuration/standalone_xml_history/snapshot/20140505-122238889standalone.xml"
}

Listamos los snapshots que hemos guardado con el comando :list-snapshots

[standalone@127.0.0.1:9999 /] :list-snapshots
{
    "outcome" => "success",
    "result" => {
        "directory" => "/opt/jboss-6/standalone/configuration/standalone_xml_history/snapshot",
        "names" => [
            "20140505-123643905standalone.xml",
            "20140505-122238889standalone.xml"
        ]
    }
}

Eliminamos un snapshot con :delete-snapshot

[standalone@127.0.0.1:9999 /] :delete-snapshot(name="20140505-123643905standalone.xml")
{"outcome" => "success"}

y para iniciar el servidor con una configuración de snapshot que hemos almacenado (20140505-122238889standalone.xml), arrancamos jboss de la siguiente manera:

[ejurado@localhost bin]$ ./standalone.sh --server-config=20140505-122238889standalone.xml
=================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/jboss-6

  JAVA: /usr/java/jdk1.7.0_51/bin/java

  JAVA_OPTS:  -server -XX:+UseCompressedOops -Xms1303m -Xmx1303m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
...







martes, 6 de mayo de 2014

Creación de Datasources en JBoss EAP 6

Anteriormente, en versiones de JBoss 5.x y previas, el datasource se generaba con un archivo -ds.xml en el directorio de despliegue, donde se contenían los datasources. A partir de la version 6.x, la generación de los datasources se hace de manera distinta (debido en parte a que se puede arrancar el servidor en modo standalone y domain).

Para este ejemplo, usaremos una conexión de base de datos mysql, con el driver mysql-connector-java-5.1.30-bin.jar.

Al generar el datasource, se requieren de dos pasos:
1.- Instalar el driver en JBoss
2.- Generar el Datasource.

Instalar el driver en JBoss

Primero, hay que añadir el driver para que JBoss lo reconozca. Existen dos maneras de hacer esto, una es desplegar el jar como aplicación y la otra es añadirlo como modulo del core de JBoss.

Si lo añadimos como modulo del core de JBoss, tendremos la ventaja de que el classloader de JBoss serà lo primero que cargue, será visible para cuando el servidor se arranque en modo domain y standalone y seá utilizado bajo demanda de las aplicaciones, pero instalarlo es un poco mas complicado.

Si lo añadimos como aplicación es mucho más fácil y rápido instalarlo, pero solo será visible por las aplicaciones instaladas en el mismo servidor donde se está ejecutando el jar.

Instalando el driver como módulo core de JBoss.
  • Nos ubicamos en la ruta $JBOSS_HOME\\modules\system\layers\base\com\
  • Allí creamos los directorios mysql\main
  • Copiamos el jar  mysql-connector-java-5.1.30-bin.jar en la ubicación $JBOSS_HOME\modules\system\layers\base\com\mysql\main
  • Creamos un archivo module.xml, donde indicaremos el nombre del módulo, el jar y sus dependencias. Este archivo contendrá el siguiente código:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">

    <properties>
        <property name="jboss.api" value="unsupported"/>
    </properties>

    <resources>
        <resource-root path="mysql-connector-java-5.1.30-bin.jar"/>
        <!-- Insert resources here -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>


Podemos observar que en la propiedad module le ponemos el nombre com.mysql, que es donde hemos ubicado nuestro driver en el directorio modules de JBoss.
En resource-root-path, va el nombre del driver.
Y en dependencies, las dependencias que sean necesarias.

  • En los archivos de configuración de standalone.xml y/o domain.xml, debemos agregar el módulo como driver, con el código que se muestra a continuación:
<drivers>
     <driver name="h2" module="com.h2database.h2">
        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
     </driver>
     <driver name="mysql" module="com.mysql">
        <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
     </driver>
</drivers>


Con esto, ya quedará instalado el jar como módulo del core de JBoss y el driver visible para el modo domain y/o standalone.

Creación de datasources.

Una vez que tenemos el driver de mysql como módulo del core de JBoss, accegdemos a la consola de adminsitración de JBoss ingresando en http://localhost:8080 e introducimos el usuario y password.

Entramos en profiles y damos a add.


Una vez que damos add, el editor guiado nos dara 3 pasos para configurar el datasource:

1. Nombrar el datasource:


2. Elegir el driver. Este será el que hemos configurado como modulo del core de JBoss.


Elegimos myssql

3.- Configurar los parametros de conexion,


Y con esto tenemos una configuración básica de datasources

Una vez configurado, debemos habilitarla seleccionando nuestro datasource y dando al boton enable. Nos saldrá una ventana de confirmación:


Esto modificara el archivo standaloneo .xml o domain.xml, dependiendo el modo en el que hayamos arrancado JBoss.

Una vez habilidado el datasource, podremos hacer un test de la conexion, dando a connection y test:


si todo va bien, nos saldrá lo siguiente:



Y con esto ya tenemos la conexion hecha con el datasource listo para ser utilizado por una conexión JNDI