La struttura dello switch IBM MQ XA

Ogni gestore risorse che partecipa a un'unità di lavoro coordinata esternamente deve fornire una struttura di switch XA. Questa struttura definisce sia le capacità del gestore risorse che le funzioni che devono essere richiamate dal coordinatore del punto di sincronizzazione.

IBM® MQ fornisce due versioni di questa struttura:
  • MQRMIXASwitch per la gestione delle risorse XA statiche
  • MQRMIXASwitchDynamic per la gestione dinamica delle risorse XA

Consultare la documentazione del gestore transazioni per determinare se utilizzare l'interfaccia di gestione delle risorse statica o dinamica. Ovunque un gestore transazioni lo supporti, si consiglia di utilizzare la gestione delle risorse XA dinamica.

Alcuni gestori transazioni a 64 bit considerano il tipo long nella specifica XA come 64 bit, mentre altri lo considerano come 32 bit. IBM MQ supporta entrambi i modelli:
  • Se il gestore delle transazioni è a 32 bit, o se il gestore delle transazioni è a 64 bit ma tratta il tipo long di transazione come se fosse a 32 bit, utilizzare il file di caricamento dello switch elencato nella Tabella 1.
  • Se il gestore delle transazioni è a 64 bit e tratta il tipo long come se fosse a 64 bit, utilizzare il file di caricamento dello switch elencato nella Tabella 2.
Alcuni gestori transazioni a 64 bit considerano il tipo long come 64 bit. I seguenti gestori transazioni a 64 bit richiedono il file alternativo di caricamento dello switch a 64 bit:
  • Tuxedo
  • [MQ 9.4.0 giu 2024][MQ 9.4.0 giu 2024]serie TX a 64 bit
Consultare la documentazione del gestore transazioni se non si è certi del modello utilizzato dal gestore transazioni.
Tabella 1. Nomi file di caricamento switch XA
Piattaforma
Nome file di caricamento switch
(server)
Nome file di caricamento switch
(client transazionale esteso)
[ Windows]Windows mqmxa.dll mqcxa.dll
[AIX]AIX® (non filtrata) libmqmxa.a libmqcxa.a
[AIX]AIX (filettato) libmqmxa_r.a libmqcxa_r.a
[Linux]Linux® (non filtrata) libmqmxa.so libmqcxa.so
[Linux]Linux (filettato) libmqmxa_r.so libmqcxa_r.so
Tabella 2. Nomi file di caricamento switch XA a 64 bit alternativi
Piattaforma
Nome file di caricamento switch
(server)
Nome file di caricamento switch
(client transazionale esteso)
[AIX]AIX (non filtrata) libmqmxa64.a libmqcxa64.a
[AIX]AIX (filettato) libmqmxa64_r.a libmqcxa64_r.a
[Linux]Linux (non filtrata) libmqmxa64.so libmqcxa64.so
[Linux]Linux (filettato) libmqmxa64_r.so libmqcxa64_r.so

Alcuni coordinatori di punti di sincronizzazione esterni (non CICS® ) richiedere che ogni gestore risorse che partecipa a un'unità di lavoro fornisca il relativo nome nel campo del nome della struttura switch XA. Il nome del gestore risorse IBM MQ è MQSeries_XA_RMI.

Il coordinatore del punto di sincronizzazione definisce il modo in cui la struttura switch XA IBM MQ si collega ad essa. Le informazioni sul collegamento della struttura switch IBM MQ XA con CICS sono fornite in Utilizzo di CICS. Per informazioni sul collegamento della struttura dello switch IBM MQ XA con altri coordinatori del punto di sincronizzazione compatibili con XA, consultare la documentazione fornita con tali prodotti.

Le seguenti considerazioni si applicano all'utilizzo di IBM MQ con tutti i coordinatori del punto di sincronizzazione compatibili con XA:
  • Si prevede che il codice della libreria del gestore transazioni (in esecuzione come parte della relativa API richiamata dal programmatore dell'applicazione) richiamerà xa_open in IBM MQ in un determinato momento, prima di richiamare MQCONN.

    La chiamata xa_open deve essere effettuata sullo stesso thread in cui viene effettuata la chiamata MQCONN. Il motivo di questo requisito è che la specifica XA richiede che il thread venga utilizzato per implicare il contesto.

    Notare che questo è l'approccio utilizzato nel programma di esempio amqstxsx.c. Questo programma di esempio presuppone che una chiamata xa_open venga effettuata in IBM MQ, dal codice libreria del gestore transazioni, all'interno della relativa funzione tpopen).

    Se non viene effettuata alcuna chiamata xa_open sullo stesso thread, prima della chiamata MQCONN, la connessione del gestore code IBM MQ non verrà associata ad un contesto XA.

    Per ulteriori informazioni, consultare MQCTL.

  • La struttura xa_info passata su qualsiasi chiamata xa_open dal coordinatore del punto di sincronizzazione include il nome di un gestore code IBM MQ . Il nome ha lo stesso modulo del nome gestore code passato alla chiamata MQCONN . Se il nome inoltrato alla chiamata xa_open è vuoto, viene utilizzato il gestore code predefinito.

    In alternativa, la struttura xa_info può contenere valori per i parametri TPM e AXLIB . Il parametro TPM specifica il gestore transazioni utilizzato. I valori validi sono CICS, TUXEDO e ENCINA. Il parametro AXLIB specifica il nome della libreria che contiene le funzioni ax_reg e ax_unreg del gestore transazioni. Per ulteriori informazioni su questi parametri, consultare Configurazione di un client transazionale esteso. Se la struttura xa_info contiene uno di tali parametri, il nome del gestore code viene specificato nel parametro QMNAME , a meno che non venga utilizzato il gestore code predefinito.

  • Solo un gestore code alla volta può partecipare a una transazione coordinata da un'istanza di un coordinatore del punto di sincronizzazione esterno. Il coordinatore del punto di sincronizzazione è effettivamente connesso al gestore code ed è soggetto alla regola per cui è supportata una sola connessione alla volta.
  • Tutte le applicazioni che includono chiamate a un coordinatore del punto di sincronizzazione esterno possono connettersi solo al gestore code che partecipa alla transazione gestita dal coordinatore esterno (poiché sono già effettivamente connesse a tale gestore code). Tuttavia, tali applicazioni devono emettere una chiamata MQCONN per ottenere un handle di collegamento e una chiamata MQDISC prima di uscire.
  • Un gestore code con aggiornamenti delle risorse coordinati da un coordinatore del punto di sincronizzazione esterno deve essere avviato prima del coordinatore del punto di sincronizzazione esterno. Allo stesso modo, il coordinatore del punto di sincronizzazione deve terminare prima del gestore code.
  • Se il coordinatore del punto di sincronizzazione esterno termina in maniera anomala, arrestare e riavviare il gestore code prima di riavviare il coordinatore del punto di sincronizzazione per garantire che tutte le operazioni di messaggistica non sottoposte a commit al momento dell'errore siano risolte correttamente.