Einstieg in COM+ Konzepte und Programmierung Michael Willers mwillers@microsoft.com Microsoft GmbH

Preview:

Citation preview

Einstieg in COM+Konzepte und Programmierung

Michael Willersmwillers@microsoft.com

Microsoft GmbH

Agenda

Was ist COM+? Warum COM+? Wie funktioniert‘s? Wo gibt es weitere Info‘s?

COM+ ist die Weiterentwicklung von COM und integriert Dienste für die Entwicklung verteilter Anwendungen

•attributbasierte Programmierung

•Administrieren statt programmieren

Was ist COM+?

IISIIS

Prozessemit Modulenabbilden!

COM+COM+COM+COM+

Application Server Windows 2000

Die wichtigsten Dienste werden zu einer Infrastruktur integriert

Warum COM+?Geschäftsprozesse abbilden

Web Queuing Sicherheit Transaktionen Komponenten

Warum COM+?Dienste für verteilte Anwendungen

ohne COM+:• Synchronisation für Threads implementieren

• Logik für Zugriffsrechte implementieren

• Eventservice implementieren

• Ressourcenverwaltung implementieren

• Problemlösung implementieren mit COM+:

• Synchronisation für Threads vorhanden

• Logik für Zugriffsrechte vorhanden

• Eventservice vorhanden

• Ressourcenverwaltung vorhanden

• Problemlösung implementieren

Warum COM+?COM+ ist kein „Entweder oder“

Wer sich mit Threading und Security unter COM auskennt, kann auch ohne COM+ entwickeln!

Aber: „Wie erklären Sie Ihrem Chef den zusätzlichen Aufwand?“

Vereinfachte Programmierung

• Vergabe von Rechten basiert auf Rollen

• “single user” components

• „Automatische“ Transaktionen Skalierung

• Wiederverwendung von Threads, Objektinstanzen und Datenbankverbindungen

Administration und Installation

• Konfiguration erfolgt grafisch

• Komponenten werden in “Paketen” gruppiert

Warum COM?Die wichtigsten Merkmale

Unter COM+ kann ein COM-Objekt über Attribute mitteilen, welche Systemdienste es bei seiner Ausführung benutzen möchte• Administrieren statt programmieren

Beim Aufruf des Objekts wird eine auf dessen Attributen basierende Laufzeitumgebung erstellt, die dem Objekt die angeforderten Systemdienste bereitstellt

Diese Laufzeitumgebung heißt Kontext• Jedes COM-Objekt besitzt einen Kontext

Wie funktioniert‘s?Was ist ein Kontext?

Client

Win9xWinNT 4.xWin2000

COM+ Umgebung unter Win2000

Kontext A

Interceptor

ObjectContext

Wie funktioniert‘s?Jedes Objekt besitzt einen Kontext

Objekt 1

Kontext B

Client

Wie funktioniert‘s?Rollenbasierte Sicherheit

Wie funktioniert‘s?Beispiel für rollenbasierte Sicherheit

Administration vereinfachen

• Erstellen Sie Benutzergruppen, die den Rollen entsprechen

Achtung: Standardmäßig ist die Prüfung der Zugriffsrechte für eine COM+ Anwendung ausgeschaltet

Zugriffsrechte können hinunter bis zu einzelnen Methoden festgelegt werden

Innerhalb einer COM+ Anwendung erfolgen keine Sicherheitsüberprüfungen – nur bei Aufrufen von „aussen“ in die Anwendung hinein!

Wie funktioniert‘s?Rollenbasierte Sicherheit, Hinweise

Eine Activity sorgt für die Synchronisation gleichzeitiger Zugriffe

Activites werden über das Attribut Concurrency festgelegt

Activities sind Transaktionsgrenzen

Wie funktioniert‘s?Was ist eine Activity?

Wie funktioniert‘s?Das Attribut Concurrency

BIHand

Activity X

DIFootIFoot

Activity Y

AIUser

CIFace

Supportedoder Required

Requires NewNot Supported

EIMouth

Supported

Interceptor

Object Context

Your Object

m_pActivity

Activity X

Client ruft Methode auf1

1

Interceptor fordert Lock an2

2

Lock erhalten, Aufruf durchführen

3

3

Aufruf beendet, Interceptor gibt Lock frei

4

4

Kontrolle zurück an Client5

5

Wie funktioniert‘s?Activities und Synchronisation

Transaktionen werden unter COM+ deklarativ erstellt• Transaktionen erfolgen komponentenbasiert

• Transaktionen werden über das Attribut Transaction festgelegt

