Beruflich Dokumente
Kultur Dokumente
Jörg Neumann
Jörg Neumann
Principal Consultant bei Acando
Associate bei Thinktecture
MVP im Bereich „Client App Dev“
Beratung, Schulung, Coaching
Buchautor, Speaker
Mail
– Joerg.Neumann@Acando.de
– Joerg.Neumann@thinktecture.com
Blog
– www.HeadWriteLine.BlogSpot.com
Agenda
Ein paar Hintergründe
Welche Probleme löst System.Transactions?
Programmiermodelle
Resource Manager implementieren
Was ist eine Transaktion?
Eine Transaktion ist ein Sammlung von
Operationen, die im Rahmen eines
(Geschäfts-)Prozesses durchgeführt werden
Ziel ist die Wahrung der Konsistenz im
Fehlerfall
ACID
Atomic
– Alle Aktionen verhalten sich wie eine Operation
Consistent
– Konsistenter Zustand nach Beendigung
Isolated
– Die Aktionen beeinflussen sich nicht gegenseitig
Durable
– Das Ergebnis wird dauerhaft gespeichert
Beteiligte Parteien
Resource Manager (RM)
– Systeme die Transaktionen unterstützten
Transaction Manager (TM)
– Verwalten von Transaktionen
– Resource Manager „enlisten“ sich im TM
Verteilte Transaktionen
Mehrere Resource Manager sind beteiligt
App Domain-Grenze wird überschritten
MSDTC (Distributed Transaction Coordinator)
Two-Phase Commit Protokoll
Two-Phase Commit
Gewährleistung der „Atomarität“ bei
verteilten Transaktionen
– Phase 1: Operation vorbereiten (Prepare)
– Phase 2: Commit/Rollback durchführen
Probleme
– Locking
– Performance
Client
DTC
OK
Prepare Prepare
Commit Commit
OK OK
DTC DTC
Datenbank A Datenbank B
Lokale Transaktionen
App Domain-Grenze wird nicht überschritten
Durable & volatile Resources
Gute Performance
Kein DTC notwendig
Agenda
Ein paar Hintergründe
Welche Probleme löst System.Transactions?
Programmiermodelle
Resource Manager implementieren
Programmiermodelle (.NET 1.x)
ADO.NET
– IDbTransaction
– SqlTransaction, ...
Enterprise Services
– ServicedComponent
MSMQ, T-SQL, ...
ADO.NET
<System.ComponentModel.Transaction()> _
Public Class MyComponent
Inherits System.ComponentModel.ServicedComponent
<AutoComplete()> _
Public Sub MyMethod()
' Logik…
End Sub
End Class
Einschränkungen
ADO.NET-Transaktionen
– Nur eine Ressource (DB) pro Transaktion
Enterprise Services
– Ableitung von ServicedComponent erforderlich
– COM+-Registrierung erforderlich
(mit „Services without Components“ geht‘s ohne)
– DTC wird immer verwendet
Programmiermodelle (.NET 2.0)
System.Transactions
– Ein System für alles!
Lokale und verteilte Transaktionen
Durable & volatile Resource Manager
Einheitliches Programmiermodell
– Keine Ableitung notwendig
– Keine COM+-Registrierung nötig
– Arbeitet mit ADO.NET & ES zusammen
System.Transactions
Enthält Lightweight Transaction Manager
– In-Memory TX-Manager für
Single-Phase Commit RMs
Bessere Performance bei SPC-Transaktionen
Beschränkt auf eine App Domain
Eigene RMs können leicht erstellt werden
Bietet Promotion
Implementierung
Explizit
– Transaction
– CommitableTransaction
Implizit
– TransactionScope
Deklarativ
– Transaction-/AutoComplete-Attribute
Klassenmodell
Transaction
CommitableTransaction DependentTransaction
BeginCommit Complete
Commit
EndCommit
Ambient Transaction
Für implizites Enlistment/Commit/Rollback
über TransactionScope
Automatisches Enlistment durch RMs
Zentraler Zugriff über
Transaction.Current
Funktionsweise
If
Transaction.Current
Me.complete
Not Transaction.Current
= True = new CommittableTransaction()
Is Nothing Then
Transaction.Current
Transaction.Current.Rollback();
Transaction.Current.EnlistPromotableSinglePhase(Me)
= Nothing
End If
Optionen
TransactionOptions
– IsolationLevel
– Timeout
TransactionScopeOption
– Required Unterfunktion enlisted sich in aktueller TX
Promotion
SQL Server 2005
LTM DTC
Enlist DTC
SQL Server 2005
DTC
Enlistment von SqlConnection
Explizites Modell
– SqlConnection.EnlistTransaction()
Implizites Modell
– TransactionScope
– Connection enlisted sich automatisch
Connection String
– Enlist=true
– Transaction Binding=Implicit Unbind
Eigene RMs implementieren
Klasse muss IEnlistmentNotification
implementieren
joerg.neumann@thinktecture.com
www.HeadWriteLine.BlogSpot.com
33