Creazione di un gestore transazioni superiore
In KTM un gestore transazioni superiore è un gestore di risorse che crea un'integrazione superiore per le transazioni a cui partecipa. Un'integrazione superiore è un'integrazione che concede al gestore risorse la possibilità di coordinare l'operazione di commit per la transazione dell'integrazione. In altre parole, un client transazionale o il gestore transazioni superiore può avviare la sequenza di preparazione/preparazione/commit per la transazione.
Dopo che un gestore di risorse ha creato un'integrazione superiore per una transazione, KTM rifiuta tutte le chiamate a ZwCommitTransaction per la transazione. Pertanto, i client transazionali non possono eseguire il commit di tale transazione. Il gestore risorse che ha creato l'integrazione superiore deve invece chiamare ZwPrepareEnlistment, ZwPrepareEnlistment e ZwCommitEnlistment.
Quando creare un gestore transazioni superiore
Si supponga di voler integrare un componente TPS (Transaction Processing System) con KTM, ma il componente contiene le proprie funzionalità di gestione delle transazioni non KTM che i client possono chiamare. In una situazione di questo tipo, potrebbe essere necessario creare un gestore transazioni superiore.
Si supponga, ad esempio, che il componente fornisca interfacce proprie usate dai client per creare ed eseguire il commit delle transazioni. Poiché i client del componente non chiamano KTM per creare o eseguire il commit delle transazioni, il componente deve diventare un gestore transazioni superiore quando lo si integra in un TPS basato su KTM.
Come creare un gestore transazioni superiore
Se si vuole che il componente sia un gestore transazioni superiore, è necessario eseguire le operazioni seguenti:
Chiamare ZwCreateResourceManager per registrarsi come resource manager.
Chiamare ZwCreateTransaction ogni volta che un client del componente crea una transazione usando l'interfaccia client del componente.
Chiama ZwCreateEnlistment, imposta il flag di ENLISTMENT_SUPERIOR e specifica i flag di accesso ENLISTMENT_SUPERIOR_RIGHTS e ENLISTMENT_SUBORDINATE_RIGHTS.
Chiama ZwPrepareEnlistment, ZwPrepareEnlistment e ZwCommitEnlistment quando il client del componente chiama l'interfaccia client del componente per eseguire il commit della transazione.
KTM consente un solo inserimento superiore per transazione. Altri gestori di risorse possono creare ulteriori integrazione. Questi enlistments sono denominati enlistments subordinati perché non possono avviare l'operazione di commit.
Per eseguire il rollback di un'integrazione superiore, il gestore delle transazioni superiore chiama ZwRollbackEnlistment.
Per recuperare un'integrazione superiore, il gestore delle transazioni superiore chiama ZwRecoverEnlistment.
Quando un gestore transazioni superiore esegue il commit, esegue il rollback o recupera una transazione, KTM invia notifiche di transazione a tutti gli inserimenti subordinati in modo che possano partecipare.
Un tps che include un gestore transazioni superiore non può usare operazioni di commit a fase singola.
Durante un'operazione di ripristino, se KTM non riesce a determinare il risultato di una transazione, invia una notifica di TRANSACTION_NOTIFY_RECOVER_QUERY al gestore delle transazioni superiore. In risposta, il gestore delle transazioni superiore deve chiamare ZwCommitEnlistment se è possibile eseguire il commit della transazione o ZwRollbackEnlistment se è necessario eseguire il rollback della transazione. Se il gestore delle transazioni superiore non è in grado di determinare il risultato di una transazione, non deve rispondere alla notifica TRANSACTION_NOTIFY_RECOVER_QUERY finché non può determinare un risultato.