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 creando una connessione al database, e si basano sul framework di elaborazione delle transazioni di Microsoft Windows per automatizzare le transazioni.

Avvio di una transazione

COM+ avvia automaticamente una transazione quando rileva 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 in esso. Il processo include i passaggi seguenti:

  1. COM+ crea un oggetto contesto, imposta rispettivamente gli attributi di attivazione JIT e Sincronizzazione su Obbligatorio e imposta i flag coerenti e eseguiti su True e False.
  2. COM+ comunica con Distributed Transaction Coordinator (DTC) per avviare una transazione. Il DTC coordina la transazione fisica.
  3. Il 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 all'interno del limite della transazione.

Fine di una transazione

COM+ termina una transazione automatica eseguendo 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 interrompe 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 delle transazioni predefinito è di 60 secondi.

Flag coerenti e fatti

Velocità delle transazioni notificando all'oggetto radice

Terminazione di una transazione automatica chiamando SetComplete