Para entornos de alta concurrencia en los que necesitemos un óptimo rendimiento de nuestro servidor de aplicaciones Jboss, una opción recomendable es utilizar el conector nativo APR.
Por su parte el propio Tomcat también puede hacer uso del conector nativo para mejorar el rendimiento y escalabilidad. En la propia documentación del gato encontramos un resumen con las ventajas que proporciona (también aplica al servidor de aplicaciones Jboss para el caso que atañe en este artículo).
En versiones antiguas de Jboss como la 4 y 5 era sencillo, bastaba con descargar el conector nativo en el directorio raíz de JBOSS_HOME
, por ejemplo en /opt/jboss/jboss-4.2.2
, y al iniciar la instancia debería cargar automáticamente las librerías APR.
Por ejemplo en Jboss 4.2.2 el proceso sería el siguiente:
cd $JBOSS_HOME wget http://downloads.jboss.org/jbossnative//2.0.10.GA/jboss-native-2.0.10-linux2-x64-ssl.tar.gz tar -zxvf jboss-native-2.0.10-linux2-x64-ssl.tar.gz
Ahora en el directorio bin
de Jboss tendríamos a su vez un directorio native
con las librerías necesarias:
[jota@middlewarenode1 bin]$ ls -l native/ total 3848 drwxrwxr-x. 2 jota jota 4096 Aug 10 2011 engines lrwxrwxrwx. 1 jota jota 18 Aug 10 2011 libapr-1.so -> libapr-1.so.0.3.12 lrwxrwxrwx. 1 jota jota 18 Aug 10 2011 libapr-1.so.0 -> libapr-1.so.0.3.12 -rwxr-xr-x. 1 jota jota 673925 Aug 10 2011 libapr-1.so.0.3.12 lrwxrwxrwx. 1 jota jota 18 Aug 10 2011 libcrypto.so -> libcrypto.so.0.9.8 lrwxrwxrwx. 1 jota jota 18 Aug 10 2011 libcrypto.so.0 -> libcrypto.so.0.9.8 -r-xr-xr-x. 1 jota jota 1574254 Aug 10 2011 libcrypto.so.0.9.8 lrwxrwxrwx. 1 jota jota 15 Aug 10 2011 libssl.so -> libssl.so.0.9.8 lrwxrwxrwx. 1 jota jota 15 Aug 10 2011 libssl.so.0 -> libssl.so.0.9.8 -r-xr-xr-x. 1 jota jota 351288 Aug 10 2011 libssl.so.0.9.8 lrwxrwxrwx. 1 jota jota 23 Aug 10 2011 libtcnative-1.so -> libtcnative-1.so.0.1.22 lrwxrwxrwx. 1 jota jota 23 Aug 10 2011 libtcnative-1.so.0 -> libtcnative-1.so.0.1.22 -rwxr-xr-x. 1 jota jota 896875 Aug 10 2011 libtcnative-1.so.0.1.22 -rwxr-xr-x. 1 jota jota 432483 Aug 10 2011 openssl
Una vez iniciáramos Jboss debería cargar sin problemas las librerías requeridas y automáticamente utilizar el conector nativo. En server.log
deberíamos ver:
INFO [Http11AprProtocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080
Especial atención a AprProtocol, que es lo que precisamente indica que Jboss está utilizando las librerías nativas.
Con Jboss AS 7 y superiores (también sus respectivas versiones EAP) el proceso es si cabe más sencillo ya que las librerías requeridas vienen embebidas de serie en el servidor de aplicaciones, pudiendo encontrarlas dentro del directorio de módulos siguiente:
$JBOSS_HOME/modules/system/layers/base/org/jboss/as/web/main/lib/
Dentro de ese directorio deberíamos tener a su vez un subdirectorio correspondiente a la arquitectura de nuestro sistema. Por ejemplo en una versión de Jboss EAP 6.3 en un CentOS 7 de 64 bits, tendré el correspondiente directorio linux-x86_64
con todo lo que necesito:
[jota@middlewarenode1 linux-x86_64]$ pwd /opt/jboss/EAP-6.3.0/jboss-eap-6.3/modules/system/layers/base/org/jboss/as/web/main/lib/linux-x86_64 [jota@middlewarenode1 linux-x86_64]$ ls -l total 152 lrwxrwxrwx. 1 jota jota 24 Apr 30 21:10 libapr-1.so -> /usr/lib64/libapr-1.so.0 lrwxrwxrwx. 1 jota jota 26 Apr 30 21:10 libcrypto.so -> /usr/lib64/libcrypto.so.10 lrwxrwxrwx. 1 jota jota 23 Apr 30 21:10 libssl.so -> /usr/lib64/libssl.so.10 -rw-r--r--. 1 jota jota 151768 Jul 14 2014 libtcnative-1.so
Lo único que tendríamos que hacer ahora es activar el uso del conector nativo. Suponiendo que estoy utilizando una configuración standalone sin clúster, tendré que modificar la configuración del fichero standalone.xml
. Iríamos a la sección del subsistema web y cambiaríamos la opción native de false a true:
<subsystem xmlns="urn:jboss:domain:web:2.1" default-virtual-server="default-host" native="false">
Al arrancar de nuevo Jboss, deberíamos ver la referencia correspondiente Http11AprProtocol en server.log:
[org.apache.coyote.http11.Http11AprProtocol] (MSC service thread 1-1) JBWEB003001: Coyote HTTP/1.1 initializing on : http-/127.0.0.1:8080 [org.apache.coyote.http11.Http11AprProtocol] (MSC service thread 1-1) JBWEB003000: Coyote HTTP/1.1 starting on: http-/127.0.0.1:8080
También como reseña y para evitar quebraderos de cabeza, si configuramos un conector APR para que funcione con el protocolo HTTPS con certificados, no podremos utilizar un almacén JKS sino que los certificados tendrán que ser formato .pem, ya que el conector APR hace uso de OpenSSL y por lo tanto no se pueden utilizar almacenes de certificados tipo Java.