Gestione delle transazioni automatiche in COM+

Nel modello di programmazione COM+ è possibile progettare i componenti per eseguire le operazioni migliori, abilitando la logica di business o stabilendo una connessione al database, e basandosi sul framework di elaborazione delle transazioni di Microsoft Windows per automatizzare le transazioni.

Avvio di una transazione

COM+ avvia automaticamente una transazione quando si verifica una delle condizioni seguenti:

  • Quando un client non transazionale chiama un componente che richiede una transazione o richiede una nuova transazione.
  • Quando un client transazionale chiama un componente che richiede una nuova transazione.

Se COM+ determina che un oggetto deve avere una nuova transazione, inizia prima la transazione e quindi inserisce l'oggetto. Il processo include i seguenti passaggi:

  1. COM+ crea un oggetto contesto, imposta sia l'attivazioneJIT che gli attributi di sincronizzazione su Required e imposta i flag coerenti e eseguiti rispettivamente su True e False.
  2. COM+ comunica con Distributed Transaction Coordinator (DTC) per avviare una transazione. DTC coordina la transazione fisica.
  3. DTC genera un identificatore di transazione e lo passa a COM+. L'identificatore della transazione stabilisce un limite di transazione. Tutti gli oggetti che partecipano alla transazione condividono lo stesso identificatore.
  4. Quando il client crea l'oggetto, COM+ lo attiva entro il limite della transazione.

Fine di una transazione

COM+ termina una transazione automatica eseguendone il commit o l'interruzione quando si verifica una delle condizioni seguenti:

  • L'oggetto radice della transazione completa il suo lavoro e COM+ lo rilascia. Dopo la disattivazione dell'oggetto radice, la transazione tenta di eseguire il commit.
  • Il client rilascia l'oggetto radice. Senza un riferimento, l'oggetto radice disattiva e la transazione tenta di eseguire il commit.
  • La transazione supera la soglia di timeout. La transazione viene interrotta automaticamente se non viene eseguito il commit entro il periodo di timeout della transazione, disattivando tutti gli oggetti associati alla transazione. Il periodo di timeout della transazione predefinito è di 60 secondi.

Flag coerenti e fatti

Velocità delle transazioni notificando all'oggetto radice

Terminazione di una transazione automatica chiamando SetComplete