RDS einsetzen Einleitung Vom RPC, Remote Procedure Call 1985, IPC zum RDS, Remote Data Service 2003 hin zur SOA, Service Oriented Architecture 2006 Max Kleiner, Mai 2006
RDS Agenda Kernidee (Funktionsmuster) ist, gesammelte Daten aus n-clients mit einer Applikation oder einem Dienst via SOAP zentral an einen Server zu senden und auszuwerten. Die Umsetzung zeigt mit WebServices ein Framework zur entfernten Speicherung von Daten (Storage as Service). Warum SOA nur eine Idee und keine Technik ist! 2
Anforderung Ein schweizweites Netz von mobilen Rechnern (Ausbildungscontrolling) sendet periodisch Ausbildungsdaten an einen zentralen Server, der die ausgewerteten Daten dann per Browser für die Instruktoren bereithält. In der folgenden Fallstudie möchte ich die Grundzüge dieser Technik näher bringen und vor allem das entfernte Speichern von Daten via Funktionen erklären. 3
Rahmenbedingung Fachliche Anforderungen Q-Anforderungen Fachmodell Use Case, Activity Technische Anforderungen Architekturkonzept Funktionsmuster Packages, IAD Analyse Referenz Architektur Patterns Abbildungsregeln Layers - Tiers Spezifikation Class, Sequence, ERD, GUI Design ist Implementierung der Architektur Design Framework Implementierung Fachcode nutzt Architektur State Event, Packages, Component Integration Implement ierung www.miloffice.ch 4
GUI: Dienstplanung Replikation / Import / Export ACV Ausb. Controlling TRW Trp Rechnungswesen DTM Diensttagemanagement MILO DB Architektur MILO 4.X AdA-Verwaltung XML-RPC / Softwarebus Reporting PICASSO LEONARDO Portfolio/Formulare PKI SecureCenter MILO SOA WebServices PISA RE4 /SAP XML AVOR GAD / FDT Ausb D / Ei Compacs, MIL Sport, KADAS Weitere Appl. 5
RDS: Worum geht es? VCLScanner.exe als Client (Compilat) VCLScannerServer.exe als WebService Apache WebServer InterBase DB / DBExpress Connector Die Komponenten des RDS: -WSDLPublish - Dispatcher - Invoker - DataSetProducer 6
RDS konkret InterBase Client A Client B MainBase Verbinden (HTTP) Finden (UDDI, WSDL) Datenformat (XML) Interagieren (SOAP) App/Web Server Administration Client C 7
WebService Technik Dienste im Netz, die über Standard- Protokolle erreichbar sind Datenaustausch basiert auf XML Plattform- und unternehmensübergreifende Transaktionen kombinierbar OO-Technik mit Interfaces realisiert HTTP-Port 80 in der Regel offen 8
Schlüsseltechnologie Web Service Benutzer Finden: : UDDI http://findaservice.ch XML mit Link zur Web Site Realisieren: : WSDL http://adb2.ch/scanner.exe/wsdl XML mit Servicebeschreibung Ausführen: : SOAP http://adb2.ch/serverscanner.exe XML als Prozeduraufruf Business Repos. Web Service 9
Webdienst-Katalog UDDI Universal Description, Discovery und Integration Gelbe Seiten des Internet für Webdienste Gremium aus ca. 120 Firmen für die Propagation von Webdiensten Bsp.: http://www.xmethods.net and click the BabelFish Web Service. Also notice the path to the WSDL file for the service: http://www.xmethods.net/sd/2001/babelfishservice.wsdl. 10
SOAP Webmodul Die Komponente THTTPSoapDispatcher empfängt und beantwortet hereinkommende SOAP-Nachrichten und entscheidet, welches Interface man verwendet. Das korrekte Objekt, welches das Interface realisiert, wird an den PascalInvoker weitergeleitet, der die richtig ausgepackte Methode mit den formatierten Argumenten einschliesslich Errorcodes in den eigentlichen OP-Aufruf inklusive Parametern transformiert. WSDL ist ein XML-Derivat zur Beschreibung der Schnittstellen von WebServices. Nachrichtenstrom- Formate und Funktionsaufrufe werden definiert. HTMLPublish ist verantwortlich für das Veröffentlichen von WSDL (WebServiceDescriptionLanguage) 11
Das Web Modul type TWebModule1 = class(twebmodule) WSDLHTMLPublish1: TWSDLHTMLPublish; HTTPSoapDispatcher1: THTTPSoapDispatcher; HTTPSoapPascalInvoker1: THTTPSoapPInvoker; DataSetTableProducer1: TDataSetTableProducer; 12
Das Interface type { Invokable interfaces must derive from IInvokable } IVCLScanner = interface(iinvokable) ['{8FFBAA56-B4C2-4A32-924D-B3D3DE2C4EFF}'] function PostData(const UserData : WideString; const CheckSum : DWORD) : Boolean; stdcall; procedure PostUser(const Email, FirstName, LastName : WideString); stdcall; end; 13
Die Implementation des Interface TVCLScanner = class (TInvokableClass, IVCLScanner) public function PostData(const UserData : WideString; const CheckSum : DWORD): Boolean; stdcall; procedure PostUser(const Email, FirstName, LastName : WideString); stdcall; end; Implementation... 14
Client Aufruf var WS: IVCLScanner; WS:= HTTPRIO1 as IVCLScanner; WS.PostData(reFinalResults.Text,CRC); HTTPRIO1:URL http://adb2/scripts/vclscannerserver.exe/soap/ivclscanner 15
Die sieben Express Schritte 1. Connection:= TSQLConnection.Create(NIL); 2. with Connection do begin... 3. DataSet := TSQLDataSet.Create(NIL); 4. with DataSet do begin... 5. SQLConnection:= Connection; 6. CommandText:= 7. Format('insert into ACL_LN values("%d","%s", "%s", "%s","%s")',[10, Email, FName, LName, ACLdate]); 16
Struktur als Class Diagram IInte rface TInvokableClass IInvokable Tfrm Main TWebModule attributes DFM: TStringList; DriveSpace: Int64; TWebModule1 attributes DataSetTableProducer1 HTTPSoapDispatcher1 HTTPSoapPascalInvoker1 WSDLHTMLPublish1 dbpath filepath operations Dispatcher/Invoker getpath IVCLScanne r TVCLScanner operations PostData(..): Boolean; PostUser(..) httpsoap Excludes: TStringList; Files: TStringList; hprocess: THandle; ProgramFilesDir: string; ResList: TStringList; Results: TStringList; SerialNumber: DWORD; SkippedDirs: TStringList; SkippedFiles: TStringList; SystemDrive: Char; WebModule1DefaultHandlerActio WebModule1RunQueryAction(..) WebModuleCreate(..) getfile_databasepath 17
Das Sequenzdiagramm 18
RDS Pakete 19
RDS Vorteil gegenüber Scripts OO-Technik mit Klassenbildung Direkt aus dem Code instanzierbar Auch ohne Browser möglich Microsoft selbst betont den Willen zur Einbindung anderer Hersteller und Plattformen Echte typensichere Compilate erlauben eine stabile Nutzung mehrerer mobiler Plattformen und Sprachen Dank des Verzeichnisdienstes immer up-to-date 20
Warum es vorderhand SOA wenig braucht? Nicht jeder Service oder Prozess muss verteilt, orchestriert und veröffentlicht werden. Zu viele nachrichtenorientierte Services erhöhen den Verwaltungsaufwand und vermindern Performance und Stabilität. SOA ist wenig typensicher, will heißen, der Hund ist zur Laufzeit begraben! 21
F1: Fragen und hoffentlich Antworten? http://max.kleiner.com 22