presentation

advertisement
Techtalk April 2001
COM+ Services aus
ATL Komponenten nutzen
Martin Vollmer
martinv@microsoft.com
Technologieberater Microsoft GmbH
Agenda




Basics, Basics, Basics ...
OLE DB Consumer Templates
COM+ Event Services
COM+ Queued Components
2
Windows DNA
Databases
Legacy Systems
Thin
Client
Rich
Client
External
Applications
Application
Services
3
Windows DNA
COM verbindet alles
Tools
User Interface & Navigation
Basic
HTML
Dynamic
HTML
Forms
Native
COM
HTML/Script
Authoring
Component
Creation
Management
Business Process
Web
Server
Transactions
Message
Queuing
Security
Integrated Storage
File
System
Data
Base
Mail
Store
Directory
Scripting
Rapid
Application
Development
Team
Development
Distributed
Operating
Environment
Other
Stores
Networking
Base
Services
4
Die .NET Platform
Visual Studio
Studio.NET
6.0
Orchestration
VS 6.0
Internet
COM+
DNA
Servers
Internet
Windows 2000
2nd Generation
Available
Today
.NET
Framework
COM+
.NET
Enterprise
Servers
Building
Block
Services
Windows
Windows.NET
2000
3rd Generation – the .NET Platform
With .NET
Enhancements
New
Capabilities
5
COM Programming Model
Objects and Interfaces
IUnknown
IClassFactory
Client
Class
Factory
Object
Registration
Packaging
Component
6
COM Vokabular





Interface – abstrakter Datentyp verwendet vom
Client um Objekte anzusprechen
Klasse – konkreter Datentyp, geschrieben von
Entwicklern, um ein oder mehrere Interfaces zu
implementieren
Objekt – Einheit im Speicher, welche ein oder
mehrere Interfaces unterstützt (typischerweise die
Instanz einer Klasse)
Komponente – ladbares Code-Modul, welches eine
oder mehrere COM Klassen implementiert
GUID – 128-bit eindeutiger Bezeichner für ein
Interface oder eine Klasse (oder etwas noch
exotischeres)
7
Interface und Klassen
[ uuid(F7C8C7B2-FEC7-11d2-AE59-006008D1A534), object]
interface ICalculator : IUnknown {
HRESULT Op([in] long n, [out, retval] long *pn);
}
[ uuid(F7C8C7B4-FEC7-11d2-AE59-006008D1A534), object]
interface IClearable : IUnknown {
HRESULT Clear(void);
}
[ uuid(F7C8C7B3-FEC7-11d2-AE59-006008D1A534)]
coclass Adder {
[default] interface ICalculator; interface IClearable
}
Dim calc as ICalculator
Set calc = New Adder
Dim clr as IClearable
Set clr = calc
clr.Clear
n = calc.Op(35)
Set calc = Nothing
Set clr = Nothing
‘
‘
‘
‘
‘
‘
‘
‘
declare interface-based reference
use CoCreateInstance to load component
declare interface-based reference
use QueryInterface to coerce type
invoke IClearable.Clear method
invoke ICalculator.Op method
release reference to object
release reference to object
8
COM+ Programmiermodell
IUnknown
Context
CreateInstance
…
OK: SetComplete
…
Err: SetAbort
Attributes
Client
Server
9
Konfigurierte Komponenten






Problem: Wenn es das Ziel ist, keinen oder so
wenig wie möglich Code zu schreiben, wie
konfiguriert man Interceptors, so dass sie ihre
Arbeit so magisch verrichten ?
Lösung: „Declarative attributes“
Klassen, welche besondere Services benötigen,
müssen dies „declarative“ anzeigen
COM+ führt den Begriff der configured
components
Konfigurierte Komponenten sind Klassen, die
extended attributes haben, welche die
Interception steuern
Konfigurierte Komponenten sind immer DLLs
• COM+ benutzt surrogate für remote/local activation
10
Attribute





