marcel gnoth – einer für alle – alle für einen! e3 verteilte transaktionen...
TRANSCRIPT
Marcel Gnoth – www.gnoth.net
Einer für alle – alle für einen!
E3 Verteilte Transaktionen mit .NET-Komponenten
Marcel Gnoth – www.gnoth.net
Wer bin ich...?
Dipl. Inf. Marcel GnothEntwickler, Trainer, MCSD, AutorGeschäftsanwendungen, COM, Datenbanken, Verteilte Informationssystemewww.gnoth.netaktuelle Folien und Beispiele auf der Webseite
NTeam GmbH, Berlinwww.nteam.de (MS Server Familie, BI, Entwicklung)Microsoft Gold Certified Partner
Marcel Gnoth – www.gnoth.net
Inhalt
Die HerausforderungEinführung TransaktionenTransaktionen mit dem SQL ServerMehrbenutzer-Zugriff auf eine DatenbankVerteilte Transaktionen mit SQL ServerTransaktionen mit ADO.NetTransaktionen mit COM+Steuerung einer COM+ Transaktion
Marcel Gnoth – www.gnoth.net
Inhalt
Eine transaktionale System.EnterpriseServices – Komponente
Der Distributed Transaction Coordinator (DTC)
Komponente mit verteilten Transaktionen
DTC und andere Welten
Schlußbemerkungen
Links
Marcel Gnoth – www.gnoth.net
Die Herausforderung
Es war einmal .....
Marcel Gnoth – www.gnoth.net
Transaktion
Überall Transaktionen
Unser Leben besteht aus Transaktionen
Das alte Beispiel mit den zwei Bankkonten
Eheschließung
Beim NotarServer Hypobank
KontenKonto C – 10
Konto D
Server Sparkasse
KontenKonto A + 10
Konto B
Marcel Gnoth – www.gnoth.net
SQLServer MSMQ Oracle
Die Computerwelt
Verarbeitung von Geschäftsprozessen
SQL-Server / Oracle / MSMQ (Message Queue)
Main Frame Systeme
Zusammenarbeit mit anderen IT-Systemen
Dienste unter Windows
Alle unter einen Hut bringen
TX = Transaktion
Marcel Gnoth – www.gnoth.net
Einführung Transaktionen
Marcel Gnoth – www.gnoth.net
Merksatz
Eine Transaktion ist eine Menge von Aktionen, die ein System von einem konsistenten Zustand zu einem anderen konsistenten Zustand transformieren.
Ein konsistenter Zustand wird durch die Anwendungslogik definiert.
Marcel Gnoth – www.gnoth.net
ACID I
Atomicity (Unteilbarkeit)Alles oder nichtswenn eine Aktion fehlschlägt, dann Rollback für alle
Consistency (Konsistenz)System von einem konsistenten zu einem anderen konsistenten Zustand transformierenabhängig von den GeschäftsregelnBeispiel: Einfügen in verkettete Liste
• Vorgänger und Nachfolger Pointer aktualisieren oder keinen
Marcel Gnoth – www.gnoth.net
ACID II
Isolation (Isolation)mehrere Transaktionen gleichzeitig
jede Transaktion läuft für sich allein, als wenn sie die einzige wäre
laufende Transaktionen sind für andere nicht sichtbar
Serialisierbarkeit
Beispiel: Durchsuchen der verketteten Liste• entweder vor dem Einfügen eines Elementes oder danach
Marcel Gnoth – www.gnoth.net
ACID II – Isolation Beispiel
Transaktion A multipliziert Daten mit Faktor 2Transaktion B addiert zu den Daten 1zwei Werte: 0 und 10Ergebnisse:
A zuerst: 1 und 21 -> (0*2)+1 und (10*2)+1B zuerst: 2 und 22 -> (0+1)*2 und (10+1)*2
Beides gut, aber 1 und 22 oder 2 und 21 sind schlecht!
Marcel Gnoth – www.gnoth.net
ACID III
Durability (Beständigkeit)Resultate einer bestätigten Transaktion sind dauerhaft
Computer / Netzwerkausfälle
Marcel Gnoth – www.gnoth.net
Transaktionen mit SQL-Server
Marcel Gnoth – www.gnoth.net
Transaktionsverwaltung SQL-Server
TransaktionstypenExplicit, Autocommit, Implicit
SperrvorrichtungenIsolation der Transaktionen
ProtokollfunktionenRollback bei Systemfehlern
Marcel Gnoth – www.gnoth.net
Transaktionensmodi
AutocommitStandardmodusjede TSQL-Anweisung ist eine einzelne Transaktion
ExplicitBEGIN TRANSACTION, COMMIT, ROLLBACK
ImplicitSET IMPLICIT_TRANSACTIONS ONTransaktionen starten automatisch, bis COMMIT oder ROLLBACK
Marcel Gnoth – www.gnoth.net
Beispiel
Eine Transaktion mit TSQL und dem iSQLw
TSQL Tx.sql
Marcel Gnoth – www.gnoth.net
Mehrbenutzer – Zugriff
Probleme mit der Parallelität
Marcel Gnoth – www.gnoth.net
Probleme der Parallelität
Viele Anwender aber parallel auf einer Datenbank
zusammenhängende Aktionen eines Anwenders werden in Transaktionen zusammengefaßt
Lesen, Schreiben, Löschen, Einfügen
arbeiten mehrere Anwender gleichzeitig auf der Datenbank, so müssen deren Transaktionen voneinander isoliert werden.
Kompromiss zwischen Isolation und Durchsatz
Marcel Gnoth – www.gnoth.net
Lost Update
Verlorene Aktualisierungen (Lost Update)zwei Anwender lesen die gleichen Daten
beide ändern, der letzte gewinnt, die Änderungen des ersten werden überschrieben
Begin Transaktion 1read (Kontostand)Kontostand = Kontostand + 100
write (Kontostand)Commit Transaktion 1
Begin Transaktion 1read (Kontostand)Kontostand = Kontostand + 100
write (Kontostand)Commit Transaktion 1
Begin Transaktion 2read (Kontostand)Kontostand = Kontostand – 20write (Kontostand)Commit Transaktion 2
Begin Transaktion 2read (Kontostand)Kontostand = Kontostand – 20write (Kontostand)Commit Transaktion 2
Marcel Gnoth – www.gnoth.net
Dirty Read
Lesen unbestätigter Daten (Dirty Read)TX A liest Daten, die TX B geändert, aber nicht bestätigt hat
wenn TX B ein Rollback durchführt ......Begin Transaktion 1Kontostand = 5000write (Kontostand)
Rollback Transaction 1
Begin Transaktion 1Kontostand = 5000write (Kontostand)
Rollback Transaction 1
Begin Transaktion 2read (Kontostand)Kontostand = Kontostand – 20
write (Kontostand)Commit Transaciton 2
Begin Transaktion 2read (Kontostand)Kontostand = Kontostand – 20
write (Kontostand)Commit Transaciton 2
Marcel Gnoth – www.gnoth.net
Nonrepeatable Reads
Nicht wiederholbarer Lesevorgang (Nonrepeatable Reads)
eine Transaktion liest eine Zeile zweimal und erhält unterschiedliche Daten
Zeile wurde von anderer TX aktualisiert oder gelöscht
mindestens zwei Lesevorgänge
Fremd TX hat COMMIT durchgeführt
Marcel Gnoth – www.gnoth.net
Nonrepeatable Reads
Begin Transaktion 1read (Kontostand)
read (Kontostand)......
Begin Transaktion 1read (Kontostand)
read (Kontostand)......
Begin Transaktion 2read (Kontostand)Kontostand = Kontostand – 20write (Kontostand)Commit Transaktion 2
Begin Transaktion 2read (Kontostand)Kontostand = Kontostand – 20write (Kontostand)Commit Transaktion 2
Marcel Gnoth – www.gnoth.net
Phantoms
Lesen eines Phantoms (Phantoms)TX A erhält Datensätze, die einem Kriterium entsprechen (WHERE-Klausel)
TX B ändert einen Datensatz oder fügt einen hinzu
TX A erhält beim erneuten Abfragen eine andere Menge von Datensätzen
Marcel Gnoth – www.gnoth.net
Phantoms
Begin Transaktion 1Select * From Konto Where Kontostand > 100
Select * From Konto Where Kontostand > 100......
Begin Transaktion 1Select * From Konto Where Kontostand > 100
Select * From Konto Where Kontostand > 100......
Begin Transaktion 2read (Kontostand)Kontostand = 80write (Kontostand)Commit Transaktion 2
Begin Transaktion 2read (Kontostand)Kontostand = 80write (Kontostand)Commit Transaktion 2
Marcel Gnoth – www.gnoth.net
Sperren
Isolation-Eigenschaft einer TransaktionViele Anwender arbeiten gleichzeitig auf einer Datenbank -> „Problem der Parallelität“SET TRANSACTION ISOLATION LEVELKompromiß zwischen Isolierung und Performanz
hohe Isolation -> Anwender blockieren sich gegenseitig, System wird langsamgeringe Isolation -> Anwender können inkonsistente Daten erhalten
Marcel Gnoth – www.gnoth.net
Isolationsstufen
Isolationsstufe Dirty Read Nicht wiederholbarer Lesevorgang
Phantom
Read Uncommitted
Ja Ja Ja
Read Committed Nein Ja Ja
Repeatable Read Nein Nein Ja
Serializable Nein Nein Nein
Marcel Gnoth – www.gnoth.net
Verteilte Transaktionen mit SQL-Server
Marcel Gnoth – www.gnoth.net
Transaktionen zwischen mehreren Servern
SQL-Server ist ein Ressourcenmanagerverwaltet seine Daten über Transaktionen
Transaktionen zwischen verschiedenen Ressourcenmanagern müssen koordiniert werden
Distributed Transaction Coordinator (DTC)
SQL-Server kann mit Transaktions-Managern zusammenarbeiten
X/Open XA-Spezifikation unterstützen
Marcel Gnoth – www.gnoth.net
Transaktionen mit TSQL
Linked Server
BEGIN DISTRIBUTED TRANSACTION BEGIN TRANSACTION
OLE DB-Datenquelle ITransactionJoin-Schnittstelle TX wird von lokal zur verteilten TX heraufgestuft
EXEC sp_addlinkedserver @server='TXTest', provider='SQLOLEDB', @datasrc='SPOCK'
EXEC sp_addlinkedsrvlogin 'TXTest', 'false', NULL, 'sa', ''
Marcel Gnoth – www.gnoth.net
XACT_ABORT
automatisches Rollback bei LaufzeitfehlerSET XACT_ABORT ON
tritt in einer TX ein Laufzeitfehler auf, wird Rollback für die gesamte TX durchgeführt
SET XACT_ABORT OFFnur die Anweisung, die den Laufzeitfehler auslöst wird zurückgesetzt, die Tx läuft weiter
werden keine verschachtelten Tx unterstützt dann SET XACT_ABORT ON setzen
Marcel Gnoth – www.gnoth.net
Code
Set XACT_ABORT OnBEGIN DISTRIBUTED TRANSACTION
INSERT INTO [pubs].[dbo].[authors]([au_id], [au_lname], [au_fname], [phone])VALUES('111-22-3333', 'Duck', 'Donald', '123456')
INSERT INTO [TXTest].[pubs].[dbo].[authors]([au_id], [au_lname], [au_fname], [phone])VALUES('111-22-3333', 'Duck', 'Donald', '123456')
COMMIT
Set XACT_ABORT OnBEGIN DISTRIBUTED TRANSACTION
INSERT INTO [pubs].[dbo].[authors]([au_id], [au_lname], [au_fname], [phone])VALUES('111-22-3333', 'Duck', 'Donald', '123456')
INSERT INTO [TXTest].[pubs].[dbo].[authors]([au_id], [au_lname], [au_fname], [phone])VALUES('111-22-3333', 'Duck', 'Donald', '123456')
COMMIT
Marcel Gnoth – www.gnoth.net
DEMO
Verteilte Transaktion mit iSQLw und TSQL
Marcel Gnoth – www.gnoth.net
Transaktionen mit ADO.Net
Marcel Gnoth – www.gnoth.net
Transaktionen mit ADO.Net
SQLConnection, OLEDBConnectionBeginTransaction
SQLTransaction, OLEDBTransactionCommit, Rollback
cnScotty = new SqlConnection("data source = .....);
cmdScotty = new SqlCommand(query,cnScotty);
cnScotty.Open();
Txn = cnScotty.BeginTransaction(ReadCommitted);
cmdScotty.Transaction = Txn;
cmdScotty.ExecuteNonQuery();
cnScotty = new SqlConnection("data source = .....);
cmdScotty = new SqlCommand(query,cnScotty);
cnScotty.Open();
Txn = cnScotty.BeginTransaction(ReadCommitted);
cmdScotty.Transaction = Txn;
cmdScotty.ExecuteNonQuery();
Marcel Gnoth – www.gnoth.net
Transaktionen mit ADO.NET
Tx – Anweisungen bedeuten Roundtrip zum Server (Begin, Commit, Rollback)
keine eigene Unterstützung von verteilten Transaktionen, andere Mechanismen benutzen
TSQL-Anweisungen, die sich auf Linked Server beziehen
COM+ und DTC (folgt....) Local
Transaction
Client Server
ADO.NET
OLE DB
AccountsAccount A
Account B
SQL TDS
Marcel Gnoth – www.gnoth.net
OLEDB und ODBC – APIs
direkte Programmierung ohne ADO
ermöglichen ebenfalls Steuerung von verteilten Transaktionen
aufwendige Programmierung
nur in Sonderfällen sinnvoll
DBDBDBDB DBDBDBDB
OLE DBOLE DB
ADOADO
Client
Marcel Gnoth – www.gnoth.net
COM+ Überblick
Theorie (nur ein wenig )
Marcel Gnoth – www.gnoth.net
Überblick COM+
TransaktionenRessourcen Management
Just in Time Aktivierung (JIT), Objekt-pooling
Synchronisation bei parallelem Zugriff auf Komponenten (Threads)Deklarative SicherheitLoosely coupled events, Queued ComponentsCompensating Resource Managers (CRM)
ermöglicht nicht transaktionalen Ressourcen an Transaktionen teilzuhaben (Filesystem,...)
Marcel Gnoth – www.gnoth.net
COM+ Welt und .Net
die üblichen Verdächtigen.....
COM and Win32COM and Win32
COM+ ServicesCOM+ Services
.NET Enterprise Services
.NET Enterprise Services
Common Language Runtime Common Language Runtime
Marcel Gnoth – www.gnoth.net
Applikationstypen
Bibliotheksanwendung (ActivationOption.Library)Komponente im Prozeßraum des Clients
bessere Performance, nicht alle COM+ Dienste verfügbar
Serveranwendung (ActivationOption.Server)Komponente in eigenem Mutterprozeß
stabiler, da eigener Prozeß, mehr Möglichkeiten
DienstClient ProcessClient Process
Dllhost.exe ProcessDllhost.exe Process
Server ApplicationServer ApplicationLibrary ApplicationLibrary Application
Class AClass A Class BClass B
Marcel Gnoth – www.gnoth.net
Transaktionen in COM+
.Net Enterprise Services
Marcel Gnoth – www.gnoth.net
Attribute einer COM+ Komponente
TransactionDisabled
• Tx-Attribut wird von COM+ ignoriert
Not Supported• Komponente wird in einem Kontext ohne Tx aktiviert
Supported• beteiligt sich an Tx, wenn vorhanden
[Transaction(TransactionOption.Required)]Class MyTxClass : ServicedComponent{…}
[Transaction(TransactionOption.Required)]Class MyTxClass : ServicedComponent{…}
Marcel Gnoth – www.gnoth.net
Attribute einer COM+ Komponente
Required• Komponente muß in einem transaktionalen Kontext laufen
Requires New• Für die Komponente wird ein neuer transaktionaler Kontext
angelegt.
Marcel Gnoth – www.gnoth.net
Transaktions – Ströme
Gruppe von COM+ Komponenten in der selben Tx -> Tx-Stream
Zugriff auf Transaktion ID (unit-of-work ID) und Transaktion Objekt über Objekt Kontext
Database Connections nehmen automatisch teil
Root
Sub2
RootClient
Sub1
Transaction Stream Root = Required oder Requires New
Sub1 und Sub2 = Required oder Supported
Marcel Gnoth – www.gnoth.net
Das Ergebnis einer Transaktion
Ergebnis der Transaktion und Lebensdauer der Komponente
Pro Objektkontext: Consistent- und Done Flag
Pro Transaktion: Abort Flag
Root
Transaction Stream
RootClient
Sub1
Sub2
DoneConsistent
DoneConsistent
DoneConsistent
Abort
Marcel Gnoth – www.gnoth.net
Done und Consistent - Flags
DoneFalse wenn Objekt in Kontext Aktiviert wird
Wenn am Ende des Methodenaufrufs Flag = True, dann wird Objekt deaktiviert -> Objekt wird nicht mehr benötigt
Consistent (Happy-Flag)wenn alle Komponenten Consistent-Flag = True, dann kann Commit für die Tx durchgeführt werden
Marcel Gnoth – www.gnoth.net
Abort Flag
Abort (Doomed-Flag)gilt für die gesamte Tx
initialisiert mit False
wenn True, dann muß Abort für die Tx durchgeführt werden
wenn True, dann kann es nicht mehr auf False zurückgesetzt werden
Marcel Gnoth – www.gnoth.net
Ergebnis der Transaktion
wenn Aufruf des Root-Client zum Root-Objekt zurückkehrt entscheidet COM+ über Ergebnis
Wenn Abort-Flag = True -> Abort
Wenn eines der Consistent-Flags = False -> Abort
Wenn Abort=False, alle Consistent=True -> Commit
Wenn Done-Flag = True -> Objekt deaktiviert
Ist Done-Flag = False -> weitere Aufrufe in der gleichen Tx möglich. Nicht empfohlen!
Marcel Gnoth – www.gnoth.net
Ergebnisse
Consistent – Flag entscheidet über Commit einer TransaktionDone – Flag entscheidet, ob Objekt deaktiviert werden kann
Objekt kommt in Pool, Object – State geht verlorenRessourcen werden freigegebenClient behält eine Objektreferenzbei erneuten Aufrufen erhält Client ein Objekt aus Pool oder ein neues
Marcel Gnoth – www.gnoth.net
Steuerung einer COM+ Transaktion
Marcel Gnoth – www.gnoth.net
Client gesteuerte Transaktionen
Root Client steuert Transaktion
COM+ TypeLibrary
TransactionContext COM – Komponente CreateInstance (transaktionale COM+ Komponente)
Abort und Commit
ITransactionContext tx;tx = (ITransactionContext) new TransactionContext( );MyTXClass txCl1=(MyTXClass)
tx.CreateInstance("ProgID1");MyTXClass txCl2=(MyTXClass)
tx.CreateInstance("ProgID2");txCl1.DoWork( );txCl2.DoWork( );tx.Commit ( );
ITransactionContext tx;tx = (ITransactionContext) new TransactionContext( );MyTXClass txCl1=(MyTXClass)
tx.CreateInstance("ProgID1");MyTXClass txCl2=(MyTXClass)
tx.CreateInstance("ProgID2");txCl1.DoWork( );txCl2.DoWork( );tx.Commit ( );
Marcel Gnoth – www.gnoth.net
Steuerung durch Komponente
System.EnterpriseServices.ContextUtil, Statische Methoden:
SetComplete / SetAbort
EnableCommit / DisableCommit
IsInTransaction = True, wenn Objekt in Transaktion läuft
public void DoWork() {try {
//Tu Du somethingContextUtil.SetComplete();
}Catch (Exception e) {ContextUtil.SetAbort();}}
public void DoWork() {try {
//Tu Du somethingContextUtil.SetComplete();
}Catch (Exception e) {ContextUtil.SetAbort();}}
Marcel Gnoth – www.gnoth.net
Steuerung durch Methoden
Methoden steuern das Ergebnis der Transaktion
Methode Done-Flag Consistent-Flag
EnableCommit false true
DisableCommit false false
SetComplete true true
SetAbort true false
Marcel Gnoth – www.gnoth.net
Steuerung durch Eigenschaften
Individuelles lesen und setzen der Flags
DeactivateOnReturn = trueDone – Flag = 1
MyTransactionVote = trueHappy – Flag = 1
public void DoTxWork( ) {ContextUtil.DeactivateOnReturn = true;ContextUtil.MyTransactionVote = TransactionVote.Abort;... // use ADO.NET to work with databases
ContextUtil.MyTransactionVote=TransactionVote.Commit;}
public void DoTxWork( ) {ContextUtil.DeactivateOnReturn = true;ContextUtil.MyTransactionVote = TransactionVote.Abort;... // use ADO.NET to work with databases
ContextUtil.MyTransactionVote=TransactionVote.Commit;}
Marcel Gnoth – www.gnoth.net
AutoComplete – Attribut
Tritt keine Exception in der Methode auf, wird automatisch SetComplete aufgerufen
Bei einer Exception wird automatisch SetAbort aufgerufen
Exception wird direkt an Aufrufer weitergereicht
macht Code nicht lesbarer, implizites Wissen
[AutoComplete(true)]public string TestAutoComplete(int i){ i = i * 3; return "Ready";}
[AutoComplete(true)]public string TestAutoComplete(int i){ i = i * 3; return "Ready";}
Marcel Gnoth – www.gnoth.net
Transaktions – Isolation
COM+ 1.0: eine Stufe: alle Tx Serialized
COM+ 1.5 WinXP: vier Stufen:ReadUncommited, ReadCommited, RepeatableRead, Serialized, (Any)
Nicht alle Ressourcen – Manager unterstützen alle Stufen
[Transaction(TransactionOption.RequiresNew, Isolation =
TransactionIsolationLevel.ReadCommitted, Timeout = 180)]public class cEnterprise : ServicedComponent { ...}
[Transaction(TransactionOption.RequiresNew, Isolation =
TransactionIsolationLevel.ReadCommitted, Timeout = 180)]public class cEnterprise : ServicedComponent { ...}
Marcel Gnoth – www.gnoth.net
Eine transaktionale System.EnterpriseServices
Komponente
Schluß mit der Theorie, ab in die Praxis
Marcel Gnoth – www.gnoth.net
Eine transaktionale Klasse
Projekt vom Typ ClassLibrary (Dll)
System.EnterpriseServices Namespace referenzieren
Klasse muß erben von ServicedComponent
TransaktionsattributTransactionOption.RequiresNew
using System.EnterpriseServices;[Transaction(TransactionOption.RequiresNew)]public class cEnterprise : ServicedComponent { }
using System.EnterpriseServices;[Transaction(TransactionOption.RequiresNew)]public class cEnterprise : ServicedComponent { }
Marcel Gnoth – www.gnoth.net
Code
[Transaction(TransactionOption.RequiresNew)]public class SQLKirk : ServicedComponent { public SQLKirk(){...} public string DoTrans(){ SqlConnection cnKirk; SqlCommand cmAuthors; string query, constr; try{ query = "Update authors set ... where ..."; cnKirk = new SqlConnection(constr); cmAuthors = new SqlCommand(query,cnKirk); cnKirk.Open(); cmAuthors.ExecuteNonQuery(); ContextUtil.SetComplete(); } catch (Exception exc){ ContextUtil.SetAbort(); throw exc; } return "ready";´ } }
[Transaction(TransactionOption.RequiresNew)]public class SQLKirk : ServicedComponent { public SQLKirk(){...} public string DoTrans(){ SqlConnection cnKirk; SqlCommand cmAuthors; string query, constr; try{ query = "Update authors set ... where ..."; cnKirk = new SqlConnection(constr); cmAuthors = new SqlCommand(query,cnKirk); cnKirk.Open(); cmAuthors.ExecuteNonQuery(); ContextUtil.SetComplete(); } catch (Exception exc){ ContextUtil.SetAbort(); throw exc; } return "ready";´ } }
Marcel Gnoth – www.gnoth.net
Kompilieren und Installieren
Marcel Gnoth – www.gnoth.net
Attribute in AssemblyInfo.cs
ApplicationNameName im COM+ Katalog
ApplicationActivationLibrary oder Server
Werden im COM+ Katalog gespeichert
[assembly:ApplicationName(“MyApplication”)][assembly:ApplicationActivation(ActivationOption.Server)
]
[assembly:ApplicationName(“MyApplication”)][assembly:ApplicationActivation(ActivationOption.Server)
]
Marcel Gnoth – www.gnoth.net
Strong Name
COM + Integration erfordert Strong NameSchlüsseldatei mit sn.exe erzeugen
AssemblyKeyFile Attribut auf die Schlüsseldatei setzen
Anwendung Kompilieren
[assembly: AssemblyKeyFile("..\\..\\TXComponentDTC.snk")]
[assembly: AssemblyKeyFile("..\\..\\TXComponentDTC.snk")]
Marcel Gnoth – www.gnoth.net
Installation
In COM+ Katalog eintragen
regsvcs.exe TXComponentDTC.dllAssembly als COM Komponente registrieren
Eintragen in COM+ Katalog
durch Reflection wird Assembly auf Attribute untersucht und der Eintrag im COM+ Katalog aktualisiert
Testen
Marcel Gnoth – www.gnoth.net
COM+ Verwaltung
SnapIn für MMC: comexp.msc
Konfiguration der COM+ Anwendungen und DTC
Marcel Gnoth – www.gnoth.net
Beobachten des Transaktionsverhalten
Verwaltung -> Komponentendienste -> DTC
Marcel Gnoth – www.gnoth.net
DEMO
Eine COM+ Komponente
Marcel Gnoth – www.gnoth.net
Distributed Transaction Coordinator (DTC)
Marcel Gnoth – www.gnoth.net
DTC Überblick
Transaktionen mit mehreren Ressourcen Managern werden zu einer einzelnen logischen Transaktion zusammengefaßt
Koordiniert Commit / Abort der Ressourcen Manager
Transaction Processing Monitor
Server A
Server B
TransactionDTC
Connection
Connection
DatabaseDatabase#1#1
DatabaseDatabase#1#1
DatabaseDatabase#2#2
DatabaseDatabase#2#2
Marcel Gnoth – www.gnoth.net
DTC
Koordiniert Connections zu DatenquellenConnections werden automatisch zur Tx zugefügtAchtung! Pooled Objects, Conn existiert bereits
ursprünglich Teil von MS SQL Server 6.5wird mit Windows XP installiertCOM+ Transaktionen kapseln DTC Funktionalitätverteilter Dienst, muß auf jedem Computer laufen, der an Tx beteiligt ist
Marcel Gnoth – www.gnoth.net
Verteilte Tx mit DTC
Distributed Transaction
Client
Account A Account BCoordinating
DTCTXID=1234
Server A Server B
Participating
DTCTXID=1234
Component ATXID=1234
Component BTXID=1234DCOM
TM Protocol
Koordinierender DTC startet Tx
Partizipierende DTC treten Tx bei
Steuert Zwei Phasen Commit Protokoll
RessourceManager
RessourceManager
Marcel Gnoth – www.gnoth.net
Komponente mit verteilten Transaktionen
Marcel Gnoth – www.gnoth.net
Das Projekt
Vier Klassen
cEnterprise: koordiniert die anderen drei Objekte
cKirk und cSpock greifen auf verschiedene DBs zu
cUhura greift auf MSMQ zu
Marcel Gnoth – www.gnoth.net
Message Queueing
Transport von Nachrichten zwischen Computern
Queue Manager
Queue
Message
Message
Message
Queue
Message
Message
Message
Message
Queue Manager
Queue
Message
Message
Queue
Message
Message
Message
Message
Message
Message
Queue Manager
Queue
Message
Message
Message
Queue
Message
Message
Message
Message
Queue Manager
Queue
Message
Message
Queue
Message
Message
Message
Message
Message
Message
Marcel Gnoth – www.gnoth.net
Message Queueing – Konzepte
Asynchrone Abarbeitung von AufgabenEmpfänger oder Sender kann Offline sein
Nachrichten werden zwischengepuffert
vergleichbar mit e-mail für Computerprogramme
Aktiver Austausch von Informationen zwischen Programmen / Computern
Pushen von Informationen
BasicPro 5/2001
Marcel Gnoth – www.gnoth.net
Compensating Resource Manager
CRM = Ressource Manager LightDatei – System oder Registry
Infrastruktur im .Net Framework
leichter zu entwickeln, wenn kein Ressource Manager verfügbar ist
Keine kompensierenden Transaktionen
erlauben kompensierende Aktionen in der gleichen Transaktion
Marcel Gnoth – www.gnoth.net
DTC und andere Welten
Zwei Fragen
Gibt es für die Daten, auf die ich zugreifen möchte einen Ressourcen Manager?
Nein? -> CRM
Wie kann ich diesen Ressourcen Manager überreden mit dem DTC zusammenzuarbeiten?
Marcel Gnoth – www.gnoth.net
DTC und andere Welten
OLE – Transaktionsmodell um mit Ressourcenmanagern zu kommunizierenkann teilnehmen an Tx kontrolliert durch:
X/Open DTP (X/Open Distributed Transaction Processing)
XA konforme Transaktionverarbeitungsmonitore• Encina, TopEnd, Tuxedo
IBM DB/2
Transaction Internet Protocol (TIP)
Marcel Gnoth – www.gnoth.net
DTC und Oracle
Alle sagen es geht MS und Oracle zeigen verschiedene Wege Installation und Konfiguration von Client und Server sind nicht ganz einfach
Registry Key,
Patches, Versionen
Konfiguration von Server und Client
Marcel Gnoth – www.gnoth.net
DTC und Oracle – Oracle
Oracle9i Data Provider für .Netusing Oracle.DataAccess.Client;
unterstützt Oracle spezifische Datentypen
verteilte Transaktionen mit „Oracle Services for Microsoft Transaciton Server“
• Oracle als Ressourcen Manager in DTC Transactionen
Oracle9i: Developing with Microsoft .NET • http://otn.oracle.com/tech/windows/Oracle_dotnet.pdf
Marcel Gnoth – www.gnoth.net
DTC und Oracle – Oracle
ODP .NET - Sample Corner http://otn.oracle.com/sample_code/tech/windows/odpnet/content.html
Handling Distributed Transactions using Microsoft Transaction Server through Oracle Data Provider for .NET (ODP .NET)http://otn.oracle.com/sample_code/tech/windows/odpnet/DistributedTransactionSample/Readme.html
Marcel Gnoth – www.gnoth.net
Oracle Services for Microsoft Transaction Server
Überblickhttp://otn.oracle.com/tech/windows/ora_mts/content.html
Proxy zwischen Oracle – DB und DTC
Oracle – Server muß nicht unter Windows laufen
Oracle 8, 8i, 9i Server
Marcel Gnoth – www.gnoth.net
DTC und Oracle – Microsoft
Using Oracle with Microsoft Transaction Server and COM+, ausführliche Anleitung
http://support.microsoft.com/support/complus/mtsandoracle.asp
„Oracle Services for MTS“ werden nicht benötigt
Best Practices for Using Oracle and COM+http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncomser/html/complus_best.asp
Using Oracle Databases with Microsoft Transaction Server (Q193893)
Marcel Gnoth – www.gnoth.net
DTC und Oracle – Microsoft
Microsoft .NET Data Provider for Oracle using System.Data.OracleClient;
KB Artikel Q322343: • Using .NET Framework Data Provider for Oracle to
Improve .NET Application Performance
Marcel Gnoth – www.gnoth.net
IBM DB2
IBM DB2 Driver Available for Use with MTSKnowledge Base Article - 197208
Configuring Data Sources for the Microsoft OLE DB Provider for DB2
Knowledge Base Article - 218590
Configuring Microsoft ODBC Driver for DB2Knowledge Base Article - 216428
Marcel Gnoth – www.gnoth.net
Schlußbemerkungen
reine DB Tx sind über SQL Server schneller, müssen aber in TSQL geschrieben werden
COM+1.0 Tx laufen nur im Isolationsmodus Serialized
Müssen andere Ressourcenmanager eingebunden werden, dann .Net
kein AutoCommit
Marcel Gnoth – www.gnoth.net
Links
TransaktionenSQL Server Onlinedokumentation
Transaction Processing Monitors und DTCMSDN, Microsoft SQL Server, Technical Articles: “An Overview of Transaction Processing Concepts and the MS DTC“
„Distributed Transactions: What you need to know to stay out of trouble?“http://otn.oracle.com/tech/java/architect/distributed_transactions.html
Marcel Gnoth – www.gnoth.net
Links
EnterpriseServicesCOM+ Integration: How .NET Enterprise Services Can Help You Build Distributed Applications http://msdn.microsoft.com/msdnmag/issues/01/10/complus/default.aspx
Microsoft Official Curriculum, Course 2557A:Building COM+ Applications Using Microsoft® .NET Enterprise Services
Performance Comparison: Transaction Control http://msdn.microsoft.com/library/en-us/dnbda/html/bdadotnetarch13.asp
Marcel Gnoth – www.gnoth.net
Links
COM+Windows XP: Make your Components more robust with COM+ 1.5 Innovationeshttp://msdn.microsoft.com/msdnmag/issues/01/08/ComXP/default.aspx
Verteilte Anwendungen mit COM+ und Microsoft Visual Basic programmieren, Ted Pattison, MSPress
MSMQReliable Messaging with MSMQ and .NEThttp://msdn.microsoft.com/library/en-us/dnbda/html/bdadotnetasync2.asp
Marcel Gnoth – www.gnoth.net
Fragen?
Uff...Uff...