Upload
ottokar-amacker
View
105
Download
0
Embed Size (px)
Citation preview
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!?