Marcel Gnoth – Einer für alle – alle für einen! E3 Verteilte Transaktionen mit.NET-Komponenten
Marcel Gnoth – Wer bin ich...? Dipl. Inf. Marcel Gnoth Entwickler, Trainer, MCSD, Autor Geschäftsanwendungen, COM, Datenbanken, Verteilte Informationssysteme aktuelle Folien und Beispiele auf der Webseite NTeam GmbH, Berlin (MS Server Familie, BI, Entwicklung) Microsoft Gold Certified Partner
Marcel Gnoth – Inhalt Die Herausforderung Einführung Transaktionen Transaktionen mit dem SQL Server Mehrbenutzer-Zugriff auf eine Datenbank Verteilte Transaktionen mit SQL Server Transaktionen mit ADO.Net Transaktionen mit COM+ Steuerung einer COM+ Transaktion
Marcel Gnoth – Inhalt Eine transaktionale System.EnterpriseServices – Komponente Der Distributed Transaction Coordinator (DTC) Komponente mit verteilten Transaktionen DTC und andere Welten Schlußbemerkungen Links
Marcel Gnoth – Die Herausforderung Es war einmal.....
Marcel Gnoth – Transaktion Überall Transaktionen Unser Leben besteht aus Transaktionen Das alte Beispiel mit den zwei Bankkonten Eheschließung Beim Notar Server Hypobank Konten Konto C – 10 Konto D Server Sparkasse Konten Konto A + 10 Konto B
Marcel Gnoth – SQL Server MSMQOracle 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 – Einführung Transaktionen
Marcel Gnoth – 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 – ACID I Atomicity (Unteilbarkeit) Alles oder nichts wenn eine Aktion fehlschlägt, dann Rollback für alle Consistency (Konsistenz) System von einem konsistenten zu einem anderen konsistenten Zustand transformieren abhängig von den Geschäftsregeln Beispiel: Einfügen in verkettete Liste Vorgänger und Nachfolger Pointer aktualisieren oder keinen
Marcel Gnoth – 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 – ACID II – Isolation Beispiel Transaktion A multipliziert Daten mit Faktor 2 Transaktion B addiert zu den Daten 1 zwei Werte: 0 und 10 Ergebnisse: A zuerst: 1 und 21 -> (0*2)+1 und (10*2)+1 B 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 – ACID III Durability (Beständigkeit) Resultate einer bestätigten Transaktion sind dauerhaft Computer / Netzwerkausfälle
Marcel Gnoth – Transaktionen mit SQL-Server
Marcel Gnoth – Transaktionsverwaltung SQL-Server Transaktionstypen Explicit, Autocommit, Implicit Sperrvorrichtungen Isolation der Transaktionen Protokollfunktionen Rollback bei Systemfehlern
Marcel Gnoth – Transaktionensmodi Autocommit Standardmodus jede TSQL-Anweisung ist eine einzelne Transaktion Explicit BEGIN TRANSACTION, COMMIT, ROLLBACK Implicit SET IMPLICIT_TRANSACTIONS ON Transaktionen starten automatisch, bis COMMIT oder ROLLBACK
Marcel Gnoth – Beispiel Eine Transaktion mit TSQL und dem iSQLw TSQL Tx.sql
Marcel Gnoth – Mehrbenutzer – Zugriff Probleme mit der Parallelität
Marcel Gnoth – 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 – 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 1 read (Kontostand) Kontostand = Kontostand write (Kontostand) Commit Transaktion 1 Begin Transaktion 1 read (Kontostand) Kontostand = Kontostand write (Kontostand) Commit Transaktion 1 Begin Transaktion 2 read (Kontostand) Kontostand = Kontostand – 20 write (Kontostand) Commit Transaktion 2 Begin Transaktion 2 read (Kontostand) Kontostand = Kontostand – 20 write (Kontostand) Commit Transaktion 2
Marcel Gnoth – 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 1 Kontostand = 5000 write (Kontostand) Rollback Transaction 1 Begin Transaktion 1 Kontostand = 5000 write (Kontostand) Rollback Transaction 1 Begin Transaktion 2 read (Kontostand) Kontostand = Kontostand – 20 write (Kontostand) Commit Transaciton 2 Begin Transaktion 2 read (Kontostand) Kontostand = Kontostand – 20 write (Kontostand) Commit Transaciton 2
Marcel Gnoth – 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 – Nonrepeatable Reads Begin Transaktion 1 read (Kontostand) Begin Transaktion 1 read (Kontostand) Begin Transaktion 2 read (Kontostand) Kontostand = Kontostand – 20 write (Kontostand) Commit Transaktion 2 Begin Transaktion 2 read (Kontostand) Kontostand = Kontostand – 20 write (Kontostand) Commit Transaktion 2
Marcel Gnoth – 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 – Phantoms Begin Transaktion 1 Select * From Konto Where Kontostand > 100 Select * From Konto Where Kontostand > Begin Transaktion 1 Select * From Konto Where Kontostand > 100 Select * From Konto Where Kontostand > Begin Transaktion 2 read (Kontostand) Kontostand = 80 write (Kontostand) Commit Transaktion 2 Begin Transaktion 2 read (Kontostand) Kontostand = 80 write (Kontostand) Commit Transaktion 2
Marcel Gnoth – Sperren Isolation-Eigenschaft einer Transaktion Viele Anwender arbeiten gleichzeitig auf einer Datenbank -> Problem der Parallelität SET TRANSACTION ISOLATION LEVEL Kompromiß zwischen Isolierung und Performanz hohe Isolation -> Anwender blockieren sich gegenseitig, System wird langsam geringe Isolation -> Anwender können inkonsistente Daten erhalten
Marcel Gnoth – Isolationsstufen IsolationsstufeDirty ReadNicht wiederholbarer Lesevorgang Phantom Read Uncommitted Ja Read CommittedNeinJa Repeatable ReadNein Ja SerializableNein
Marcel Gnoth – Verteilte Transaktionen mit SQL-Server
Marcel Gnoth – Transaktionen zwischen mehreren Servern SQL-Server ist ein Ressourcenmanager verwaltet 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 – Transaktionen mit TSQL Linked Server BEGIN DISTRIBUTED TRANSACTION BEGIN TRANSACTION OLE DB-Datenquelle ITransactionJoin-Schnittstelle TX wird von lokal zur verteilten TX heraufgestuft EXEC EXEC sp_addlinkedsrvlogin 'TXTest', 'false', NULL, 'sa', ''
Marcel Gnoth – XACT_ABORT automatisches Rollback bei Laufzeitfehler SET XACT_ABORT ON tritt in einer TX ein Laufzeitfehler auf, wird Rollback für die gesamte TX durchgeführt SET XACT_ABORT OFF nur 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 – Code Set XACT_ABORT On BEGIN DISTRIBUTED TRANSACTION INSERT INTO [pubs].[dbo].[authors] ([au_id], [au_lname], [au_fname], [phone]) VALUES (' ', 'Duck', 'Donald', '123456') INSERT INTO [TXTest].[pubs].[dbo].[authors] ([au_id], [au_lname], [au_fname], [phone]) VALUES (' ', 'Duck', 'Donald', '123456') COMMIT Set XACT_ABORT On BEGIN DISTRIBUTED TRANSACTION INSERT INTO [pubs].[dbo].[authors] ([au_id], [au_lname], [au_fname], [phone]) VALUES (' ', 'Duck', 'Donald', '123456') INSERT INTO [TXTest].[pubs].[dbo].[authors] ([au_id], [au_lname], [au_fname], [phone]) VALUES (' ', 'Duck', 'Donald', '123456') COMMIT
Marcel Gnoth – DEMO Verteilte Transaktion mit iSQLw und TSQL
Marcel Gnoth – Transaktionen mit ADO.Net
Marcel Gnoth – Transaktionen mit ADO.Net SQLConnection, OLEDBConnection BeginTransaction SQLTransaction, OLEDBTransaction Commit, 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 – 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 Accounts Account A Account B SQL TDS
Marcel Gnoth – OLEDB und ODBC – APIs direkte Programmierung ohne ADO ermöglichen ebenfalls Steuerung von verteilten Transaktionen aufwendige Programmierung nur in Sonderfällen sinnvoll DBDBDBDB OLE DB ADO Clien t
Marcel Gnoth – COM+ Überblick Theorie (nur ein wenig )
Marcel Gnoth – Überblick COM+ Transaktionen Ressourcen Management Just in Time Aktivierung (JIT), Objekt-pooling Synchronisation bei parallelem Zugriff auf Komponenten (Threads) Deklarative Sicherheit Loosely coupled events, Queued Components Compensating Resource Managers (CRM) ermöglicht nicht transaktionalen Ressourcen an Transaktionen teilzuhaben (Filesystem,...)
Marcel Gnoth – COM+ Welt und.Net die üblichen Verdächtigen..... COM and Win32 COM+ Services.NET Enterprise Services.NET Enterprise Services Common Language Runtime
Marcel Gnoth – 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 Dienst Client Process Dllhost.exe Process Server Application Library Application Class A Class B
Marcel Gnoth – Transaktionen in COM+.Net Enterprise Services
Marcel Gnoth – Attribute einer COM+ Komponente Transaction Disabled 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 – 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 – 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 Root Client Sub1 Transaction Stream Root = Required oder Requires New Sub1 und Sub2 = Required oder Supported
Marcel Gnoth – Das Ergebnis einer Transaktion Ergebnis der Transaktion und Lebensdauer der Komponente Pro Objektkontext: Consistent- und Done Flag Pro Transaktion: Abort Flag Root Transaction Stream Root Client Sub1 Sub2 Done Consistent Done Consistent Done Consistent Abort
Marcel Gnoth – Done und Consistent - Flags Done False 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 – 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 – 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 – Ergebnisse Consistent – Flag entscheidet über Commit einer Transaktion Done – Flag entscheidet, ob Objekt deaktiviert werden kann Objekt kommt in Pool, Object – State geht verloren Ressourcen werden freigegeben Client behält eine Objektreferenz bei erneuten Aufrufen erhält Client ein Objekt aus Pool oder ein neues
Marcel Gnoth – Steuerung einer COM+ Transaktion
Marcel Gnoth – 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 – 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 something ContextUtil.SetComplete(); } Catch (Exception e) {ContextUtil.SetAbort();}} public void DoWork() { try { //Tu Du something ContextUtil.SetComplete(); } Catch (Exception e) {ContextUtil.SetAbort();}}
Marcel Gnoth – Steuerung durch Methoden Methoden steuern das Ergebnis der Transaktion MethodeDone-FlagConsistent-Flag EnableCommitfalsetrue DisableCommitfalse SetCompletetrue SetAborttruefalse
Marcel Gnoth – Steuerung durch Eigenschaften Individuelles lesen und setzen der Flags DeactivateOnReturn = true Done – Flag = 1 MyTransactionVote = true Happy – 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 – 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 – 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 – Eine transaktionale System.EnterpriseServices Komponente Schluß mit der Theorie, ab in die Praxis
Marcel Gnoth – Eine transaktionale Klasse Projekt vom Typ ClassLibrary (Dll) System.EnterpriseServices Namespace referenzieren Klasse muß erben von ServicedComponent Transaktionsattribut TransactionOption.RequiresNew using System.EnterpriseServices; [Transaction(TransactionOption.RequiresNew)] public class cEnterprise : ServicedComponent { } using System.EnterpriseServices; [Transaction(TransactionOption.RequiresNew)] public class cEnterprise : ServicedComponent { }
Marcel Gnoth – 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 – Kompilieren und Installieren
Marcel Gnoth – Attribute in AssemblyInfo.cs ApplicationName Name im COM+ Katalog ApplicationActivation Library oder Server Werden im COM+ Katalog gespeichert [assembly:ApplicationName(MyApplication)] [assembly:ApplicationActivation(ActivationOption.Server)] [assembly:ApplicationName(MyApplication)] [assembly:ApplicationActivation(ActivationOption.Server)]
Marcel Gnoth – Strong Name COM + Integration erfordert Strong Name Schlüsseldatei mit sn.exe erzeugen AssemblyKeyFile Attribut auf die Schlüsseldatei setzen Anwendung Kompilieren [assembly: AssemblyKeyFile("..\\..\\TXComponentDTC.snk")]
Marcel Gnoth – Installation In COM+ Katalog eintragen regsvcs.exe TXComponentDTC.dll Assembly 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 – COM+ Verwaltung SnapIn für MMC: comexp.msc Konfiguration der COM+ Anwendungen und DTC
Marcel Gnoth – Beobachten des Transaktionsverhalten Verwaltung -> Komponentendienste -> DTC
Marcel Gnoth – DEMO Eine COM+ Komponente
Marcel Gnoth – Distributed Transaction Coordinator (DTC)
Marcel Gnoth – 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 Transaction DTC Connection Database #1 Database #2
Marcel Gnoth – DTC Koordiniert Connections zu Datenquellen Connections werden automatisch zur Tx zugefügt Achtung! Pooled Objects, Conn existiert bereits ursprünglich Teil von MS SQL Server 6.5 wird mit Windows XP installiert COM+ Transaktionen kapseln DTC Funktionalität verteilter Dienst, muß auf jedem Computer laufen, der an Tx beteiligt ist
Marcel Gnoth – Verteilte Tx mit DTC Distributed Transaction Client Account AAccount B Coordinating DTC TXID=1234 Server AServer B Participating DTC TXID=1234 Component A TXID=1234 Component B TXID=1234 DCOM TM Protocol Koordinierender DTC startet Tx Partizipierende DTC treten Tx bei Steuert Zwei Phasen Commit Protokoll Ressource Manager Ressource Manager
Marcel Gnoth – Komponente mit verteilten Transaktionen
Marcel Gnoth – 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 – Message Queueing Transport von Nachrichten zwischen Computern
Marcel Gnoth – Message Queueing – Konzepte Asynchrone Abarbeitung von Aufgaben Empfänger oder Sender kann Offline sein Nachrichten werden zwischengepuffert vergleichbar mit für Computerprogramme Aktiver Austausch von Informationen zwischen Programmen / Computern Pushen von Informationen BasicPro 5/2001
Marcel Gnoth – Compensating Resource Manager CRM = Ressource Manager Light Datei – 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 – 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 – DTC und andere Welten OLE – Transaktionsmodell um mit Ressourcenmanagern zu kommunizieren kann 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 – 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 – DTC und Oracle – Oracle Oracle9i Data Provider für.Net using 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
Marcel Gnoth – DTC und Oracle – Oracle ODP.NET - Sample Corner Handling Distributed Transactions using Microsoft Transaction Server through Oracle Data Provider for.NET (ODP.NET)
Marcel Gnoth – Oracle Services for Microsoft Transaction Server Überblick Proxy zwischen Oracle – DB und DTC Oracle – Server muß nicht unter Windows laufen Oracle 8, 8i, 9i Server
Marcel Gnoth – DTC und Oracle – Microsoft Using Oracle with Microsoft Transaction Server and COM+, ausführliche Anleitung Oracle Services for MTS werden nicht benötigt Best Practices for Using Oracle and COM+ Using Oracle Databases with Microsoft Transaction Server (Q193893)
Marcel Gnoth – 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 – IBM DB2 IBM DB2 Driver Available for Use with MTS Knowledge Base Article Configuring Data Sources for the Microsoft OLE DB Provider for DB2 Knowledge Base Article Configuring Microsoft ODBC Driver for DB2 Knowledge Base Article
Marcel Gnoth – 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 – Links Transaktionen SQL Server Onlinedokumentation Transaction Processing Monitors und DTC MSDN, 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?
Marcel Gnoth – Links EnterpriseServices COM+ Integration: How.NET Enterprise Services Can Help You Build Distributed Applications Microsoft Official Curriculum, Course 2557A: Building COM+ Applications Using Microsoft®.NET Enterprise Services Performance Comparison: Transaction Control
Marcel Gnoth – Links COM+ Windows XP: Make your Components more robust with COM+ 1.5 Innovationes Verteilte Anwendungen mit COM+ und Microsoft Visual Basic programmieren, Ted Pattison, MSPress MSMQ Reliable Messaging with MSMQ and.NET
Marcel Gnoth – Fragen? Uff...