Ejemplo 4: Detención automática de un MDB cuando no se ha especificado un destino de excepción
Como preparación antes de que un recurso del sistema deje de estar disponible o para un mensaje con problemas, configure el sistema para que detenga automáticamente el bean controlado por mensaje (MDB). Para mantener el orden de los mensajes, no utilice un destino de excepción.
Antes de empezar
El destino en el que escucha el MDB debe utilizar un destino de excepción, es decir, hay que configurar como 'none' (ninguno) un destino de excepción para el destino de cola o de espacio de temas.
- La aplicación empresarial que contiene el MDB.
- Los recursos del sistema externo dependientes.
- Un valor de 1 para Umbral de mensaje fallido secuencial.
Es el número máximo de errores secuenciales en la entrega de mensajes, tras el cual el MDB se detiene. Esta propiedad se aplica a los conjuntos de mensajes.Nota: Si esta propiedad se establece en un valor mayor que 1, el sistema lo restaura automáticamente a 1 cuando un destino de excepción se configura como none.
- Un valor de 5000 para Retardo entre reintentos de mensaje fallido, es decir, el tiempo en milisegundos antes de que un mensaje que falla esté disponible para ser entregado al MDB. Durante este periodo, se pueden entregar otros mensajes, a menos que Umbral de mensaje fallido secuencial y el valor máximo de simultaneidad estén establecidos en 1.
- Un valor aceptable para Entregas máximas fallidas por mensaje, esto es, el número máximo de intentos anómalos de procesar un mensaje. Esta propiedad se aplica a mensajes individuales.
El MBean JCA emite notificaciones JMX para indicar que el MDB está en pausa y que el MDB se ha reanudado. Considere registrar una escucha de mensajes en el MBean JCA para recibir las notificaciones JMX.
Acerca de esta tarea
En este escenario, la aplicación empresarial es un sistema de ejecución continuada que utiliza un MDB desplegado para acceder a un recurso del sistema externo.
Cuando se detecta un mensaje con problemas (msg1 en este caso de ejemplo), se vuelve a colocar en la cola.
En lugar de hacer que msg1 esté isponible inmediatamente al MDB, se oculta durante el retardo de reintentos de Retardo entre reintentos de mensaje fallido (cinco segundos en este caso de ejemplo).
Cuando el número de mensajes ocultos alcanza el Umbral de mensaje fallido secuencial, el MDB no procesará más mensajes hasta que uno de los mensajes ocultos vuelva a estar disponible. En este caso de ejemplo, este umbral se alcanza en cuanto msg1 se oculta.
Cuando caduca el Retardo entre reintentos de mensaje fallido para msg1, msg1 deja de estar oculto y se vuelve a procesar.
Este proceso se repite hasta que msg1 alcanza su límite de Entregas máximas fallidas por mensaje (cinco veces en este caso de ejemplo).
Después de que msg1 deja de estar oculto por cuarta vez, se retrotrae y se vuelve a ocultar, se alcanza el valor Umbral de mensaje fallido secuencial y el MDB se detiene automáticamente. El MBean JCA emite una notificación JMX y una entrada de registro alerta al administrador del sistema que el MDB se ha detenido.