Entwicklung für Windows DNA – Überblick über die Werkzeuge Yair Alan Griver Übersetzt von Mathias Gronau Dabei befassen wir uns mit den folgenden Werkzeugen: Einführung Dieser Artikel behandelt die unterschiedlichen Werkzeuge und Technologien, die beim Entwickeln einer verteilten Anwendung für Microsofts Windows Distributed interNet Application (DNA) zum Einsatz kommen. Grundsätzlich mischt Windows DNA eine Anzahl unterschiedlicher Werkzeuge und Dienste des Betriebssystems, um eine effiziente, skalierbare und modifizierbare Lösung für die bei der Entwicklung einer verteilten Anwendung auftretenden Probleme zu bieten. Bevor wir uns mit den unterschiedlichen Technologien befassen, wollen wir zunächst einige Worte zur DNA verlieren. DNA ist Microsofts Weg für die Erstellung einer serverbasierten Infrastruktur für die Entwicklung und Verteilung verteilter Anwendungen. Microsoft geht davon aus, dass die Unternehmen die Serverprodukte von Microsoft einsetzen, um die nächste Anwendungsgeneration zu erreichen. Diese Anwendungen basieren auf Komponenten, die mit unterschiedlichen Diensten zusammenarbeiten, um eine flexible stabile und skalierbare Architektur für unterschiedliche Benutzeroberflächen zu bilden. Mit dieser Lösung ist es den Unternehmen möglich, statt immer größere Server einzusetzen (die UnixLösung) auf immer mehr preiswerte Server zu skalieren, die miteinander arbeiten. Betrachten Sie dieses Vorgehen als die Serverversion von RAID. Wir werden die folgenden Technologien behandeln: SQL Server Transaction Server (MTS) Message Queue Server (MSMQ) Internet Information Server Abschließend werden wir uns damit beschäftigen, wo sich die unterschiedlichen Werkzeuge und Technologien befinden und welche Hard- und Software erforderlich sind, um diese Dienste einzusetzen. Eine kurze Bemerkung zu XML Obwohl XML kein von Microsoft bereitgestellter Dienst ist spielt es in Windows DNA-Anwendungen doch eine Schlüsselrolle. XML ist die StandardVerständigungsmethode innerhalb von DNA. Wenn Informationen zwischen den Schichten einer mehrschichtigen Anwendung übergeben werden geschieht dies als XML. Zusätzlich gewinnt ein anderer Standard, SOAP (Simple Object Access Protocol), für eine XML-basierte Lösung an Bedeutung, wenn via http auf Methoden zugegriffen werden soll. Weitere Informationen zu SOAP finden Sie unter http://msdn.microsoft.com/xml/general/s oap_faq.asp. Universal Data Access COM und DCOM 12-02 Entwicklung für Windows DNA FoxX-Professional Seite 1 Universal Data Access Im Grunde ist Universal Data Access (UDA) genau das was der Name aussagt: Die Möglichkeit, auf jegliche Daten jeglicher Art von jeglichem Ort aus zuzugreifen. UDA besteht hauptsächlich aus zwei Komponenten: OLE/DB, dessen Mechanismus eine Oberfläche für die Daten bereitstellt und ActiveX Data Objects (ADO), einem standardisierten programmierbaren Frontend auf OLE/DB. Zusätzlich ermöglicht Remote Data Services dem Entwickler, ADO-Daten via HTTP vom Server auf den Client zu übertragen. len und überall verfügbaren Zugriff auf relationale Datenquellen ermöglichte, bietet OLE/DB einen sehr schnellen und überall verfügbaren Zugriff auf jede Datenquelle, ob relational oder nicht. OLE/DB wird mit einem Standardprovider für ODBC ausgeliefert, durch den es einen unmittelbaren Zugriff auf alle ODBC-Quellen hat, für die Sie über einen Treiber verfügen. ADO ADO ist eine standardisierte COM-basierte Programmierschnittstelle für OLE/DB. Es ermöglicht den Zugriff auf jede OLE/DBDatenquelle aus jeder COM-basierten Programmiersprache heraus. ADO ist ein Nachfolger für die ganzen Zugriffsmechanismen, die Microsoft im Laufe der Jahre ausgeliefert hat (RDO, Jet). Es ist für den schnellen Zugriff auf jeglichen Datentyp entworfen und ist nicht für ein bestimmtes Backend optimiert. Aus diesem Blickwinkel heraus entspricht ADO Visual FoxPros Modell der Ansichten und Cursor, bei dem die Entwicklung der Darstellung der Daten den ersten Platz einräumt, während VFP den Zugriff für Sie optimiert. Microsoft hat hier aus den anderen COMbasierten Zugriffsmechanismen gelernt und hat ADO mit einer flachen Hierarchie entwickelt. Es ist nicht mehr notwendig, auf ein bestimmtes Objekt über eine Liste anderer Objekte zuzugreifen. Das Objektmodell von ADO enthält 7 Objekte: Abbildung 1: ADO und OLE/DB OLE/DB OLE/DB ist Microsofts Nachfolger von ODBC. Während ODBC einen sehr schnel- Objekt Beschreibung Command Dieses Objekt ermöglicht dem Entwickler einen Befehl an die Datenquelle zu senden. Bei diesem Befehl handelt es sich in der Regel um eine SQL-Anweisung oder den Aufruf einer gespeicherten Prozedur. Es kann sich aber um jeden Befehl handeln, den die Datenquelle verarbeiten kann. Connection Dieses Objekt bildet die Oberfläche der Datenquelle. Auf die Fehler-Collection wird über die Verbindung zugegriffen. 12-02 Entwicklung für Windows DNA FoxX-Professional Seite 2 Error Das Objekt Error enthält die Informationen über alle Fehler, die während der Arbeit mit dieser Datenquelle aufgetreten sind. Field Dieses Feldobjekt unterstützt die Anzeige eines Feldes der Datenquelle. Parameter Das Objekt Parameter unterstützt die Übergabe von Parametern, die innerhalb einer SQL-Anweisung oder in einer gespeicherten Prozedur benötigt werden. Property Dieses Objekt ermöglicht es einer Datenquelle, jede eindeutige Information anzuzeigen, die nicht in einem Feld standardisiert angezeigt werden kann. Recordset Das Objekt Recordset zeigt einen tabellenartigen Blick auf die von einer Datenquelle empfangenen Daten. Remote Data Services (RDS) Die Remote Data Services stellen einen Mechanismus zur Verfügung, um einen Recordset der ADO auf eine getrennte nur teilweise verbundene Maschine zu verschieben (z.B. HTTP über das Internet). Dieser Dienst wird in der Regel für einen limitierten Datenverkehr innerhalb eines Netzwerks verwendet. RDS wird zusammen mit dem Internet Information Server und dem Internet Explorer 4 und höher installiert und ermöglicht dem Entwickler die Kontrolle, wo sich die Daten während einer Änderung befinden. COM und DCOM Microsofts Component Object Model (COM) ist ein Programmierstandard für die Entwicklung verteilter Anwendungen auf einem einzelnen Windowsrechner. DCOM fügt dem noch eine vom Protokoll unabhängige transparente Netzwerkkommunikation hinzu. Bei Verwendung von DCOM ruft der Entwickler einfach ein COM-Objekt auf und greift so auf das Objekt unabhängig von dessen Platzierung im Netzwerk zu. Arten der COM-Objekte COM-Komponenten können in zwei Arten vorliegen: als DLLs und als EXEs. 12-02 Entwicklung für Windows DNA COM-DLLs Eine COM-DLL wird innerhalb eines Prozesses ausgeführt. Durch die Ausführung der DLL innerhalb der aufrufenden EXE bieten die DLLs einen schnellen Zugriff auf ihre Funktionalitäten. Dies hat aber einen Nachteil: stürzt die DLL ab zieht sie auch den aufrufenden Prozess mit sich. Eine COM-DLL muss sich auf dem gleichen Rechner wie der aufrufende Prozess befinden. COM-EXEs COM-EXEs werden außerhalb des aufrufenden Prozesses ausgeführt. Stürzt eine COM-EXE ab kann der aufrufende Prozess weiterarbeiten (wenn er diesen Fehler abfangen kann). Auf jeden Fall ist der Aufruf einer COM-EXE aber langsamer als der einer COM-DLL, da es sich hier um einen Local Remote Procedure Call (wenn sich die EXE auf der gleichen Maschine befindet wie der aufrufende Prozess) oder um einen Remote Procedure Call (wenn sich die EXE auf einer anderen Maschine im Netzwerk befindet als der aufrufende Prozess) handelt. COMEXEs können sich auf jeder beliebigen Maschine im Netzwerk befinden. COM-Registrierung COM-Komponenten werden durch den Aufruf von CREATEOBJECT() beim Durchsuchen der Registrierungs-Datenbank gefunden. In der Regel findet der Rechner FoxX-Professional Seite 3 die Komponente durch deren ProgID (einen für den Anwender verständlichen Namen wie z.B. Excel.Application), die in die ClassID (eine für die Maschine verständliche hexadezimale Identifikationsnummer, bei der es sich um eine global einmalige Identifikation handelt) übersetzt wird. In der Registry sind der Speicherort und der Name der EXE oder DLL gespeichert. DCOM DCOMCFG ist ein Programm, das mit Windows zusammen ausgeliefert wird. Wird es ausgeführt, kann der Entwickler eine bestimmte COM-EXE zusammen mit dem Namen der Maschine, den Sicherheitsinformationen und dem Speicherort der EXE angeben, damit diese EXE auf einer entfernten Maschine ausgeführt werden kann. Diese Angaben werden dann in der RegistrierungsDatenbank des Clientrechners gespeichert. Wird anschließend mit einem CREATEOBJECT() ein COM-Objekt auf einem entfernten Rechner aufgerufen, wird dieser Aufruf in einen Remote Procedure Call (RPC) übersetzt, der an den Server gesendet wird. Auf dem Server wird dieser RPC in einen COM-Aufruf übersetzt, der dem Objekt gesendet wird. Anschließend wird jeder Rückgabewert in einen RPC zurückübersetzt, an den Client gesendet, zu COM übersetzt und der aufrufenden Anwendung geliefert. Bessere Skalierbarkeit Um eine bessere Skalierbarkeit zu gewährleisten hat Microsoft die folgenden Schlüsselfunktionalitäten neu eingeführt: Unterstützung größerer Server mit mehr Prozessoren Unterstützung von Clustern für hohe Verfügbarkeit Unterstützung chers zusätzlichen Spei- Integrierung in das Sicherheitssystem von NT. Einfachere Bedienbarkeit Um eine einfachere Bedienbarkeit zu gewährleisten hat Microsoft die folgenden Schlüsselfunktionalitäten neu eingeführt: Abfragen in natürlicher Sprache Assistenten für die automatische Verwaltung vieler Aufgaben des Administrators Native Fähigkeiten für das DataWarehousing Microsoft Transaction Server SQL Server Der SQL Server ist Microsofts Plattform für die Entwicklung verteilter Anwendungen und deren bevorzugte Plattform für die relationale Speicherung der Daten. Als relationaler Datenbank-Server führt er sämtliche Optimierungen der Abfragen auf dem Server aus und unterstützt SQL 92, gespeicherte Prozeduren, serverbasierte Sicherheitsüberprüfungen und Online-Backup. Für die Version 7 wurde der SQL Server in weiten Teilen neu geschrieben. In jedem Teil des Produkts finden sich Neuerungen, von der Verwaltung über das Tuning bis hin zu den Anforderungen an den Speicher. Damit unterstützt der SQL Server Microsofts Stra12-02 Entwicklung für Windows DNA tegie, die Produkte höher zu skalieren und dabei die Bedienung einfacher zu gestalten. Der Microsoft Transaction Server (MTS) verbindet die Eigenschaften eines Object Request Brokers und eines Transaktionsmonitors. Anders ausgedrückt: der MTS bedient nicht ausschließlich die Clients mit serverbasierten Objekten, er sichert auch komplette Transaktionen jeglicher Datenbankänderungen, die während eines Aufrufs dieser Objekte auftreten. Letztendlich enthält er sein eigenes Programmiermodell für diejenigen Objekte, die den vollständigen Nutzen aus seinen Fähigkeiten ziehen wollen. FoxX-Professional Seite 4 Der MTS als Object Request Broker Als Object Request Broker (ORB) behandelt der MTS alle Referenzen auf COM-Objekte in seiner Domäne und stellt diese wenn notwendig den aufrufenden Clients zur Verfügung. MTS-Komponenten müssen COMDLLs sein und um die größtmögliche Geschwindigkeit zu erreichen, müssen sie innerhalb des MTS-Prozesses laufen. Zur Zeit unterstützt der MTS das RuntimeCaching und kann daher die Komponenten sehr schnell instanziieren. Außerdem unterstützt er die Just-In-Time-Aktivierung und ermöglicht es damit den Komponenten im Arbeitsspeicher zu verbleiben, auch wenn der Code des Client die Referenz freigibt. Eine wichtige Eigenschaft des MTS ist das Object Pooling. Zur Zeit ist es aber nur für Server unter Windows 2000 verfügbar, die eine optionale Schnittstelle implementiert haben. Unglücklicherweise werden dadurch VB- und VFP-basierte Komponenten ausgeschlossen. Ist das Pooling aktiviert und ein Objekt ist unter dem MTS instanziiert, wird die Referenz in einem Pool gehalten, so dass sie jedem Client übergeben werden kann. Auf diese Weise wird die Zeit für die Instanziierung gespart. Außerdem sollten die MTS-Objekte statuslos sein, sie sollten also in ihren Eigenschaften keine Werte halten, die für einen weiteren Methodenaufruf gespeichert werden müssen. Auf diese Weise kann der MTS die Objekte den Clients auf die effizienteste Weise zur Verfügung stellen, da eine Instanz mehrere Clients bedienen kann. Andernfalls wäre für jeden Client eine eigene Instanz jedes Objekts erforderlich. Die Objekte des MTS existieren innerhalb von MTS-Packages (das sind umbenannte COM-Anwendungen), deren Aufgabe es ist, die Anwendung vor dem Abstürzen eines einzelnen COM-Objekts zu schützen. Alle Objekte eines bestimmten MTS-Packages werden innerhalb eines Prozesses gestartet, aber außerhalb des Prozesses des Client. Ein Objekt in einem Package wird nie ein Objekt in einem anderen Package stören. Abbildung 2 zeigt Ihnen in einem Beispiel zwei Clients, die auf den MTS zugreifen. Beachten Sie bitte, dass die Clients auf die MTS-Komponenten außerhalb des eigenen Prozesses zugreifen, während die Komponenten im gleichen Package sich im gleichen Prozess befinden. Abbildung 2: MTS-Aufrufe innerhalb und außerhalb des eigenen Prozesses 12-02 Entwicklung für Windows DNA FoxX-Professional Seite 5 Der MTS als Transaktionsmonitor Zusätzlich zu seinen ORB-Fähigkeiten verfolgt der MTS die Datenbankaktivitäten der Objekte und stellt sicher, dass die Transaktionen korrekt gesetzt sind – auch über die Grenzen der einzelnen Datenbank hinaus. Er kann Transaktionen in allen Datenbanken absichern, die entweder den COM/TXoder den XA-Standard unterstützen. Dazu gehören die allgemein gebräuchlichen Datenbanken wie Microsoft SQL Server, Oracle und DB2 von IBM. DesktopDatenbanken wie Visual FoxPro oder Access unterstützen diese Standards nicht und können daher nicht innerhalb einer Transaktion des MTS abgesichert werden. Das Programmiermodell des MTS Der MTS bietet den Zugriff auf seine Transaktionssicherung und die Sicherheitsinformationen mittels eines Objekts, das ObjectContext genannt wird. Jedes Objekt innerhalb des MTS kann auf seinen eigenen ObjectContext zugreifen und dort Informationen abfragen. Dieses Kontextobjekt wird jedes Mal benötigt, wenn Sie von innerhalb einer Komponente auf die äußere Umgebung zugreifen müssen. Beispielsweise benutzen Sie das Kontextobjekt um dem MTS mitzuteilen, ob eine Komponente ihre Aufgabe erfolgreich abgeschlossen hat oder nicht. Diese Aufrufe (SetComplete und SetAbort) greifen in die Ausführung von Transaktionen des MTS ein und bestimmen, ob die Änderung der Datenbank erfolgreich war oder zurückgenommen werden soll. Zusätzlich können Sie die Funktion IsCallerInRole nutzen um festzustellen, ob der Anwender, der ein Objekt aufruft, Mitglied einer Rolle ist, die das Recht dazu hat. Anders ausgedrückt: Sie können jedem NTAnwender oder und jeder Gruppe eine Rolle zuweisen, die innerhalb Ihres MTS-Packages definiert ist. Ihr Code kann prüfen, ob der Anwender, der eine Komponente aufruft, Mitglied einer Rolle ist, der die Anwendung der Komponente erlaubt ist. Beispielsweise verteilt der folgende Code unterschiedlichen 12-02 Entwicklung für Windows DNA Gruppen von Anwendern unterschiedliche Rechte für eine Kreditlinie. DO CASE CASE oContext.IsCallerInRole("Manager") lySigningAuthority = $10000 CASE oContext.IsCallerInRole("Clerk") lySigningAuthority = $1000 ENDCASE Microsoft Message Queue Server Der Microsoft Message Queue Server stellt die asynchrone Kommunikation zwischen Servern bereit. Dies umfasst das Routing, die prioritätsorientierte Kommunikation, die garantierte Zustellung und die Unterstützung der Transaktionen durch den MTS. Anders als bei synchroner Kommunikation, die eine unmittelbare Reaktion erwartet (beispielsweise einen Funktionsaufruf), wird bei asynchroner Kommunikation die Nachricht erst ausgeliefert, wenn der Empfänger sie explizit anfordert. Sie können sich den Unterschied ähnlich vorstellen wie bei einem Telefonanruf, bei dem Sie den Angerufenen einmal direkt erreichen und ein anderes Mal auf den Anrufbeantworter sprechen. In einem Fall müssen auf beiden Seiten Menschen anwesend sein, im anderen Fall nur auf der anrufenden Seite. Die asynchrone Kommunikation kann in vielen Fällen gegenüber der synchronen Kommunikation die bessere Wahl sein. Nimmt beispielsweise eine Airline eine Reservierung für einen Flug entgegen, kann sie dem Catering-Service eine asynchrone Nachricht senden, in dem sie über spezielle Wünsche für die Bordverpflegung informiert. Es gibt keinen Grund, weshalb eine ständige Verbindung zwischen Airline und Catering bestehen sollte. Die Nachricht kann den Lieferanten auch erreichen, wenn er seine Nachrichten turnusmäßig abholt. Die asynchrone Kommunikation wird noch wichtiger, wenn Geräte erreicht werden sollen, die nicht ständig im Netz präsent sind, beispielsweise Laptops oder Handhelds. Eine solche Verbindung kann jederzeit unterbrochen werden, so dass es wichtig ist, die Anwendung so asynchron wie möglich zu FoxX-Professional Seite 6 erstellen, damit die Übertragung wieder aufgenommen werden kann, wenn die Verbindung erneut steht. Internet Information Server Der Internet Information Server (IIS) ist Microsofts Webserver. Er vereint das World Wide Web, das File Transfer Protocol, den Index Server und den Secure Sockets Layer in einem Produkt. Zusätzlich integriert er durch den MTS Transaktionen in Webanwendungen. Mit Hilfe der ISAPI-Schnittstelle hat Microsoft die Active Server Pages entwickelt, deren Aufgabe es ist, das Erstellen von interaktiven Webanwendungen mit dynamischen Inhalten zu ermöglichen. ASPs können mit dem MTS in Transaktionen eingebunden werden und nehmen in webbasierten mehrschichtigen Systemen eine Schlüsselrolle ein. Vereinfacht gesagt führt der Anwender im Browser eine Aktion durch, ASP erkennt diese Aktion, ruft die entsprechenden COMKomponenten auf und gibt die passenden Seiten an den Browser zurück. Wo finden Sie diese Werkzeuge? Nun haben wir einige grundlegende Informationen über die Werkzeuge behandelt. Lassen Sie uns jetzt sehen, wo Sie die Werkzeuge finden. Um es einfacher zu machen teile ich die Werkzeuge auf in solche, die als separates Produkt erhältlich sind, solche, die Sie mit dem NT 4 Option Pack erhalten und 12-02 Entwicklung für Windows DNA in solche, die mit Windows 2000 installiert werden. Als separate Produkte erhältlich Der SQL Server wird als einzelnes Produkt vermarktet. In der Enterprise Edition des Visual Studio ist bereits eine Entwicklerversion enthalten. Universal Data Access können Sie unter dem Namen MDAC downloaden. Außerdem wird er auch mit dem Visual Studio Professional Edition und höher installiert. Den Download finden Sie unter http://www.microsoft.com/data. COM und DCOM wird mit Windows NT und Windows 98 ausgeliefert. DCOM für Windows 95 ist als Download verfügbar (Versionen vor SR 3 enthalten es nicht). Windows NT 4 MTS, MSMQ und IIS finden Sie auf der Windows NT Option Pack CD. Beachten Sie, dass MSMQ und IIS nur auf dem Windows NT Server installiert werden können. Der IIS kann auf der Windows NT Workstation und auf Windows 9x durch den Personal Web Server ersetzt werden. Außerdem installiert die Option „Alles installieren“ MSMQ nicht. MSMQ muss separat installiert werden. Windows 2000 MTS, MSMQ und IIS werden mit Windows 2000 installiert. MTS und MSMQ sind jetzt Komponenten von Windows 2000. FoxX-Professional Seite 7