Condividi tramite


Utilizzo di componenti non transazionali in una transazione

Spesso è utile inserire componenti non transazionali in una transazione per sfruttare le proprietà ACID delle transazioni. Ad esempio, se si dispone di componenti legacy non transazionali usati per aggiornare le password in una rete, è possibile inserire tali componenti in una transazione per garantire che gli aggiornamenti delle password siano coerenti in rete.

L'oggetto contesto della transazione è un oggetto generico che consente ai client non transazionali di combinare il lavoro di più oggetti COM in una singola transazione, senza che sia necessario sviluppare un nuovo componente specificamente a tale scopo. A differenza di una transazione automatica, l'oggetto contesto della transazione richiede al client di eseguire in modo esplicito il commit o l'interruzione della transazione.

Per impostazione predefinita, il valore dell'attributo della transazione dell'oggetto contesto della transazione è impostato su Required. COM+ interrompe la transazione se il client rilascia l'oggetto contesto della transazione senza emettere esplicitamente una chiamata di commit o interruzione.

Nell'esempio di Visual Basic seguente viene illustrato come un client non transazionale possa comporre il lavoro svolto da più oggetti in una singola transazione:

Dim objTxCtx As TransactionContext
Dim objCat As MyDLL.Ccat  ' Ccat is a user-defined component.
Dim objDog As MyDLL.Cdog  ' Cdog is a user-defined component.

' Get TransactionContext object.
Set objTxCtx = _
  CreateObject ("TxCtx.TransactionContext")

' Create instances of Cat and Dog.
Set objCat = _ 
  objTxCtx.CreateInstance ("MyDLL.Ccat")
Set objDog = _ 
  objTxCtx.CreateInstance ("MyDLL.Cdog")

' Both objects do work.
objDog.Bark
objCat.Hiss

' Commit the transaction.
objTxCtx.Commit

Limitazioni dell'oggetto Contesto transazione

Di seguito sono riportate alcune limitazioni importanti dell'oggetto contesto della transazione:

  • Quando si usa un oggetto contesto di transazione, la logica dell'applicazione che combina il lavoro di più oggetti in una singola transazione è associata a un'implementazione client non transazionale specifica e alcuni vantaggi dell'uso dei componenti COM vengono persi. Questi vantaggi persi includono quanto segue:

    • Possibilità di riutilizzare la logica dell'applicazione come parte di una transazione ancora più grande
    • Imposizione della sicurezza dichiarativa
    • Flessibilità per eseguire la logica in remoto dal client
  • L'oggetto contesto transazione viene eseguito in-process con il client non transazionale, il che significa che COM+ deve essere disponibile nel computer client non transazionale. Potrebbe non trattarsi di un problema, ad esempio, quando l'oggetto contesto della transazione viene utilizzato da una pagina ASP (Active Server Pages) in esecuzione nello stesso server di COM+.

  • Non si ottiene un contesto per il client non transazionale quando si crea un oggetto contesto di transazione. Il lavoro transazionale può essere eseguito solo indirettamente, tramite oggetti COM creati usando l'oggetto contesto della transazione. In particolare, il client non transazionale non può usare i distributori di risorse COM+ (ad esempio ODBC) e il lavoro è incluso nella transazione. Ad esempio, gli sviluppatori possono avere familiarità con la sintassi seguente per eseguire operazioni transazionali sui sistemi di database relazionali:

    BEGIN TRANSACTION
      DoWork
    COMMIT TRANSACTION
    

    L'utilizzo dell'oggetto contesto della transazione in modo analogo non produce il risultato desiderato:

    Set objTxCtx = CreateObject ("TxCtx.TransactionContext")
      DoWork
      objTxCtx.Commit
    Set objTxCtx = Nothing
    

    La chiamata a DoWork in questo esempio non è inclusa in una transazione. È invece necessario compilare un componente COM che chiama DoWork, creare un'istanza dell'oggetto di tale componente usando l'oggetto contesto della transazione e quindi chiamare tale oggetto dal client non transazionale affinché il lavoro faccia parte della transazione controllata dal client.