• Deadlocks werden per TimeOut verhindert

• Gleichzeitige Zugriffe innerhalb einer Transaktion werden durch Activities vermieden• Activities sind Transaktionsgrenzen!

Wie funktioniert‘s?Transaktionen unter COM+

Wie funktioniert‘s?Das Attribut Transaction

Prozess NProzess M

Activity YActivity X

Kontext C Kontext DKontext A Kontext B

Transaktion A Transaktion B

Wie funktioniert‘s?Prozess, Kontext, Activity, Transaktion

Die Attribute Concurrency und Transaction sind voneinander abhängig• Wenn Sie Anwendungen per Script installieren,

müssen Sie darauf achten

Wie funktioniert‘s?Activities sind Transaktionsgrenzen!

Transaction Concurrency

Requires New Required/Requires New

Required Required

Supported Required

Activity

Transaktion

Wie funktioniert‘s?Transaktionen mit einem Objekt

Doomed FALSE

Kontext

Happy TRUE

Done FALSE

ClientWurzelobjekt

Es bestimmt den Ausgang einer Transaktion• FALSE: commit

• TRUE: rollback

Es wird zu Beginn einer Transaktion angelegt und hat den Wert FALSE

Es wird überprüft, wenn das Wurzelobjekt deaktiviert wird

Ein direkter Zugriff ist nicht möglich• Setzen erfolgt über das Happy-Flag

Wie funktioniert‘s?Das Doomed-Flag

Wie funktioniert‘s?Das Happy-Flag Es bestimmt den Inhalt des Doomed-Flags Es wird beim Erstellen eines Objekts angelegt

und hat den Wert TRUE IContextState::SetMyTransactionVote setzt und

löscht das Flag• TRUE: SetMyTransactionVote TxCommit

• FALSE: SetMyTransactionVote TxAbort Flag wird beim Zerstören oder Deaktivieren

eines Objekts überprüft• Der allerletzte Aufruf vor dem Zerstören oder

Deaktivieren zählt!

• Der negierte Wert des Flags wird dann in das Doomed-Flag übernommen

Wie funktioniert‘s?Zerstören/Deaktivieren eines Objekts

Ein Objekt wird zerstört, wenn der Aufrufer seine Verbindung zum Objekt löst • Set ... = Nothing

• Scope einer Routine wird verlassen

Ein Objekt wird deaktivert, wenn das Done-Flag gesetzt ist

Wie funktioniert‘s?Das Done-Flag Es bestimmt, ob ein Objekt deaktiviert wird Es wird beim Erstellen eines Objekts angelegt

und hat den Wert FALSE IContextState::SetDeactivateOnReturn setzt

und löscht das Flag• TRUE: SetDeactivateOnReturn TRUE

• FALSE: SetDeactivateOnReturn FALSE

Flag wird erst am Ende eines Methodenaufrufs überprüft• Der letzte Aufruf innerhalb einer Methode zählt

• Das Objekt wird sofort nach dem Ende des Methodenaufrufs deaktiviert

When I‘m happy and done Part 1

Objekt wird vom rufenden Client entsorgt• Im Objekt gespeicherte Daten bleiben erhalten

• Dauer einer Transaktion verlängert sich

Objekt deaktiviert sich selbst mittels SetDeactivateOnReturn• Objekt wird unmittelbar am Ende eines

Methodenaufrufs deaktiviert

• Im Objekt gespeicherte Daten gehen verloren

• Transaktionen sind so kurz wie möglich

When I‘m happy and doneBestandsaufnahme

Zustandsbehaftete Objekte (emissary) :• Saubere Modellierung, da mit „echten Objekten“

gearbeitet wird

• Strukturierung durch ein Objektmodell möglich

• Skalierung im Hinblick auf Transaktionen nicht optimal, da Objekte nicht deaktiviert werden kann

Zustandslose Objekte (executant):• Keine „echten“ Objekte

• Objekte bestehen ausschliesslich aus Methoden, die konkrete Aktionen abbilden (z.B. Aufgeben einer Bestellung)

• Verbesserte Skalierung im Hinblick auf Transaktionen, da Objekte bei Bedarf aktiviert und deaktiviert werden können

When I‘m happy and doneZustand oder kein Zustand?

Activity

Transaktion

Wie funktioniert‘s?Transaktionen mit mehreren Objekten

Doomed FALSE

Kontext

Happy TRUE

Done FALSE

ClientWurzelobjekt

Kontext

Happy TRUE

Done FALSE

2ndObjekt

