Beans controlados por mensajes: manejo de transacciones con el bus de integración de servicios

Los beans controlados por mensajes pueden manejar mensajes en destinos (o puntos finales) dentro del ámbito de una transacción.

Hay tres casos posibles, basados en el valor del descriptor de despliegue de bean controlado por mensaje que seleccione: la transacción gestionada por contenedor (necesaria), la transacción gestionada por contenedor (no soportada) y la transacción gestionada por bean.

En los valores del descriptor de despliegue de bean controlado por mensaje, puede elegir si el bean controlado por mensaje gestiona sus propias transacciones (transacción gestionada por bean) o si un contenedor gestiona transacciones de parte del bean controlado por mensaje (transacción gestionada por contenedor). Para obtener más información acerca de los valores del descriptor de despliegue de beans controlados por mensajes, consulte los atributos del descriptor de despliegue de beans controlados por mensajes. Si elige transacciones gestionadas por contenedor, en el cuaderno del descriptor de despliegue, puede seleccionar un tipo de transacción de contenedor para cada método del bean para determinar si las transacciones de contenedor son necesarias o si no reciben soporte. El tipo de transacción de contenedor predeterminado es necesario.

Transacción gestionada por contenedor (necesaria)

En este caso, el servidor de aplicaciones inicia una transacción global antes de leer el mensaje de entrada desde el destino y antes de que el servidor de aplicaciones invoque el método onMessage() de bean controlado por mensajes. Esto significa que otros EJB que el mensaje invoca a su vez y las interacciones con recursos como, por ejemplo, las bases de datos, pueden estar dentro del ámbito de esta transacción global individual, en la que se ha obtenido el mensaje de entrada.

Si este flujo de aplicaciones se completa correctamente, se compromete la transacción global. Si el flujo no se completa correctamente, (si la transacción se ha marcado para restitución o si se produce una excepción de tiempo de ejecución), se restituye la transacción y el mensaje de entrada se vuelve a restituir al destino del bean controlado por mensaje.

Transacción gestionada por contenedor (no soportada)

En este caso, no hay transacción global pero el proveedor de JMS puede continuar entregando un mensaje desde un destino de bean controlado por mensajes al servidor de aplicaciones de una unidad de trabajo. Puede considerarla una transacción global, ya que no implica a otros recursos en su ámbito de transacción.

El servidor de aplicaciones reconoce la entrega de los mensajes cuando se ha asignado correctamente el onMessage() del bean controlado por mensajes (utilizando la modalidad de reconocimiento que ha especificado el ensamblador del bean controlado por mensaje).

No obstante, el servidor de aplicaciones no realiza un reconocimiento si durante la ejecución se genera una excepción sin comprobar procedente del método onMessage(). Por lo tanto, el mensaje se restituye otra vez al destino del bean controlado por mensajes. ¿O se reconoce y suprime?

La respuesta depende de si el proveedor de JMS de utiliza un punto de sincronización y puede variar dependiendo de la plataforma operativa (en particular, la plataforma operativa z/OS puede comportarse aquí de modo diferente).

Si el proveedor de JMS establece un punto de sincronización alrededor del consumo del mensaje del bean controlado por mensajes en este caso de transacción gestionada por contenedor (no soportado), el mensaje se vuelve a restituir al destino después de que se produzca una excepción sin comprobar.

Si no se utiliza un punto de sincronización, el mensaje se suprime del destino después de una excepción.

Para obtener información relacionada, consulte la nota técnica "El comportamiento de MDB es diferente en z/OS que en un entorno distribuido cuando se obtienen mensajes no permanentes en el punto de sincronismo" en http://www.ibm.com/support/docview.wss?uid=swg21231549.

Transacción gestionada por bean

En este caso, la acción es similar al caso de la transacción gestionada por contenedor (no soportada). Aunque en este caso puede haber una transacción de usuario, cualquier transacción de usuario iniciada en la asignación onMessage() del bean controlado por mensajes no incluye el consumo del mensaje desde el destino del bean controlado por mensajes dentro del ámbito de la transacción. Para ello, utilice el escenario de transacción gestionada por contenedor (necesaria)


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=cmb_trans_sib
File name: cmb_trans_sib.html