Marcel Gnoth – www.gnoth.net Einer für alle – alle für einen! E3 Verteilte Transaktionen mit.NET-Komponenten.

Slides:



Advertisements
Ähnliche Präsentationen
M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
Advertisements

Transaction Synchronization for XML Data in Client Server Web Applications Stefan Böttcher & Adelhard Türling Universität Paderborn.
PL/SQL - Kurze Einführung -.
Microsoft Referenzarchitekturen- Infrastruktur für Connected Systems
1 Sascha Michael Competence Manager Integration Umsetzung einer SOA-basierten Retail Plattform.
Entwicklung und Einsatz von Smart Client-Anwendungen Jens Häupel Developer Evangelist Microsoft Deutschland GmbH Dirk Primbs.
Neue Mobilität Frank Prengel Developer Evangelist Developer Platform & Strategy Group Microsoft Deutschland GmbH
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Windows Server 2003 Managment Eric Hellmich
Dr. M. Schlottke Common Description of Web Services Source: P. Gerbert, 2002 Web Services allow to establish B2B e-commerce on the fly Web Services allow.
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding.
Dipl. Inf. (FH) Paul Mizel Compilerbau.NET Compiler / Codegeneratoren / Skriptsprachen.
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Dynamische Webseiten Java servlets.
Open Database Connectivity (ODBC). © Prof. T. Kudraß, HTWK Leipzig Open Database Connectivity (ODBC) Idee: – API für eine DBMS, das ein Call-Level-Interface.
Oracle interMedia Audio Vortrag für das Seminar Oracle Zusatzoptionen Chris Haußmann.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
15.1 Synchronisation nebenläufiger Prozesse
Verteilte Transaktionen mit EJBs und JDBC 2.0
WebCast: Managed Smart Tags mit VSTO Jens Häupel.NET Technologieberater Microsoft Deutschland GmbH
USE2ANT Die Umstellung von Use Makefiles zu Ant & Junit Von Isaac, Maleen und Marc.
Microsoft Office Forms Server
VS one Veranstalter: VSone Feb. 08 Folie 1 Copyright by XML-Serialisierung zur Persistierung von Objekten Thomas Schissler
Google App Engine Microsoft Windows Azure
Server.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Test Driven Development - Romano Adler-
Automated Software Testing
SQL Server Service Broker
Best Practices in der Datenbank-programmierung
No. 239 Marcel Gnoth, NTeam GmbH Datenstrukturen Das Framework der Jäger und Sammler.
Vergleich der verschiedenen kommerziellen Datenbanksysteme
SQL Server 2005 CLR-Integration
BAS5SE | Fachhochschule Hagenberg | Daniel Khan | S SPR5 MVC Plugin Development SPR6P.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
The free XML Editor for Windows COOKTOP Semistrukturierte Daten 1 Vortrag Semistrukturierte Daten 1 COOKTOP The free XML-Editor for Windows
ORMapper: NHibernate Henning Eiben
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Developer Day Webseiten auf Windows Azure hosten Britta Labud bbv Software Services AG Roland Krummenacher bbv Software Services AG.
Jan Hentschel Microsoft Expert Student Partner Windows Azure Windows Azure Windows Azure Mobile Services.
Dariusz Parys Developer Evangelist Microsoft Deutschland GmbH.
Frank Fischer + Bernhard Frank Microsoft Deutschland GmbH.
3/28/2017 8:11 PM Visual Studio Tools für Office { Rapid Application Development für Office } Jens Häupel Platform Strategy Manager Microsoft Deutschland.
MongoDB on Linux-VM.
MVVM in Windows 8 und Windows Phone 8
PresenterCompanyContact Windows Azure ASP.NET Web-Anwendungen schnell und zuverlässig bereitstellen.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 ADO.NET s.a:
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Kap 4-1OHO Kap. 4.2 Das Orbix CORBA-System Kurzer überblick zu der CORBA-Implementierung Orbix •Unser Fahrplan: •IDL Verwendungsbeispiel •Zoom-In: CORBA.
Kap OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:
XML IV: Cocoon 2.
Template v5 October 12, Copyright © Infor. All Rights Reserved.
Univ.-Lektor Dipl.-Ing. Dr. Markus Schranz staatlich befugter und beeideter Ingenieurkonsulent für Informatik Web Application Engineering & Content Management.
Was dir Trivialbeispiele in Async and Await nicht sagen! Marcus Kimpenhaus und Martin Möllenbeck.
Ein Projekt des Technischen Jugendfreizeit- und Bildungsvereins (tjfbv) e.V. kommunizieren.de Blended Learning for people with disabilities.
Softwaresponsoren Mediasponsoren. Vorstellung KnowledgeCenter Neue Sprachfeautres in VB 9.0 LINQ to SQL in der Praxis.
Making people work together! Folie 1 NEXPLORE AG Stefan von Niederhäusern Einfache Anwendung der SuisseID durch das Software Development KIT
© All rights reserved. Zend Technologies, Inc. Jenseits von var_dump(): Debugging in ZF Jan Burkl System Engineer.
Design Patterns Ein Muster (pattern) ist eine Idee, die sich in einem praktischen Kontext als nützlich erwiesen hat und dies auch in anderen sein wird.
Web Services in.NET und die.NET My Services 14. November Web Services in.NET und die.NET My Services Mario Ehrlicher Senior Consultant Xuccess
Torque in Turbine Team 3 Alexander Mittermair Michael Wesinger.
MTS Microsoft Transaction Server Martin Basziszta
Thomas Claudius Huber Senior Consultant Trivadis AG WCF RIA Services Datengetriebene Apps.
Transaktionale Systeme Projektteil B Verteilte Transaktionen, Workflow- und Transaktions-Manager.
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
Beispielanwendung von Java Threads
Azure Mobile Services Deep dive into node.js scripting
 Präsentation transkript:

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