Según el modelo de transacciones distribuidas X/Open, la compatibilidad con transacciones distribuidas se basa en un administrador de transacciones distribuidas que supervisa y administra las operaciones que realizan uno o más administradores de recursos. En Información de resolución de problemas de 4.2, la C-API de Message Queue es compatible con la interfaz XA (entre un administrador de transacciones distribuidas y Message Queue como administrador de recursos compatibles con XA), lo que permite a los clientes de C-API de Message Queue funcionar en un entorno de procesamiento de transacciones distribuidas (tales como BEA Tuxedo) con el fin de participar en transacciones distribuidas.
Esta compatibilidad con transacciones distribuidas cuenta con las siguientes nuevas funciones de C-API (y nuevos parámetros y códigos de error) que se utilizan para implementar la especificación de la interfaz XA:
MQGetXAConnection() MQCreateXASession()
Si la aplicación de un cliente de C se va a utilizar en el contexto de una transacción distribuida, debe obtener una conexión a través de MQGetXAConnection() y crear una sesión para producir y consumir mensajes mediante MQCreateXASession(). . El inicio, la confirmación y la anulación de cualquier transacción distribuida se administra a través de API suministradas a través del administrador de transacciones distribuidas.
La especificación de la interfaz XA de X/Open requiere la siguiente información pública con respecto al administrador de recursos compatibles con XA de Message Queue:
Nombre de la estructura xa_switch_t: sun_my_xa_switch
Nombre del Administrador de recursos: SUN_RM
La biblioteca C-API de MQ que se va a establecer como vínculo: mqcrt
La cadena xa_close y el formato: none
La cadena xa_open y el formato: nombre separado por â;â=pares de valores
Los siguientes pares de valores/nombre son compatibles:
Tabla 1–6 Pares de valores/nombre del administrador de recursos de Message Queue
Nombre |
Valor |
Descripción |
Predeterminado |
---|---|---|---|
dirección. |
host:port |
El sistema:puerto del servicio Portmapper del agente. |
localhost:7676 |
username |
string |
Nombre de usuario para conectarse al agente |
guest |
contraseña |
string |
Contraseña del nombre de usuario |
guest |
conntype |
TCPor SSL |
Tipo de protocolo de la conexión con el agente |
TCP |
trustedhost |
true/false |
Si el sistema del agente es de confianza (sólo aplicable a conntype=SSL) |
true |
certdbpath |
string |
Ruta completa hasta el directorio que contiene el certificado NSS y los archivos de la base de datos clave |
no definido |
clientid |
string |
Requerido únicamente para suscripciones duraderas JMS |
no definido |
reconecta |
entero |
El número de intentos de reconexión al agente (0 significa que no hay reconexiones) |
0 |
Para programar una aplicación que utilice transacciones distribuidas, crea un servicio del lado del servidor que se ejecuta en el entorno del administrador de transacciones y el código del lado del cliente que llama a las API del administrador de transacciones. Message Queue 4.2 incluye ejemplos de programación basados en el administrador de transacciones de Tuxedo. Estos ejemplos están ubicados en el directorio de programas de ejemplo de cada plataforma dentro del directorio ./C/tuxedo.
Este directorio incluye un archivo README que explica cómo configurar Tuxedo para utilizar el administrador de recursos de Message Queue y cómo crear los siguientes programas de ejemplo en el entorno de Tuxedo:
Programa de ejemplo |
Descripción |
---|---|
jmsserver.c |
Implementa los servicios de Tuxedo que envían y reciben mensajes a través de Message Queue. |
jmsclient_sender.c |
Cliente de Tuxedo que utiliza el servicio de producción de mensajes en el programa jmsserver.c . |
jmsclient_receiver.c |
Cliente de Tuxedo que utiliza el servicio de recepción de mensajes en el programa jmsserver.c . |
async_jmsserver.c |
Implementa un servicio de Tuxedo que consume de forma asíncrona mensajes a través de Message Queue. |
jmsclient_async_receiver.c |
Cliente de Tuxedo que utiliza el servicio de consumo de mensajes asíncrono del programa async_jmsserver.c. |