Marcel Gnoth – Einer für alle – alle für einen! E3 Verteilte Transaktionen...

Post on 05-Apr-2015

107 views 2 download

Transcript of Marcel Gnoth – Einer für alle – alle für einen! E3 Verteilte Transaktionen...

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...