esprit jugs-talklet 7 · • ausführung kann synchron oder asynchron im client laufen •...
TRANSCRIPT
1
EsprIT 7.xJUGS-Talklet
Client/Server Technologie mit Event-gesteuerten ClientsJava Framework für Agenten-basierende Client/Server Programmierung
2
EsprIT 7.x
Deine Taten sind sinnlos
wenn niemand davon erfährt
3
EsprIT 7.xInhalt
EsprIT Technologie
• Multi-Kanal Client Sessions• Agenten Konzept• Client-Kommandos• MVC & Alive Business Objects• AsyncTaks und Workflows• EsprIT Client Framework• EsprIT Server Funktionen• Server Verbundnetze• Anwendungsbeispiele• Key-Vorteile, Vergleich
4
EsprIT 7.xClient/Server Historie
Client-Funktionalität
Mainframe
Serv
er-F
unkt
iona
lität
Client/Server
Web-Clients Rich-Clients
1990 1995
2000 2005
5
EsprIT 7.xWeb- oder Rich-Client?
WebServer
HTTP/HTMLWebClient
statelessunidirektional
ServletJSPsJSF
StrutsSpringHtmlXML
TaglibsPHPASP
PEARLCGI
Web-Browser
...ist der EsprIT-Server für Rich-Clients
EsprIT-Server
Java Objekt- Serialisierung
RichClient
statefullbidirektional
AgentenAlive Business Objects
Java VM
Was der Web-Server für Web-Clients...
6
EsprIT 7.xRückkehr der Rich-Clients
Web-Client
+ Keine Software Installation nötig+ Zugriff auf Server von überall
- Browser abhängig- Eingeschränkt auf Browser GUI- Eingeschränkt in Komplexität- Kein echtes Session Management- Fehlersicherheit ist schwierig- Software schwer wartbar/testbar- Aufwendiges Server-Polling - Eingeschränkte Performance - Starke Last auf Serverseite
Rich-Client
- Installation nötig auf Client (Automatisch seit Java-Webstart)
+ Kein Browser nötig+ Uneingeschränkte GUI Power+ Uneingeschränkte Komplexität+ Echtes Session Management+ Robust und Fehlersicher+ Software leicht wartbar/testbar+ Dynamische Benachrichtigung + Bestmögliche Performance+ Last verteilt auf Client und Server
Vorteile/Nachteile Web/Rich Clients
7
EsprIT 7.xClient 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
8
EsprIT 7.xRequest/Response
Request/Response Kanal• Request wird zum Server geschickt, Client erhält Response • Request und Response tragen ein beliebiges Argument-Objekt• Request kann auf Client oder Server in Timeout laufen• Request kann hohe/niedrige Priorität haben• Request wird synchron abgearbeitet
Client GUI blockiert vollständig bis Response empfangen wurde
EsprIT Server
DatenbankRequest
ClientResponse
9
EsprIT 7.xMessage
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
EsprITServer
DatenbankClientMessage
Client registriert sich für bestimmte Messagetypen
10
EsprIT 7.xAsynchrone Requests
Asynchrone Requests • Request (vom Typ async) wird zum Server geschickt• Response bestätigt den Start der asynchronen Abarbeitung• Message bestätigt Ende der Abarbeitung und enthält Ergebnis• Im Client blockiert nur die aufrufende Action solange bis Message
empfangen wurde• Für asynchrone Aktivität kann ein Timeout vergeben werden
EsprITServer
DatenbankClientMessage
Request
11
EsprIT 7.xAgenten 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)
Datenbank
Request
Client
Response
Sync
12
EsprIT 7.xAgenten Lebenszyklus
ClientContext ServerContext
Agent als zwei-Welten Objekt1. Instantiierung im Client (ClientContext)2. Transfer zum Server und Ausführung (ServerContext)3. Rücktransfer zum Client und Ergebnis-Verarbeitung
Erzeugungnew MyAgent(ctx)doBeforeSend()
AusführungexecuteOnServer()Ergebnis
doOnResponseReceived()doOnMessageReceived()
sendForExecution()
MyAgent agent = new MyAgent(ctx);agent = agent.sendForExecution();Result result = agent.getResult();
13
EsprIT 7.xAsynchrone 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
Datenbank
Request
Client
Message
Async
14
EsprIT 7.xParallel-Ausführung
Parallel-Ausführung von Agenten auf Client und Server1. 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 Gesamtergebnis)5. Client postprozesst den erhaltenen Message-Agenten
So findet gleichzeitiges Prozessing auf Server und Client statt
Datenbank
Request
Client
Message
Response Async
Sync
15
EsprIT 7.xSequenzierte Agenten
Sequenzierte Agenten erstrecken sich über mehrere Messages • Große Ergebnismengen werden in mehreren Teilmengen geschickt• Größe der Teilmengen ist Benutzer-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
Datenbank
Request
Client
Sequenz von Messages
AsyncAsync
Async
16
EsprIT 7.xClient 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-KommandoClient Datenbank
EsprIT Server
17
EsprIT 7.xClient 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
EsprIT Server
Client 1
Client 2
Client 3
Integriertes Client Chat-Tool
Client-Nachricht
18
EsprIT 7.xTransfer Kanal
Transfer Kanal für transaktionale Datei-Übertragungen• Tempoäre TCP Verbindung ausschließlich für Datei-Transfer• Gemischte Up/Downloads von Dateien als 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
EsprIT ServerTransfer Kanal
DatenbankClient
transaktionaleUp/Downloadsvon Dateien
19
EsprIT 7.xWeb-Kanal
Web Kanal - Integrierter Web-Server• Erlaubt Zugriff auf HTML Dokumente, Bilder, etc.• PUBLIC Web root-Directory für unauthorisierte Zugriffe• PRIVAT Web root-Directory für authorisierte Zugriffe
EsprIT ServerWeb Kanal
DatenbankClient
HtmlBilder etc...
HTTP Request
Public Bereich Privat Bereich
20
EsprIT 7.xMVC über Netz
Model-View-Controller Prinzip über Netz
Ein Client (Controller) modifiziert das Modell
EsprIT Server
Alle Clients werden benachrichtigt und aktualisieren ihre Darstellung (View)
DatenbankModel
21
EsprIT 7.xAlive Business Objects I
"Lebende" Business Objekte, global zugreifbare Server-Objektemit dynamischer Aktualiserung auf allen Clients - ohne deren Zutun
Ein Client modifiziertdas Business-Objekt
EsprIT Server
Alle Clients werden benachrichtigt und aktualisieren ihre Darstellung
DatenbankTank ...
Tank 5Tank 4
22
EsprIT 7.xAlive 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) Zugriff mit PrimaryKey (ggf. mit gleichzeitiger Editier-Sperre)• find(SqlCondition) Suche nach allen, die SQL-Bedingung erfüllen• drop() Vergiß dieses Objekt (keine
Aktualiserung mehr)• create() Erzeuge neues Objekt auf
Serverseite• update() Aktualisiere Objekt auf Serverseite• delete() Lösche Objekt auf Serverseite
23
EsprIT 7.xAlive 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 hatund 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 ServerClient 1
Client 2
ABO-CacheTrackABO
GraphABO
24
EsprIT 7.xABO-Anwendung
Anwendung bei Hydro Aluminium Hamburg
EsprIT ServerClient 1
Client 2
ABO-Cache
ca. 1000MFStateABOs
Client 1
Client 2
Datenbank
Datenbank
Vorher
NachherSQL
ABO Filter
SQL
25
EsprIT 7.xRemote Tasks
Synchronisierter Ablauf zwischen lokalem und remote 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
TaskEventClient DatenbankEsprIT Server
Lokaler Thread Remoter Thread
Fortschritts-Monitoring
26
EsprIT 7.xAsync Task Framework
Tasks können in beliebiger Tiefe schachteln
27
EsprIT 7.xWorkflows
Workflows• Kontrollierter Ablauf mehrerer asynchroner Tasks• Incl. Remote-Tasks, File-Transfers, Stream-Downloads etc...• Workflow Monitor zeigt geplante/laufende/erledigte Tasks
Decision-Points erlaubenbenutzergesteuerten Ablauf
• An beliebiger Stelle abbrechbar
• Klare Fehlerbehandlung• Viele Workflows können
gleichzeitig laufen
28
EsprIT 7.xServer Sperren
Server Resource Sperren• Beliebige Server-Objekte können mit Zugriffssperre belegt werden
SHARED mehrere Zugriffe erlaubt - schützt vor LöschenEXCLUSIVE 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)
29
EsprIT 7.xAnwendungen schreiben I
Agenten sind Programmier-Schnittstelle für Kunden-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!
• Umfangreiche Agenten-Bibliothek für Standardfunktionen inklusive
30
EsprIT 7.xAnwendungen schreiben II
Programmierung von Anwendungen
ClientContext
MyClientContext
Eigene Komponenten
ServerContext
MyServerContext
Eigene KomponentenEigene Komponenten
MyAgentXY
31
EsprIT 7.xEsprIT 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ähiges Async-Task Framework
32
EsprIT 7.xClient Aktivitäts-Monitor
Clientseitige asynchrone Aktivität besteht aus:Agenten: Laufende AgentenTransfers: Laufende File-Transfers/Stream-DownloadsProzesse: Laufende lokale/remote OS-ProzesseCommands: Laufende (empfangene) Client-KommandosSperren: Vom Client belegte Sperren auf Server-ResourcenABOs: Vom Client zugegriffene Alive-Business-Objects
• Sämtliche asynchrone Client-Aktivität kann visuell beobachtet werden• Benutzer kann jegliche asynchrone Aktivität jederzeit abbrechen
Asynchrone Client Aktivität auf dem Server
Verbinden/Trennen
Message LED
Request LED
33
EsprIT 7.xEsprIT Admin-Client
Administrations-Client zur Kontrolle des EsprIT Servers • Beobachtet Server-Aktivität (Parameter Profil)• Zeigt Console-Ausgaben und Server-Events online• Erlaubt interaktives Auswerten der Server Logfiles• Dynamische Konfiguration der Server Runtime-Parameter• Beobachtet und kontrolliert Clients• Administrator Nachrichten an Clients
34
EsprIT 7.xEsprIT 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
• Leicht auf kundenspezifische Funktionalitäten zu erweiternViele fertige Server-Komponenten verfügbar...
ServerContext
MyServerContext
Eigene KomponentenEigene Komponenten
35
EsprIT 7.xServer Profil
Server Aktivitäts-Profil • Beobachtbare Server-Statistiken
36
EsprIT 7.xIntegrierter WebServer
Integrierter Webserver• HTML Dokumentation, Webservice, Classdownloading
37
EsprIT 7.xDatenbank-Zugriff
Remote-Zugriff auf Datenbank (Volle Editier-Funktionalät)
38
EsprIT 7.xServer Verbundnetz
Mehrere Server können zu einem Verbund geschaltet 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 7.xCo-Clients, Co-Server
Co-Client und Co-Server Verbindungen
Mein Server hat einen anderen Server als Co-Client
Mein Server is Co-Client von zwei anderen Servern
3 Benutzer sind aktiv
Ein Benutzer hält eine exclusive Sperre auf einer Server Resource
Ein Benutzer führt einen File-Transfer aus
40
EsprIT 7.xWeitere Server Features
Weitere Server Features• Server-Batch-Prozesse (Zeitgesteuerte Hintergrund-Jobs)• Alarm-Benachrichtigung an Administrator per 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 7.xBGR
BGR Bundesanstalt für Geowissenschaften und Rohstoffe, HannoverFinite Elemente Analyse geologischer Prozesse
42
EsprIT 7.xProjekt INCA
BGR Hannover, Finite Elemente Berechnungen
43
EsprIT 7.xProjekt INCA
BGR Hannover, Ergebnis Analyse Tool
44
EsprIT 7.xProjekt HiLocate
ISA Telematics, Flotten Management System HiLocate
45
EsprIT 7.xProjekt BDE
Hydro Aluminium Hamburg, Online Betriebsdaten Erfassung
46
EsprIT 7.xKey-Vorteile I
Wichtigste Vorteile der EsprIT Client/Server Technologie
• Echte Sessions aus Request/Response und Message KanalClient-Aktualisierung per Nachricht, kein Server-Polling erforderlich.Echtes Model-View-Controller Prinzip (MVC) über Netz
• Höchstmögliche PerformanceEinfache Datenübertragung per Java-Serialisierung, stehende TCP Verbindung.Kein Overhead durch Daten-Konvertierungen (XML oder ähnl.)
• Sehr flexibles Agenten KonzeptAgenten als elegante Programmier-Schnittstelle
• Alive Business Objects (ABOs)Mit automatischer, dynamischer Aktualisierung auf ClientsAlle Clients haben genau eine Sicht der Welt
• Transaktionaler File-TransferZum Austausch großer Datenmengen, ClientServer, ServerServer
• Server Verbundnetz Ermöglicht Aufgabenteilung, Involvierung vieler Systeme, Filetransfers uvm...
47
EsprIT 7.xKey-Vorteile II
Wichtigste Vorteile der EsprIT Server Technologie
• Verkettung komplexer synchroner/asynchroner Operationen mit Agenten, ClientKommandos, Tasks, FileTransfers etc…Beispiel: Client startet CAD System und erzeugt Input-DateiInput-Datei wird automatisch zum Zentral-Server übertragenZentral-Server macht Datenbankeintrag und überträgt weiter an Compute-Server Compute-Server startet Berechung und überträgt Zwischenergebnis an Zentral-ServerZentral-Server macht Datenbankeintrag und meldet Ergebnis an wartenden ClientClient holt Ergebnisdatei von Zentral-Server abClient 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)
Vielfältige Anwendungsmöglichkeiten
48
EsprIT 7.xEinsatzmöglichkeiten
Wo kann man den EsprIT Server einsetzen?
• 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 7.xVergleich
EsprIT-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, reine Serialisierung)
Applikations-Server
- 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...)
EsprIT-Server oder Applikations-Server?
50
EsprIT 7.x
Kleine Firmen bauen einer Arche
Große Firmen bauen die Titanic