Im Catalog sind die Attribute abgelegt,
welche die Laufzeit abfragt um einen
Interceptor aufzubauen
Die Menge der Attribute ist fest (bis jetzt !)
Applications/Packages, Klassen,
Interfaces und Methoden könne Attribute
haben
Attribute könne über den COM+/MTS
Explorer gesetzt werden
Es wird möglich sein alle Attribute aus
der Entwicklungsumgebung zu setzen
irgendwann … (VS .NET )
11
Attribute: Applikationen
Activation
Type
Authentication
Level
Impersonation
Level
Authorization
Checks
Security
Identity
Process
Shutdown
Debugger
Enable Compensating
Resource Managers
Enable 3GB
Support
Queueing
Library (inproc)/Server (surrogate)
None, Connect, Call, Packet, Integrity, Privacy
Identify, Impersonate, Delegate
Application Only/Application + Component
Interactive User/Hardcoded User ID + PW
Never/N minutes after idle
Command Line to Launch Debugger/Process
On/Off
On/Off
Queued/Queued+Listener
Was es bei MTS bereits gibt, ist unterstrichen
12
Attribute: Klassen, Interfaces & Methoden
Transaction
Non Supported, Supported, Required, Requires New
Class
Synchronization Non Supported, Supported, Required, Requires New
Class
Object Pooling
On/Off, Max Instances, Min Instances, Timeout
Class
Declarative
Construction
Arbitrary Class-specific String
Class
JIT Activation
On/Off
Class
On/Off
Class
On/Off
Class
Zero or more role names
Class
Interface
Method
Auto-Deactivate
On/Off
Method
Must Activate in
Activator’s Context
On/Off
Class
Activation-time
Load Balancing
Instrumentation
Events
Declarative
Authorization
Was es bei MTS bereits gibt, ist unterstrichen
13
Data Access (Geschichte..)
Application interface
ADO
DAO
ODBC
Direct
RDO
JET
OLE DB
Kagera
ODBC API
RDBMS
SQL Server
14
Was ist OLE DB?
OLE DB Organisation



OLE DB ist eine
Menge von Com
Objekten
Jedes Objekt
umfasst mehrere
verwandte
Interfaces
Provider müssen
nicht alle
Interfaces eines
Objektes
unterstützen
DataSource
Session
Transaction
Rowset
Command
Rowset
15
ATL Consumer Templates

Ein “thin wrapper” um die
OLE DB Objekte
•
•


CDataSource, CSession, CRowset, etc.
Dies ist kein neues Objekt Modell !!
Aufgebaut im Stil der ATL
•
•
•
Performance
Templates
Erzeugt schlanke Executables
Viel einfacher zu programmieren als
OLE DB direkt zu nutzen
16
ATL Consumer Templates
Struktur einer Applikation

Dies sind die
Objekte, welche man
nutzt um eine
Consumer Template
Applikation zu
schreiben.
CDataSource
CSession
CTable or
CCommand
Accessor
Rowset
17
ADO für Consumer ?





Einfacheres Objektmodell als
OLE DB
Nutzt VARIANTS
Kann auch in C++ einfach über
#import eingebunden und
genutzt werden
ADO (MDAC) wird kontinuierlich
weiterentwickelt.
Visual Basic oder ASP
18
OLE DB für Consumer ?

Volle Kontrolle über den Datenzugriff
•
•
•


Festelegen wie Speicher allokiert wird
Festlegen wie Datentypen behandelt
werden
Festlegen der effektivsten Art um Daten
zum Consumer zurückzuliefern
High performance
Minimal code size
19
Common Pitfalls

