EsprIT Esprit Network Suite Ein Java Framework für Agenten-basierende Client/Server Programmierung 1 EsprIT Just do it Deine Taten sind sinnlos wenn niemand davon erfährt 2 EsprIT Inhalt Esprit Network Suite Web- contra Rich-Client Multi-Kanal Client Sessions Agenten Konzept Client-Kommandos, Server-Calls MVC & Alive Business Objects Workflows Esprit Client Funktionen Esprit Server Funktionen Server Kaskadierung Server Datenbankanbindung Key-Vorteile, Vergleich 3 EsprIT Welt-Netzwerk 4 EsprIT Web- oder Fat-Client? Web-Browser Web Client HTTP/HTML Web Server stateless unidirektional Was der Web-Server für Web-Clients... Servlet JSPs JSF Struts Spring Html XML Taglibs PHP ASP PEARL CGI Java VM Rich Client Java ObjektSerialisierung statefull bidirektional EsprIT Server ...ist der EsprIT Server für Rich-Clients 5 Pure Java Agenten Alive Business Objects EsprIT Rückkehr der Rich-Clients Vorteile/Nachteile Web/Rich Clients Web-Client Rich-Client + Keine Software Installation nötig + Zugriff auf Server von überall - Installation nötig auf Client (Automatisch seit Java-Webstart) - Browser abhängig - Eingeschränkt auf Browser GUI - Eingeschränkt in Komplexität - Kein echtes Session Management - Fehlersicherheit ist schwierig - Software ist schwer wartbar - Aufwendiges Server-Polling - Eingeschränkte Performance - Starke Last auf Serverseite + Kein Browser nötig + Uneingeschränkte GUI Power + Uneingeschränkte Komplexität + Echtes Session Management + Robust und Fehlersicher + Software leicht wartbar + Dynamische Benachrichtigung + Bestmögliche Performance + Last verteilt auf Client und Server 6 EsprIT Client Verbindung Esprit Multi-Kanal Client Verbindungen • Request/Response Kanal für sync/async Client Anfragen • Message Kanal für asynchrone Server Nachrichten • Transfer Kanal (optional) für Übertragung von File-Sets • Web Kanal (optional) für Zugriff auf HTML Dokumente Request/Response und Message Kanäle bilden eine Client-Session 7 EsprIT Request/Response Request/Response Kanal (synchron) • Request wird zum Server geschickt, Client erhält Response • Request and Response tragen ein beliebiges Argument-Objekt • Request kann auf Client oder Server in Timeout laufen • Request kann hohe/niedrige Priorität haben • Request kann asynchron sein (Response wird in Message empfangen) synchron: Client GUI blockiert vollständig bis Response empfangen wird asynchron: Nur die aufrufende Client-Aktion blockiert bis Response empfangen wird Request Client Response EsprIT Server 8 Datenbank EsprIT Message Message Kanal (asynchron) • Server schickt asynchrone Message an Client • • • • • Message kann beliebiges Argument-Objekt tragen Message kann stammen vom Server, anderen Clients, Client selbst Verschiedene Messages lösen verschiedene Reaktionen bei Client aus Client registriert/deregistriert sich für bestimmte Message-Typen Client kann ein ausführbares Kommando in Message erhalten Kommando wird synchron oder asynchron im Client ausgeführt Client registriert sich für bestimmte Messages Message Client EsprIT Server 9 Datenbank EsprIT File-Transfer Transfer Kanal für transaktionale Datei-Übertragungen • Tempoäre TCP Verbindung ausschließlich für Datei-Transfer • Gemischte Up/Downloads von Dateien in Transaktion • Kann synchron/asynchron, gesperrt/ungesperrt laufen • Viele Transfers können parallel laufen • Unterstützt auch File-DownStreaming Auswertung des Datei-Inhalts direkt aus dem Stream ohne Speicherung auf Client transaktionale Up/Downloads von Dateien Client EsprIT Server Transfer Kanal 10 Datenbank EsprIT Web Web Kanal - Integrierter Web-Server • Zugriff auf HTML Dokumente, Bilder, etc. • Client SW-Installation/SW-Aktualisierung per Java-Web-Start Web Bereich HTTP Request EsprIT Server Client Web Kanal Html Bilder etc... 11 Datenbank EsprIT Runtime-Umgebung Austausch-Objekte (Agenten) ClientContext ServerContext 12 EsprIT Agenten Lebenszyklus Agent als zwei-Welten Objekt 1. Instantiierung im Client (ClientContext ctx) 2. Transfer zum Server und Ausführung (ServerContext) 3. Rücktransfer zum Client und Ergebnis-Verarbeitung MyAgent agent = new MyAgent(ctx); agent = agent.sendForExecution(); Result result = agent.getResult(); ClientContext Erzeugung ServerContext sendForExecution() new MyAgent(ctx) doBeforeSend() Ausführung Ergebnis executeOnServer() doOnResponseReceived() doOnMessageReceived() 13 EsprIT Agenten Konzept Synchrone Ausführung von Agenten • Agent ist Argument von Request/Response oder Message • Agent wird auf dem Server ausgeführt und dann zurückgeschickt • Agent wird auf dem Client beim Empfang postprocessed • Agent enthält Input-Parameter und Ergebnisse der Ausführung • Kann mit definierbarer Priorität laufen • Kann beliebiges Argument-Objekt beinhalten (ggf. gezipped) Request Sync Client Datenbank Response 14 EsprIT Asynchrone Agenten Asynchrone Ausführung von Agenten • Agent kann auf dem Server asynchron ausgeführt werden • Nach Ausführung wird Agent in einer Message zurückgeschickt • Die aufrufende GUI-Aktion blockiert bis Message empfangen wird • Client kann asynchrone Agenten jederzeit abbrechen • Client kann viele asynchrone Agenten parallel laufen lassen • Wenn Client terminiert, beendet Server alle Agenten dieses Clients Request Client Async Message 15 Datenbank EsprIT Parallel-Ausführung Parallel-Ausführung von Agenten auf Client und Server 1. Asynchroner Agent wird teilw. synchron auf Server ausgeführt und sofort in Response zum Client geschickt (mit Teilergebnissen) 2. Server startet asynchrone Ausführung des Agenten 3. Client startet Postprozessing des Response-Agenten 4. Server sendet fertigen Agenten in Message (mit Vollergebnis) 5. Client postprozesst den erhaltenen Message-Agenten So findet gleichzeitiges Prozessing auf Server und Client statt Request Sync Client Response Async Message 16 Datenbank EsprIT Sequenzierte Agenten Sequenzierte Agenten erstrecken sich über mehrere Messages • Große Ergebnismengen werden in mehreren Teilmengen geschickt • Größe der Teilmengen ist frei definierbar • Client kann Fortschritt in einem Progress-Bar anzeigen • Client GUI-Aktion blockiert bis letzte Teilmenge empfangen wurde • Beispiel: Lesen großer Datenmengen aus Datenbank Request Client Async Async Async Sequenz von Messages 17 Datenbank EsprIT Client Kommandos Server kann Kommando an Client schicken • Kommando wird beim Empfang vom Client ausgeführt • Ausführung kann synchron oder asynchron im Client laufen • Client-Kommando kann beliebige Funktionen des Clients ausführen • Server benutzt Client-Kommando, um Clients zu kontrollieren Beispiel: Erzwungenes Beenden eines Clients • Benutzer können Client-Kommandos zu anderen Clients schicken Client ClientKommando EsprIT Server 18 Datenbank EsprIT Remote Tasks Synchronisierter Ablauf zwischen lokalem und remotem Prozeß • Client Thread startet remoten Thread auf Server • Client Thread wartet auf Events des Server-Threads • Server-Thread sendet Prozeß-typische TaskEvents: STARTED, PROCEEDED, SUCCEEDED, CANCELLED, FAILED, FINISHED • Das FINISHED-Event beendet auf jeden Fall den Wartezustand • Einfache Programmierung von asynchron ablaufenden Workflows Lokaler Thread Client Remote Thread TaskEvent EsprIT Server Fortschritts-Monitoring 19 Datenbank EsprIT Client Kommunikation Clients können direkt miteinander kommunizieren • Ein Client kann Nachricht schicken an: - einen bestimmten Client - einen bestimmten Benutzer (kann mehrfach eingeloggt sein) - alle verbundenen Clients • Integriertes Client-Chat-Tool • Integriertes Client-Benachrichtigungs-Tool Client 1 Client 2 Client-Nachricht EsprIT Server Client 3 Integriertes Client Chat-Tool 20 EsprIT Anwendungen schreiben Agenten sind die Programmier-Schnittstelle für Anwendungen • Agenten beinhalten Code für Prozessing auf Server und Client • Ein Agent kapselt eine bestimmte Funktion vollständig • Eine Anwendung schreiben bedeutet: Schreiben bestimmter Agenten für bestimmte Funktionen! Das ist alles! • Server-seitige Software bleibt unverändert • Umfangreiche Agenten-Bibliothek für Standardfunktionen vorhanden 21 EsprIT Anwendungen schreiben II Programmierung von Anwendungen MyAgentXY ClientContext ServerContext MyClientContext MyServerContext Custom Components Eigene CustomKomponenten Components 22 EsprIT MVC über Netz 23 EsprIT Alive Business Objects "Lebende" Business Objekte, global zugreifbare Server-Objekte mit dynamischer Aktualiserung auf allen Clients - ohne deren Zutun Tank ... Tank 5 Tank 4 EsprIT Server Datenbank Ein Client modifiziert das Business-Objekt Alle Clients werden benachrichtigt und aktualisieren ihre Darstellung 24 EsprIT Alive Business Objects II Alive Business Objects (ABOs) • Verwenden MVC über Netz • ABOs unterscheiden sich durch PrimaryKey • Änderungen werden an zugreifenden Clients kommuniziert • Können mit serverseitiger Editier-Sperre zugegriffen werden • Können Datenbank-persistent sein • Extrem einfach in der Anwendung • • • • • • fetch(withLock, PrimaryKey) find(SqlCondition) drop() create() update() delete() Zugriff mit PrimaryKey (ggf. mit gleichzeitiger Editier-Sperre) Suche nach allen, die SQL-Bedingung erfüllen Vergiß dieses Objekt (keine Aktualiserung mehr) Erzeuge neues Objekt auf Serverseite Aktualisiere Objekt auf Serverseite Lösche Objekt auf Serverseite 25 EsprIT Alive Business Objects III ABO Server-Cache • ABOs werden auf Serverseite gecached für schnellen Zugriff • ABO-Access-List Server weiß, welcher Client welches ABO im Zugriff hat und schickt Change-Events nur an diese Clients • Client kann ABO "droppen" und wird dann nicht mehr informiert • Wenn kein Client mehr zugreift wird ABO aus dem Cache gelöscht • Cache-resistente ABOs bleiben immer im Cache EsprIT Server Client 1 ABO-Cache TrackABO GraphABO Client 2 26 EsprIT ABO-Anwendung Anwendung bei Hydro Aluminium Hamburg Client 1 Vorher Datenbank SQL Client 2 Client 1 ABO Filter EsprIT Server ABO-Cache Nachher Client 2 ca. 1000 MFStateABOs 27 SQL Datenbank EsprIT Remote Tasks Synchronisierter Ablauf zwischen lokalem und remotem Prozeß • Client Thread startet remoten Thread (Prozeß) auf Server • Client Thread wartet auf Events des Server-Threads • Server-Thread sendet Prozeß-typische TaskEvents: STARTED, PROCEEDED, SUCCEEDED, CANCELLED, FAILED, FINISHED • Das FINISHED-Event beendet auf jeden Fall den Wartezustand • Einfache Programmierung von asynchron ablaufenden Workflows Lokaler Thread Client Remoter Thread TaskEvent EsprIT Server Fortschritts-Monitoring 28 Datenbank EsprIT Async Task Framework Robust kontrollierter Ablauf asynchroner Tasks 29 EsprIT Workflows Workflows • Kontrollierter Ablauf mehrerer asynchroner Tasks • Incl. Remote-Tasks, File-Transfers, Stream-Downloads uva... • Workflow Monitor zeigt geplante/laufende/erledigte Tasks 30 EsprIT Server Sperren Server Resource Sperren • Beliebige Server-Objekte können mit Zugriffssperre belegt werden SHARED EXCLUSIVE mehrere Zugriffe erlaubt - schützt vor Löschen nur ein Zugriff - schützt vor fremden Änderungen Sperren sind "geleased" • Client muss eine Sperre regelmäßig retriggern Fällt Client aus, wird die Sperre automatisch aufgelöst • Administrator kann Freigabe einer Sperre erzwingen Beispiele • Zugriff auf eine Server-Datei • Zugriff auf die Datenbank • Zugriff auf ein ABO (Alive Business Object) 31 EsprIT EsprIT Client Umfangreiches Client Framework • GUI Framework zur Entwicklung kundenspezifischer Clients • Dynamisches Verbinden/Trennen zum/vom EsprIT-Server • Kommunikation mit anderen Clients • Viele fertige GUI Komponenten und GUI Unterstützungs-Klassen • Leistungsfähigs Async-Task Framework 32 EsprIT Client Aktivitäts-Monitor Clientseitige asynchrone Aktivität besteht aus: Agenten: Laufende Agenten Transfers: Laufende File-Transfers/Stream-Downloads Prozesse: Laufende lokale/remote OS-Prozesse Commands: Laufende (empfangene) Client-Kommandos Sperren: Vom Client belegte Sperren auf Server-Resourcen ABOs: Vom Client zugegriffene Alive-Business-Objects • Sämtliche asynchrone Client-Aktivität kann visuell beobachtet werden • Benutzer kann jegliche asynchrone Aktivität jederzeit abbrechen Verbinden/Trennen Message LED Request LED Asynchrone Client Aktivität auf dem Server 33 EsprIT EsprIT Admin-Client Administrations-Client zur Kontrolle des EsprIT Servers • Beobachtet Server-Aktivität (Parameter Profil) • Zeigt Console-Ausgaben und Server-Events online • Erlaubt das interaktive Auswerten der Server Logfiles • Dynamische Konfiguration der Server Runtime-Parameter • Beobachtet und kontrolliert Clients • Administrator Nachrichten an Clients 34 EsprIT EsprIT Server Voll ausgestatteter Multikanal Middleware Server • Läuft als Hintergrundprozeß • Unabhängig von Plattform oder Datenbank (pure Java) • Skalierbar, dynamisch konfigurierbare Thread-Pools • Integrierter User-Manager • Verwaltet Editier-Sperren für Server-Resourcen • Automatisches Logfile-Management Div. Logfiles für div. Applikationen ServerContext • Leicht auf kundenspezifische Funktionalitäten zu erweitern Viele fertige Server-Komponenten verfügbar... MyServerContext Eigene Komponenten 35 EsprIT Server Profil Server Aktivitäts-Profil • Beobachtbare Server-Statistiken 36 EsprIT Integrierter WebServer Integrierter Webserver • HTML Dokumentation, Webservice, Classdownloading 37 EsprIT Datenbank-Zugriff Remote-Zugriff auf Datenbank (Volle Editier-Funktionalät) 38 EsprIT Server Kaskadierung Mehrere Server können zu einem Verbund kaskadiert werden • Ein Server kann Client eines anderen Servers sein • Co-Client/Co-Server Verbindungen sind ausfallsicher (monitored) • Requests können zu einem Ziel-Server gerouted werden • Agenten können über mehrere Server durchgereicht werden 39 EsprIT Co-Clients, Co-Server Co-Client und Co-Server Verbindungen Dieser Server hat einen anderen Server als Co-Client Dieser Server is Co-Client von zwei anderen Servern 3 Benutzer sind aktiv Ein Benutzer hält eine exclusive Sperre auf einer Server Resource 40 Ein Benutzer führt eine Datei-Übertragung aus EsprIT Weitere Server Features Weitere Server Features • Server-Prozesse (Zeitgesteuerte Hintergrund-Jobs) • Alarm-Benachrichtigung an Administrator über Email • Exclusive/Shared Sperren auf Server-Resourcen • Datenbankverbindung mit Connection-Pool (parallele Transaktionen) • Simultane Verbindungen zu mehreren Datenbanken (Direkter Daten-Transfer zwischen unterschiedlichen DB-Systemen) 41 EsprIT BGR BGR Bundesanstalt für Geowissenschaften und Rohstoffe, Hannover Finite Elemente Analyse geologischer Prozesse 42 EsprIT Anwendungsbeispiel I INCA Projekt, BGR Hannover 43 EsprIT Anwendungsbeispiel I INCA Projekt, BGR Hannover, TimeHistory Tool 44 EsprIT Anwendungsbeispiel II HiLocate Projekt, ISA Telematics 45 EsprIT Anwendungsbeispiel III BDE-IS Project, Hydro Aluminium Hamburg 46 EsprIT Key-Vorteile Wichtigste Vorteile der EsprIT Client/Server Technologie Echte Sessions aus Request/Response und Message Kanal Client-Aktualisierung per Nachricht, kein Server-Polling erforderlich. Echtes Model-View-Controller Prinzip (MVC) über Netz Höchstmögliche Performance Einfache Datenübertragung per Java-Serialisierung, stehende TCP Verbindung. Kein Overhead durch Daten-Konvertierungen (XML oder ähnl.) Transaktionaler File-Transfer Zum Austausch großer Datenmengen, ClientServer, ServerServer Sehr flexibles Agenten Konzept Agenten als elegante Programmier-Schnittstelle Alive Business Objects (ABOs) Mit automatischer, dynamischer Aktualisierung auf Clients Alle Clients haben genau eine Sicht der Welt Server Kaskadierung Ermöglicht Aufgabenteilung, Involvierung vieler Systeme, Filetransfers uvm... 47 EsprIT Key-Vorteile II Wichtigste Vorteile der EsprIT Server Technologie Verkettung komplexer synchroner/asynchroner Operationen mit Agenten, ClientKommandos, Tasks, FileTransfers Beispiel: Client startet CAD System und erzeugt Input-Datei Input-Datei wird automatisch zum Zentral-Server übertragen Zentral-Server macht Datenbankeintrag und überträgt weiter an Compute-Server Compute-Server startet Berechung und überträgt Zwischenergebnis an Zentral-Server Zentral-Server macht Datenbankeintrag und meldet Ergebnis an wartenden Client Client holt Ergebnisdatei von Zentral-Server ab Client startet CAD-System zur Darstellung des Ergebnisses ... Alles in einem automatischen Ablauf, gesteuert durch den Workflow Unabhängig vom Datenbanksystem (pure JDBC) Unabhängig von Hardwareplattform (pure Java) Äußerst vielfältige Anwendungsmöglichkeiten 48 EsprIT Einsatzmöglichkeiten Wo kann man den EsprIT Server einsetzen? Der ideale Standard-Server für Rich-Client Unterstützung Für Entwicklung hochperfomanter Client/Server Anwendungen Beste Unterstützung für Clients... ...mit komplexer Funktionalität (mit Web-Clients schwer zu realisieren), ...die kurze Antwortzeiten haben müssen, ...die stets aktuelle Daten anzeigen müssen (Meßwerte, Aktienkurse, Fahrstrecken...) EsprIT Server kann beobachten und kontrollieren: - Ausführung/Monitoring anderer Betriebssystem-Prozesse, Sensoren etc. - Ausführung/Monitoring zeitgesteuerter Server-Prozesse Server-Kaskadierung kann benutzt werden... ...zum Ausführen verschiedener Aufgaben auf verschiedenen Rechnern ...zur Überwachung der Aktivität anderer Rechner und deren Prozesse 49 EsprIT Vergleich EsprIT-Server oder Applikations-Server? EsprIT-Server Applikations-Server + Preisgünstig + Wenig Wartungsaufwand + Kleine Lernkurve (standard Java) + Server-Kaskadierung möglich + Leichte Programmier-API (Agent) + Keine Einschränkung in Funktion + Client Benachrichtigung inklusive + Bestmögliche Performance (dual TCP, keine Konvertierung) - Relativ Teuer - Hoher Wartungsaufwand - Steile und hohe Lernkurve - Keine Server-Kaskadierung - Komplizierter Technologie-Mix - Eingeschränkt auf EJBs - Keine Client-Benachrichtigung - Eingeschränkte Performance (RMI, SOAP, XML etc...) - Kein Clustering + Kann im Cluster arbeiten 50 EsprIT Kleine Firmen bauen einer Arche Große Firmen bauen die Titanic 51