rubensa.eu.org algo en qué pensar...
El contenido de este sitio es de libre distribución, siempre que se cite la fuente original. No está permitido su uso comercial sin previo aviso y si lo modifica o distribuye debe mantener esta licencia.
Inicio de sesión de usuario
11. Server Push (Asynchronous Tasks -tareas asíncronas-)
Mié, 28/03/2007 - 17:38 — rubensa
Echo2 tiene la capacidad de que el servidor inicie y envíe actualizaciones al cliente por decisión propia. Esta capacidad se puede usar para actualizar al cliente cuando el servidor recibe una notificación de un evento externo, o simplemente para actualizar el cliente a intervalos regulares de tiempo. Como usos prácticos de esta capacidad de server push (envío desde el servidor) tenemos las aplicaciones interactivas multi-usuario tales como chatrooms (mensajería instantánea), el mantener al usuario de una aplicación actualizado con información de estado o noticias, o la posibilidad de proporcionar feedback (retro-alimentación) en operaciones de larga duración.
Creación y eliminación de Task Queues: La AplicactionInstance es la responsable de la creación y eliminación de colas de tareas. Para poder crear una Task Queue, el desarrollador debe invocar al método createTaskQueue(). Se devuelve un objeto manejador TaskQueueHandle que representa la cola creada. Cuando la aplicación ha terminado de usar la cola, debería invocar el método removeTaskQueue() y pasarle el manejador como parámetro.
El siguiente ejemplo muestra la creación de un TaskQueue:
TaskQueueHandle taskQueue = app.createTaskQueue();
Es critico que mantengamos una referencia al TaskQueue creado hasta que haya sido destruido, como se muestra en el siguiente ejemplo:
app.removeTaskQueue(taskQueue);
Realizando Operaciones Push: Una operación push se lleva a cabo añadiendo tareas a una Task Queue. La operación a realizar se encapsula en un java.lang.Runnable que se ejecutará una vez que se haya establecido un bloqueo en el estado del interfaz de usuario del cliente.
El siguiente código muestra un hipotética actualizacion enviada al cliente. En este ejemplo, asumimos que app es una referencia a la ApplicationInstance, taskQueue representa un TaskQueueHandle activo, progressLabel representa un Label que muestra información de progreso para tareas de larga duración, y progressPercent representa el procentaje de la tarea completado actualmente:
app.enqueueTask(taskQueue, new Runnable() {
public void run() {
progressLabel.setText("Progress: " + progressPercent + "% complete");
}
});
Todas las operaciones que actualicen el estado del interfaz de usuario cliente (esto es, que manipulen el estado del ApplicationInstance y su gerarquía de componentes) deben realizarse en el Runnable. La manipulación del estado de una aplicación Echo2 externamente de otro modo provocará que la aplicación Echo2 lance una IllegalStateException.
Características del timeout (tiempo de vida) de sesión: Un cliente que realiza peticiones de consulta de cola repetidamente al servidor hará que no expire la sesión, incluso si realmente no se ha realizado actividad por parte del usuario. En ese caso la sesión solamente expirará si el usuario navega a otra parte o cierra la ventana del navegador de la aplicación. Esta característica solmente ocurrirá si existen Task Queues activas.
Cómo NO se debería usar el server push: Las características de colas de tareas asíncronas de Echo2 generalmente no están pensadas para la creación de "componentes AJAX interactivos de servidor". Para eso se deberían desarrollar componentes AJAX de alto rendimiento usando elementos de sincronización de pintado HTM-y-JavaScript personalizados que realicen llamadas asíncronas a sus propios servicios del lado del servidor. Server push necesita bloquear el estado del navegador cliente mientras se ejecutan las tareas, lo que puede contribuir de un modo negativo a la experiencia del usuario del componente AJAX.
Las características de server push de Echo2 no hacen uso de multithreading (multihilo). Es seguro ejecutar una aplicación Echo2 con capacidades de server-push en contenedores servlet que no permitan multithreading, siempre que su propia aplicación no lance sus propios threads.
Task Queues (colas de tareas)
Para proporcionar la posibilidad de realizar push a un cliente Echo2, tu aplicación debe primero crear una Task Queue (cola de tareas). Cuando la aplicación determina que tiene que enviar actualizaciones al cliente, añadirá tareas a la Task Queue. Cuando ya no se necesita la capacidad de hacer push, la aplicación debería eliminar la Task Queue.Creación y eliminación de Task Queues: La AplicactionInstance es la responsable de la creación y eliminación de colas de tareas. Para poder crear una Task Queue, el desarrollador debe invocar al método createTaskQueue(). Se devuelve un objeto manejador TaskQueueHandle que representa la cola creada. Cuando la aplicación ha terminado de usar la cola, debería invocar el método removeTaskQueue() y pasarle el manejador como parámetro.
El siguiente ejemplo muestra la creación de un TaskQueue:
TaskQueueHandle taskQueue = app.createTaskQueue();
Es critico que mantengamos una referencia al TaskQueue creado hasta que haya sido destruido, como se muestra en el siguiente ejemplo:
app.removeTaskQueue(taskQueue);
Realizando Operaciones Push: Una operación push se lleva a cabo añadiendo tareas a una Task Queue. La operación a realizar se encapsula en un java.lang.Runnable que se ejecutará una vez que se haya establecido un bloqueo en el estado del interfaz de usuario del cliente.
El siguiente código muestra un hipotética actualizacion enviada al cliente. En este ejemplo, asumimos que app es una referencia a la ApplicationInstance, taskQueue representa un TaskQueueHandle activo, progressLabel representa un Label que muestra información de progreso para tareas de larga duración, y progressPercent representa el procentaje de la tarea completado actualmente:
app.enqueueTask(taskQueue, new Runnable() {
public void run() {
progressLabel.setText("Progress: " + progressPercent + "% complete");
}
});
Todas las operaciones que actualicen el estado del interfaz de usuario cliente (esto es, que manipulen el estado del ApplicationInstance y su gerarquía de componentes) deben realizarse en el Runnable. La manipulación del estado de una aplicación Echo2 externamente de otro modo provocará que la aplicación Echo2 lance una IllegalStateException.
Server Push en Aplicaciones Web Echo2
Cómo funciona server push: Para poder enviar tareas al cliente, el motor del cliente Echo2 realiza peticiones de consulta de cola periódicas al servidor para determinar si se debe realizar alguna operación enviada por el servidor. Si la respuesta del servidor indica que se han encolado operaciones, el motor cliente de Echo2 iniciará la sincronización cliente-servidor. Si no existen Task Queues, el cliente no realizará peticiones al servidor de cosulta de la cola. Por tanto es imortante liberar cualquier cola cuando ya no sea necesaria.Características del timeout (tiempo de vida) de sesión: Un cliente que realiza peticiones de consulta de cola repetidamente al servidor hará que no expire la sesión, incluso si realmente no se ha realizado actividad por parte del usuario. En ese caso la sesión solamente expirará si el usuario navega a otra parte o cierra la ventana del navegador de la aplicación. Esta característica solmente ocurrirá si existen Task Queues activas.
Cómo NO se debería usar el server push: Las características de colas de tareas asíncronas de Echo2 generalmente no están pensadas para la creación de "componentes AJAX interactivos de servidor". Para eso se deberían desarrollar componentes AJAX de alto rendimiento usando elementos de sincronización de pintado HTM-y-JavaScript personalizados que realicen llamadas asíncronas a sus propios servicios del lado del servidor. Server push necesita bloquear el estado del navegador cliente mientras se ejecutan las tareas, lo que puede contribuir de un modo negativo a la experiencia del usuario del componente AJAX.
Cuestiones de multihilo
Hasta el JEE 1.3 (J2EE 1.3), el Java Enterprise Edition prohibe epecíficamente el uso de threads no gestionados por el servidor de aplicaciones. Ciertos contenedores de aplicaicones y de servlets pueden no obligar a que las aplicaciones se adhieran a esta especificación. Si pretendes crear tus propios hilos para realizar tareas de proceso en segundo plano con cualqueir aplicación basada en servlets Java (incluyendo aplicaciones Echo2) deberías comprobar la documentación del contenedor.Las características de server push de Echo2 no hacen uso de multithreading (multihilo). Es seguro ejecutar una aplicación Echo2 con capacidades de server-push en contenedores servlet que no permitan multithreading, siempre que su propia aplicación no lance sus propios threads.
- Inicie sesión para enviar comentarios
