Procedimientos recomendados para el servlet asíncrono

La característica de servlet asíncrono le permite procesar solicitudes y respuestas de entrada sin estar enlazado a la hebra original que ha iniciado la solicitud.

Al utilizar servlets asíncronos tenga en cuenta las siguientes recomendaciones:
  • Las aplicaciones no deberían generar una nueva hebra para cada operación asíncrona necesaria. Como mínimo, las aplicaciones deberían utilizar una agrupación de hebras o bien el método AsyncContext start(Runnable).
  • En el lado del cliente/navegador, puede utilizar AJAX para habilitar determinadas partes de la página para que se actualicen de forma asíncrona.
  • El contenedor de servlet asegura que las invocaciones para completar o asignar no se inicien hasta que la hebra del contenedor web que ha iniciado el mandato startAsync exista. No obstante, el contenedor de servlet no gestiona varias hebras utilizando de forma simultánea la misma solicitud y respuesta. En este caso, la aplicación puede gestionar sus propios problemas de simultaneidad y sincronización, pero no se recomienda, ya que podrían producirse situaciones de bloqueo o de actualización. Si desde una hebra creada por el cliente o iniciada con Runnable, se invoca el método dispatch o complete, dichos métodos se pueden iniciar inmediatamente en una hebra nueva y las modificaciones posteriores para la solicitud o respuesta de la hebra que ha iniciado dichas llamadas serán peligrosas. Dos hebras tendrán acceso a la solicitud y la respuesta, lo que puede tener resultados indeterminados si ambas hebras están modificando dichos objetos. Por lo tanto, no invoque métodos para la solicitud o respuesta después de una operación dispatch desde la misma hebra que invocó dicha operación. No invoque métodos para la solicitud o respuesta tras la invocación de una operación complete.
  • Los elementos de escucha asíncronos tienen un método onTimeout que se inicia cuando se alcanza un límite de tiempo para la operación asíncrona. No obstante, la operación asíncrona aún podría estar ejecutándose en una hebra mientras onTimeout se ejecuta en otra hebra distinta. Este escenario es la forma más frecuente de que varias hebras utilicen de forma desapercibida la misma solicitud y respuesta de forma simultánea. Un enfoque sencillo para este escenario es el uso de un método AtomicBoolean compartido por AsyncListener y la operación asíncrona, de la siguiente manera:
    AtomicBoolean isOkayToRun = (AtomicBoolean) request.getAttribute("isOkayToRun");
    if (isOkayToRun.setAndGet(false)){ 	
    				//realizar una asignación 
    }
    Con este enfoque, sólo una hebra puede obtener acceso de escritura para la respuesta.
  • El contenedor web intenta cancelar cualquier ejecutable que esté en cola por llamadas al método start(Runnable) cuando se alcanza el tiempo de espera. No obstante, los ejecutables que ya se han iniciado, no se pueden interrumpir porque la interrupción propicia pérdidas de memoria.
  • El número de hebras que realizan la notificaciones de tiempo de espera excedido es muy pequeño. El intento de cualquier operación intensiva o cualquier operación de grabación desde un tiempo de espera no se recomienda, porque incluso una pequeña operación de grabación podría tardar mucho, si el cliente tiene una conexión lenta. Cuando inhabilita el tiempo de espera asíncrono, es más sencillo que se produzcan errores OutOfMemory o que se agote el número de conexiones del canal TCP. El valor predeterminado del tiempo de espera es de 30 segundos.
  • Puede configurar varias opciones de servlet asíncrono, como los valores de tiempo de espera y el método AsyncContext start(Runnable) method, en la consola administrativa, pulsando en Servidores > Tipos de servidor > WebSphere Application Servers > nombre_servidor > Valores de contenedor web > Contenedor web. Consulte el tema sobre valores de contenedor web para obtener información sobre la configuración del contenedor web.
Importante: El Asignador de solicitudes asíncrono (ARD) y el Asignador de solicitudes remotas (RRD) no tienen soporte cuando se utilizan servlets asíncronos.
Consejo: Consulte el tema sobre contadores de aplicación web para obtener información sobre métricas para servlets asíncronos.

Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_asyncservlet
File name: cweb_asyncservlet.html