Kontext

Happy TRUE

Done FALSE

2ndObjekt

Client3 Server3 Server31 Server32DoSomething1

DoSomething1

TxAbortDeactivate

TxCommitDeactivate

DoSomething5

When I‘m happy and done Sequenz 1

Client3 Server3 Server31 Server32

DoSomething2DoSomething1

TxAbortDeactivate

DoSomething2

When I‘m happy and done Sequenz 2

Client3 Server3 Server31 Server32

DoSomething3DoSomething1

TxAbortDeactivate

DoSomething1

When I‘m happy and done Sequenz 3

Client3 Server3 Server31 Server32

DoSomething4DoSomething1

TxAbortDeactivate

DoSomething5

When I‘m happy and done Sequenz 4

When I‘m happy and done Part 2

Eine Transaktion wird grundsätzlich beendet, wenn das Wurzelobjekt deaktiviert wird

Wird ein sekundäres Objekt deaktiviert und dessen Happy-Flag ist FALSE, wird...• ...das Doomed-Flag auf TRUE gesetzt

• ...die Kontrolle an das Wurzelobjekt zurückgegeben

In diesem Fall sollte das Wurzelobjekt sofort deaktiviert und somit die Transaktion beendet werden • Unteilbarkeit einer Transaktion

• Weitere Aufrufe liefern Fehler

Wie funktioniert‘s?Transaktionen – Fazit

Wie funktioniert‘s?Erkennen einer ungültigen Transaktion

FRAGE: Wie kann man feststellen, ob eine Transaktion ungültig ist, wenn man das Doomed-Flag nicht direkt auslesen kann?

ANTWORT: Fehler sollten stets direkt an den Client bzw. das rufende Objekt durchgereicht werden• Visual Basic : Err.Raise benutzen

• Visual C++ : AtlReportError oder Error benutzen

Wie funktioniert‘s? Fallbeispiel Bestellwesen

Abbilden des Geschäftsprozesses „Aufgeben einer Bestellung“ • Sonderfall: Kunde überschreitet Kreditlimit

• Sonderfall: Produkt ist ausverkauft

Verschiedene Clients• Web-Browser

• Windows-Anwendung

Wie funktioniert‘s? Fallbeispiel Bestellwesen – Übersicht

Win32

SQL7 / Access

Web

COM+

CBroker

CQuery

CCustomer

CProduct

COrderbus_Order.dll

db_Order.dll

Req TX

No TX

Support TX

Support TX

Support TX

Fallbeispiel Bestellwesen

Wie funktioniert‘s?Administrieren von COM+ Anwendungen

Anlegen von COM+ Anwendungen sowie Zuordnung von Komponenten und Rollen per UI ist nur bei kleineren Anwendungen praktisch• Wenige COM+ Anwendungen mit wenigen

Komponenten

• Nur ein Rechner auf dem die COM+ Anwendung „läuft“

Die COM+ Dienste sind vollständig über COM-Schnittstellen administrierbar• Aufsetzen einer Anwendung per VB-Script

„Halten“ Sie Ihre Objektmodelle nur auf dem Client• Zustandsbehaftete Objekte

„Serverobjekte“ sollten ausschliesslich Aktionen abbilden, um eine optimale Skalierung zu erreichen• z.B. Bestellung aufgeben

Stoßen Sie Aktionen immer nur aus dem Objektmodell heraus an• ein „Serverobjekt“ implementiert im Idealfall

genau eine Schnittstelle mit genau einer Methode

Wie funktioniert’s? Allgemeine Tipps – Part 1

Wie funktioniert’s? Allgemeine Tipps – Part 2

Die Dauer einer Transaktion sollte so kurz wie möglich sein• Isolationsstufe ISOLATION_SERIALIZABLE

Access-Datenbanken können nur über ODBC eingebunden werden• Die Schnittstelle ITransactionJoin ist bei den

JET-OLEDB-Providern nicht implementiert

Connectstrings für Datenbanken sollten nicht „fest verdrahtet“ sein• z.B. Constuctstrings von COM+ benutzen

Wo gibt es weitere Info’s? msdn online

• http://www.microsoft.com/germany/msdn

TechTalk• www.microsoft.com/germany/msdn/techtalk

Bücher• Programming Distributed Applications...

Ted PattisonISBN 1-57231-961-5

• COM IDL and Interface DesignISBN 1-86100-235-4

Zeitschriften• basicpro 1/99

• Microsoft System Journal 4/98 und 1/2000

Uff...

Fragen!?

Recommended