Visión general de Web Services Atomic Transaction
El soporte de transacción atómica de servicios Web (WS-AT) en el servidor de aplicaciones proporciona un servicio de transacciones de calidad para los entornos de servicios web. Las aplicaciones de servicios web distribuidas y los recursos que utilizan pueden formar parte de las transacciones globales distribuidas. Ahora WS-AT también se soporta en Liberty.
Los protocolos de servicios web proporcionan maneras estándares de definir las aplicaciones de servicios web y las aplicaciones pueden utilizarlos para funcionar independientemente del producto, plataforma o lenguaje de programación que se utilice. El soporte WS-AT es una implementación de las especificaciones siguientes en el servidor de aplicaciones. Estas especificaciones definen un conjunto de servicios web que permiten a las aplicaciones participar en transacciones globales que se distribuyen en el entorno heterogéneo de los servicios web.
- WS-AT es un tipo específico de coordinación que define protocolos para transacciones atómicas. Liberty solo puede utilizar la especificación Web Services Atomic Transaction Versión 1.2.
- WS-COOR (Web Services Coordination) especifica un CoordinationContext y un servicio de registro con el que los servicios web participantes pueden inscribirse para participar en los protocolos ofrecidos por tipos de coordinación específicos. Liberty solo puede utilizar la especificación Web Services Coordination Versión 1.2.
El soporte WS-AT es un protocolo de interoperatividad que no presenta interfaces de programación nuevas para el soporte de transacciones. El uso de aplicaciones empresariales estándar de la interfaz JTA (Java™ Transaction API) UserTransaction proporciona la demarcación de transacciones globales. Si un componente de aplicación que se ejecuta bajo una transacción global realiza una solicitud de servicios web, se propaga un WS-AT CoordinationContext de forma implícita a los servicios web de destino, pero sólo si se han establecido los descriptores de despliegue de aplicaciones apropiados, tal como se describe en el tema sobre la configuración de atributos de despliegue transaccionales.
Si el servidor de aplicaciones es el sistema que aloja el punto final de destino de una solicitud de servicios web que contiene un contexto de coordinación WS-AT, el servidor de aplicaciones establece de forma automática una transacción JTA subordinada en el entorno de tiempo de ejecución de destino que se convierte en el contexto transaccional bajo el que se ejecuta la aplicación de servicios web de destino.
En la siguiente figura se muestra un contexto de transacción compartido entre dos servidores de aplicaciones para una solicitud de servicios web que contiene un WS-AT CoordinationContext.

De forma predeterminada, si habilita la característica WS-AT y empieza la transacción en el lado del cliente en Liberty, todas las operaciones de servicios web que se incluyen en la transacción de cliente se añaden a la transacción global. Sin embargo, si ejecuta cualquier código fuera del ámbito de la transacción global actual, utilice UOWManager con el tipo UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION . Esto tendrá el efecto de suspender y reanudar la transacción global en ese fragmento de código.
Si la característica WS-AT está habilitada | Si existe la transacción | Si existe la aserción de política en WSDL | Si la transacción global WS-AT está habilitada |
---|---|---|---|
No | No | No | No |
No | No | Sí | No, si Liberty genera una excepción |
No | Sí | No | No |
No | Sí | Sí | No, si Liberty genera una excepción |
Sí | No | No | No |
Sí | No | Sí (wsp: Opcional="false") | No, si Liberty genera una excepción |
Sí (wsp: Opcional="true") | No | ||
Sí | Sí | No | Sí |
Sí | Sí | Sí | Sí |
Si la característica WS-AT está habilitada | Si existe un contexto de coordinación en la cabecera SOAP | Si existe la aserción de política en WSDL | Si la transacción global WS-AT está habilitada |
---|---|---|---|
No | No | No | No |
No | No | Sí | No |
No | Sí | No | No, si Liberty genera una excepción |
No | Sí | Sí | No, si Liberty genera una excepción |
Sí | No | No | No |
Sí | No | Sí (wsp: Opcional="false") | No, si Liberty genera una excepción |
Sí (wsp: Opcional="true") | No | ||
Sí | Sí | No | Sí |
Sí | Sí | Sí | Sí |
Diseño de la aplicación
WS-AT es un protocolo de transacciones de compromiso de dos fases y está indicado únicamente para transacciones de corta duración.
WS-AT es más adecuado para distribuir el contexto de transacción entre los servicios web que se despliegan en una sola empresa. Los únicos que transportan el contexto de transacción son los patrones de intercambio de mensajes de solicitud-respuesta, porque el originador (la aplicación o el contenedor) de una transacción tiene que estar seguro de que hayan finalizado todas las tareas empresariales que se ejecutan en esa transacción antes de solicitar la finalización de una transacción. Los servicios web llamados por una solicitud unidireccional nunca se ejecutan bajo la transacción del cliente solicitante.
El efecto de las anomalías de servicio en las transacciones WS-AT es similar al efecto de las excepciones de aplicaciones EJB (Enterprise JavaBeans) en las transacciones, como se describe en la especificación EJB. Si un servicio que se ejecuta bajo la transacción WS-AT de solicitante devuelve un error, el servidor de aplicaciones no marca automáticamente la transacción como de sólo retrotracción. El manejador de excepciones del solicitante elige si la transacción puede continuar y elige si se marca la transacción como de sólo retrotracción. Si el solicitante se ejecuta en el servidor de aplicaciones, pueden utilizarse las API JTA o EJB estándar para marcar la transacción como de sólo retrotracción. El componente de servicio que genera el error podría marcar por sí mismo la transacción como de sólo retrotracción antes de devolver el error. Si la implementación del componente de servicio encuentra una excepción del sistema, habitualmente permite que su contenedor maneje la excepción. Los contenedores del servidor de aplicaciones marcan automáticamente cualquier contexto de transacción recibido como de sólo retrotracción cuando manejan una excepción del sistema generada por una implementación de servicio.