¡Hola!
El modelo tradicional de entrada y salida usado por los servletRequest/Response I/O, soportado por la mayoría de servidores de aplicaciones JavaEE, consume un hilo por conexión por la duración del ciclo de vida de la petición-respuesta (Request-Response).
Cuando ICEfaces utiliza el modo de actualización asíncrona en este escenario un hilo es efectivamente consumido en el servidor para mantener la conexión asincrónica para cada navegador conectado al servidor.
Además, la interacción del usuario se traducirá en otro ciclo transitorio de petición-respuesta (Request-Response), que a su vez temporalmente consumen otro hilo en el servidor, lo que resulta en un máximo de dos hilos de ejecución en el servidor que se requiere para soportar a cada usuario ICEfaces. En la práctica, el número es algo entre uno y dos hilos por usuario, dependiendo de la frecuencia de interacción por parte del usuario. Si bien esto no suele suponer un problema cuando el número de usuarios concurrentes es relativamente baja (<100), puede convertirse en un problema cuando un mayor número de usuarios concurrentes debe ser soportado por la aplicación web.
Hay dos soluciones establecidas para esta limitación:
1. Aumentar el tamaño de los hilos del servidor (thread-pool) utilizados para las solicitudes de los servlet. Por ejemplo, Tomcat 5.5 usa por defecto un thread pool de 150. Las pruebas han demostrado que esto es suficiente para soportar a 100 o más usuarios ICEfaces simultáneos en el modo de actualización asíncrona.
Sin embargo, al aumentar el grupo de subprocesos del Tomcat a un tamaño más grande (por ejemplo, 500 o 1000), un número mucho mayor de usuarios simultáneos pueden ser soportado. El factor limitante en este escenario es el número de hilos que la plataforma de hardware y software puedan soportar eficazmente. Dependiendo de las capacidades de su servidor, aumentar el tamaño del thread-pool es a menudo todo lo que se requiere para cumplir con los requisitos de escalabilidad en muchas aplicaciones web que usan IceFaces
2. Aprovechar el soporte que ofrecen algunos servidores para el procesamiento de peticiones asincrónico (ARP). Este enfoque utiliza los recursos disponibles de manera más eficiente aprovechando las técnicas de ARP para comunicaciones asíncronas con el apoyo de un número cada vez mayor de servidores de aplicaciones.
En el escenario ARP, un thread-pool se utiliza para el servicio de peticiones asíncronas. Cuando se recibe una petición, un hilo es asignado temporalmente para atender la solicitud y se lanza al thread-pool, mientras que el servidor de aplicaciones procesa la solicitud y crea una respuesta. Cuando una respuesta esta lista se asigna a un hilo nuevo del thread-pool para enviar la respuesta al navegador.
Las conexiones asíncronas son a menudo inactivadas durante períodos relativamente largos de tiempo entre la solicitud y la respuesta. Por esta razón, ARP está bien adaptado para el uso de aplicaciones ICEfaces asíncronas y puede proporcionar escalabilidad en términos de usuarios concurrentes asincrónicos mucho mayor que el servlet tradicionales (Request-Response) en el mismo hardware.
ICEfaces opcionalmente puede soportar configuraciones ARP para los siguientes servidores de aplicaciones JavaEE:
- GlassFish v2, v3
- Jetty 6.1
- Tomcat 6 y JBoss 4.2
Jboss 4.2 Jboss usa como contenedor web por defecto Tomcat el cual cuenta con un soporte para peticiones de entrada y salida no bloqueante (NIO).
Este soporte puede ser configurado para obtener una eficiente comunicación asíncrona con las aplicaciones desarrolladas en IceFaces que utilizan el modo de actualización asíncrono.
Para configurar el uso de NIO en Jboss 4.2 usando Tomcat 6 se debe hacer lo siguiente: Se debe modificar el protocolo HTTP/1.1 por org.apache.coyote.http11.Http11NioProtocol en el archivo server.xml que se encuentra en jboss-4.2.XX /server/default/deploy/jboss-web.deployer/server.xml
En la aplicación se debe configurar el TomcatPushServlet, esto se hace en el web.xml agregando las siguientes líneas:
Tomcat Push Servlet
com.icesoft.faces.webapp.http.servlet.TomcatPushServlet
1
Tomcat Push Servlet
/block/receive-updated-views/*
En el archive web.xml de Jboss que se encuentra en jboss-4.2.X.X/server/default/deploy/jboss-web.deployer/conf/web.xml se deben remplazar las siguientes líneas.
Remplace las siguientes líneas:
CommonHeadersFilter
/*
Con estas líneas:
CommonHeadersFilter
CommonHeadersFilter
/
Despliegue el WAR con nombre push-server.war que se encuentra en icefaces/ICEfaces-1.8.1-bin/icefaces/push-server/ push-server.war Es todo ya su servidor de aplicaciones Jboss y sus aplicaciones IceFaces soportan (ARP y NIO).
No hay comentarios