![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
Cómo evitar los tiempos de espera de transacción en la modalidad no ASF
Si el sistema de mensajería se ejecuta en la modalidad no ASF (Application Server Facilities), debe configurar correctamente la propiedad del servicio de transacciones Tiempo de espera de actividad total de transacción y la propiedad personalizada del servicio del escucha de mensajes NON.ASF.RECEIVE.TIMEOUT, para evitar tiempos de espera de transacción no deseados.
Antes de empezar
Para llevar a cabo los pasos de esta tarea, el sistema de mensajería se debe estar ejecutando en la modalidad no ASF. Para cambiar de la modalidad ASF a la modalidad no ASF, añada la propiedad personalizada NON.ASF.RECEIVE.TIMEOUT al servicio de escucha de mensajes tal como se describe en Configuración del servicio de escucha de mensajes.
Acerca de esta tarea
Para WebSphere Application Server versión 7 y posteriores,
los puertos de escucha se estabilizan. Para obtener más información, consulte el artículo
sobre las características que se han estabilizado. Debe planificar la migración de sus configuraciones de despliegue de beans controlados por mensajes de
WebSphere MQ para pasar de utilizar puertos de escucha a utilizar especificaciones de activación.
Para obtener más información sobre cómo configurar
especificaciones de activación para la modalidad no ASF, consulte Configuración de especificaciones de activación
para la modalidad no ASF. No obstante, no debe iniciar esta migración hasta que esté seguro de que la aplicación no
tiene que trabajar con servidores de aplicaciones anteriores
WebSphere Application Server Versión 7. Por
ejemplo, si tiene un clúster de servidor de aplicaciones con algunos miembros de la
versión 6.1 y otros de una versión posterior, no debe migrar las aplicaciones en dicho
clúster para que utilicen las especificaciones de activación hasta que haya migrado todos
los servidores de aplicaciones del clúster a la versión posterior.
Si el sistema de mensajería se está ejecutando en la modalidad no ASF, para evitar tiempos de espera de transacción no deseados, deberá autorizar una cantidad suficiente de tiempo para que se complete el proceso, antes de que se alcance el tiempo de espera de la duración total de la transacción. Por lo tanto, debe asegurarse de que el valor que especifique para la propiedad personalizada del servicio de escucha de mensajes NON.ASF.RECEIVE.TIMEOUT sea menor que el valor que especifique para la propiedad de servicio de transacciones Tiempo de espera de actividad total de transacción y, también, que la diferencia entre los valores de las dos propiedades sea mayor que la cantidad de tiempo que el método onMessage() del bean controlado por mensaje (MDB) tarda en procesar el mensaje.
Procedimiento
- Para configurar la propiedad del servicio de transacciones Tiempo de espera de actividad total de transacción, complete el paso 8 en Configuración de propiedades de transacciones para servidores de aplicaciones.
- Para configurar la propiedad personalizada del servicio de escucha de mensajes NON.ASF.RECEIVE.TIMEOUT, pulse .
- Pulse NON.ASF.RECEIVE.TIMEOUT. Se visualiza la página Propiedades generales.
- Modifique el campo Valor. El valor de NON.ASF.RECEIVE.TIMEOUT se debe especificar en milisegundos. Asegúrese de que el valor que especifique, cuando se convierta a segundos (dividiendo entre 1000), es inferior al valor que ha especificado para Tiempo de espera de actividad total de transacción y que la diferencia entre los valores de las dos propiedades es mayor que el número máximo de segundos que tarda el método onMessage() del MDB en procesar un mensaje.
- Pulse Aceptar.
- Detenga y reinicie el servidor de aplicaciones.
Ejemplo
- El puerto de escucha se inicia y asigna una hebra de la agrupación de hebras y crea una transacción en la hebra.
- La hebra llama al método receive() para escuchar mensajes.
- Después de 110 segundos, en el destino aparece un mensaje.
- La hebra elimina el mensaje del destino y llama al método onMessage() del MDB para empezar a procesar el mensaje.
- Diez segundos más tarde, se alcanza el tiempo de espera de la transacción. El servidor de aplicaciones marca la transacción para su retrotracción.
- Cinco segundos más tarde, el método onMessage() acaba de procesar el mensaje e intenta comprometer la transacción.
- La cantidad total de tiempo que ha transcurrido desde que se inició la transacción es 125 segundos (110 segundos esperando un mensaje, más 15 segundos para procesar el mensaje). Puesto que este tiempo es mayor que el tiempo de espera de la transacción, el servidor de aplicaciones impide que se comprometa la transacción y se retrotrae.