CDataSource Funktion Open():
db.Open(_T("SQLOLEDB.1"), &dbinit);
Ersetzen durch (KB Q190969):
db.OpenWithServiceComponents(_T("SQLOL
EDB.1"), &dbinit);

Nur mit OpenWithServiceComponents():
•
•
•
•
Automatisches „Enlisten“ der Transaktion
Resource Pooling
Updating zu SQL Provider
Scrolling, Find und Bookmarks bei
minimalem OLE DB Provider
20
OLE DB Properties ?



Welche Properties sind wie gesetzt von
ADO ?
Welche Properties müssen wie gesetzt
sein um einen best. Cursortyp zu
bekommen ?
Zwei „exklusive“ Tools
•
•
OLEDBPerformance
ADO2OLEDB
21
OLE DB <-> ADO ?




OLE DB im Middle Tier !
Client möchte aber einen Recordset ?
Wie wandelt man einen OLE DB
Rowswet in einen ADO Recorset ?
Welche Properties muss man wie
setzen um einen „disconnected“
Recordset zu erhalten ?
22
Transaktionen, COM+
Applikationen, ADO, OLE DB
und der ganze Rest ...
DEMO
23
Event Services
LCE - Loosely Coupled
Events
24
Klassisches Problem

Bei verteilten Anwendungen
•
•
Anbieten und auch Liefern von
Informationen an einen oder mehrere
Beteiligte ohne im Voraus von deren
Identität zu wissen
Zwei Arten von Programmen sind
dabei involviert
•
•
Das Eine hat die Information
Das Andere braucht die Information
25
Event Services

Ein Objekt benachrichtigen, wenn
etwas „Interessantes“ passiert ist
•
•
Objekte, die bereits laufen (transient)
Objekte, die instanziiert werden, wenn das
Ereigniss eintritt (persistent)
Subscriber
Publisher
Event Service
Subscriber
Subscriber
Administration
Event
Database
26
Event Services –Implementierung

EventClass
•
•


TypeLib für die Registrierung der Events, die
gefeuert (fired) werden
Registrierung im COM+ Katalog
•
•
MMC SnapIn COM+ Component Service
COM+ Admin API
EventPublisher
•
•
instanziiert EventClass
Aufruf der entsprechenden Methoden (Fire)
EventSubscriber
•
•
Registriert im COM+ Katalog
Abonniert (Subscription) die Ereignisse der
Eventklasse
•
•
Persistent oder
Transient (nur per API)
27
Event Class


Indirektion zwischen dem Publisher
und dem Subscriber
Über die Meta-Daten definiert
(CLSID, ProgID, Typelib etc.)
•
Minimaler Codingaufwand von der
Developer Seite aus
•
•
DLL welche DllRegisterServer exportiert
reicht schon
Tybelib welche die “firing” Interfaces
beschreibt
28
Event Class

Wird vom COM+ EventSystem erzeugt
•
•

V-Table Layout wird während der Laufzeit
aufgesetzt
Weiss welche Subscriptions für welche
Methode vorhanden sind
Kann beliebige Anzahl von “firing”
Interfaces zur Verfügung stellen
29
Firing Interface



Jede Methode kann 0 - N Subscriptions haben
Subscriber stellt dieses Interface ebenfalls zur
Verfügung
Nur [in] Parameter als Methoden Argumente
IStockEvents
StockEvents.1
{ 877E7998-E8EC-11D1-B994-00C04F990088 }
interface IStockEvents
{
HRESULT StockPriceChange ( BSTR StockSymbol, double Price );
HRESULT NewStock ( BSTR StockSymbol, BSTR CompanyName );
HRESULT StockSymbolChanged (BSTR OldSymbol,
BSTR NewSymbol );
HRESULT DowJonesUpdate ( double Current );
};
Subscriben
auf individuelle
Methoden eines
“firing” Interface
30
Subscription

Eine Subscription besteht aus folgenden
Komponenten:
•
•
•

Einem EventClass Interface
Einer spezifischen Methode innerhalb des EventClass
Interfaces
Einem Subscriber
Der Subscriber kann eine CLSID, ein Moniker oder ein
Interface Pointer sein
Publisher
Subscriber
Event
class
Publisher EventClass
StockPub
StockEvents
IID
EventMethod
Subscriber
PublisherProperties
IStockInt
StockPriceChange
StockSubscriber
StockSymbol = “MSFT”
31
Event Filtering


Die meisten Subscriber wollen nur eine
Notification bekommen, wenn sich z.B. ein
spezieller Aktienpreis ändert
Dazu ist Filtering notwendig
Publisher
Event class
Subscribers
“MSFT”
“RHAT”
“INTC”
interface IStockEvents
{
HRESULT StockPriceChange ( BSTR StockSymbol, double Price );
};
32
Event Filtering - Arten

Publisher Filtering
•
•
•
Filtering ist Aufgabe einer jeweiligen
Filterkomponente
Declarative (über den COM+ Explorer)
•
•
•
Gesetzt als Attribut der EventClass
AttributeName == “MultiFilterPublisherCLSID”
Filter wird vom COM+ EventSystem erzeugt wenn die
EventClass vom Publisher instanziiert wird
Laufzeit
•
•
Wird vom Publisher aufgesetzt
Verbunden mit der EventClass nachdem diese vom
Publisher instanziiert wurde
33
Event Filtering Publisher
Subscribers
IStockEvents
interface IStockEventsa
{
HRESULT StockPriceChange ( BSTR StockSymbol, double Price );
};
Publisher
Publisher makes a method call
IStockEvents
EventClass
COM+ Event System
Service
EventClass Method Subscriber StockSymbol = “MSFT”
IStockEvents
Publisher Filter
COM+ EventSystem Store
(EventClasses / Subscriptions)
IMultiInterfacePublisherFilter
34
• EventClass in ATL
• Subscriber in VB und/oder ATL
(mal sehen ..)
• Publisher in VB
(geht einfach schneller)
DEMO
35
Queued Components
QC
36
Queued Components




Für asynchrone und synchrone
Kommunikation zwischen Objekten
Kommunikation über Message Queues
Viele Aufgaben müssen nicht synchron
in einer Transaktion ausgeführt werden
COM+ Infrastruktur
•
•
Automatisches Einbinden der QueueVerarbeitung in den Transaktionskontext
MSMQ stellt sicher, dass keine
Nachrichten verloren gehen
37
Synchrone Verarbeitung via DCOM
Client
Order
Shipping
Order
Shipping
Transaktion
38
Asynchrone Verarbeitung
Client
Transaction 1
Transaction 3
MSMQ
Order
Shipping
Order
Ship
39
QC - Architektur
Order Entry
Shipping
S = GetObject
S.num = 1234
S.custid = 789
S.Line 10, widget
RPC Recorder
Queue Listener
MSMQ
RPC Player
num property
custid property
Line method
40
Queued Components Design



Keine synchronen Rückgabewerte
Methoden können nur [ in ] Parameter
verarbeiten
Parameter müssen als Wert (ByVal)
und nicht als Referenz/Pointer (ByRef)
übergeben werden
41
QC – Rückgabewerte


Via Message Queues
Die Server Komponente schickt
entsprechende Nachrichten über den
Status der Verarbeitung
•
Ausnutzung der COM+ Infrastruktur
42
Asynchrone Verarbeitung
Response Objekt
Transaction 1
Client
Order
Transaction 2
Shipping
Order
Transaction 3
Notify
Shipping
43
QC - Fehlerbehandlung

Messages, die wiederholt Fehler
verursachen werden in eine entsprechende
Queue gestellt
•
•
•
•
•
•
Problemanalyse – Fehlerbeseitigung –
Zurückstellen in Queue
Diagnose Informationen verarbeiten – Löschen
Compensating Transaction ausführen
Manuelle Behandlung mittels Tools
IPlaybackControl Interface
•
•
FinalClientRetry
FinalServerRetry
Was geschieht bei einer fehlerhaften Buchung
eines Schecks ?
44
Remoteable Events
Publisher Prozeß
Subscriber Prozeß
IStockEvents
Subscriber
Stock events
Subscriber
IStockEvents
Maschine 1
Subscriber Prozeß
Maschine 2
Subscriber
IStockEvents
45
Bug in Windows 2000


Registry – Eintrag unter:
HKLM\SOFTWARE\Microsoft\EventSystem\
{26c409cc-ae86-11d1-b61600805fc79216}\Subscriptions ist falsch für
remote queued Subscriptions !!
Key Subscribername ist:
queue:computername=martinv:/new:{AC79
A87C-44B8-42AE-B7F5-C1D749538AE6}
sollte aber:
queue:computername=martinv/new:{AC79
A87C-44B8-42AE-B7F5-C1D749538AE6}
46
• Events asynchron über MSMQ (QC)
DEMO
47
Fragen?
Uff...
48
Mehr Informationen


msdn online
•
•
•
www.microsoft.com/germany/msdn
www.microsoft.com/dna
www.msdnmagazine.com
externe Links
•
•
www.worldofatl.com
www.codeguru.com/atl/index.shtml
49
Glossar











API – Application Programming Interface: Definierte Programmierschnittstelle
für den Zugriff auf Systemfunktionen
ATL – Active Template Library: Bibliothek zur Erstellung vom COM(+)
Komponenten mit Visual C++
IIS – Internet Information Server: Der Webserver von Microsoft
ASP: Active Server Pages – Server-seitiges Scripting in IIS
Context: Gruppe von Objekten in einem Prozess, welche aufgrund kompatibler
Attribute (Anforderungen an die Laufzeitumgebung) zusammengefasst werden
können
DNA: Distributed InterNet Applicaltion
Interception: Mechanismus um Aufrufe über Context-Grenzen hinweg, über
„lightweight-proxies“ so aufzurufen, dass in der Methode des gerufenen Objekts
der richtige Context zur Verfügung steht.
IIS: Internet Information Server
JITA: (Just in time activation) Mechanismus der es COM+ erlaubt eine
Komponente zu deaktivieren, obwohl ein Client noch eine Referenz auf diese
Komponente hat. Erst beim nächsten Methodenaufruf wird die Komponente
erneut (just-in time) aktiviert.
MTS: Microsoft Transaction Server
MSMQ: Microsoft Message Queue Server
50
Herunterladen