22
Fat - Clients mit Java Swing Darstellung einer modernen SWING GUI unter Verwendung aktuell verfügbarer Technologien.

Fat - Clients mit Java Swing

Embed Size (px)

DESCRIPTION

Framework zur Entwicklung moderner Swing Applikationen als Alternative zu HTML Anwendungen.

Citation preview

Page 1: Fat - Clients mit Java Swing

Fat - Clients mit Java Swing

Darstellung einer modernen SWING GUI

unter Verwendung aktuell verfügbarer Technologien.

Page 2: Fat - Clients mit Java Swing

Motivation

� Abbildung einer anpassbaren Standardapplikation ohne Ausprägung auf fachliche Aspekte.

� Schaffung eines Basisframeworks für die Anwendungsentwicklung.� Modularisierung und Kapselung technischer Aspekte.� Weitgehende Ausnutzung vorhandener Technologien und Bibliotheken.� Automatisierung von Layoutfunktionen durch generische Komponenten

und Layoutmechanismen.

Ausgehend vom Vorbild SWT/JFaces (Eclipse Projekt) wurde der Versuch unternommen, eine moderne und ansprechende Oberfläche in Swing nachzubilden und diese als prototypische Basis für ein Thin Client Framework vorzustellen. Folgende Aspekte wurden bei der Erstellung der Demonstration betrachtet:

Die nachfolgenden Screenshots und Beispiele bilden kein vollständig funktionsfähiges Framework ab, sondern sind in einer frühen Beta- und Experimentierphase. In erster Linie sollen Ausprägungen eines möglichen View Frameworks aufgezeigt werden. Letzte Änderungen am Framework erfolgten aushgehend von den Erfahrungen der Projekte Harpoon & Phoenics.

Page 3: Fat - Clients mit Java Swing

Vorschau - Übersicht

Arbeitsbereich mit einigen Auswahlreitern und Detailfenstern. Das vorliegende Beispiel entstamm dem Verlagswesen, ist jedoch auf andere prozessgetriebene Bereiche Übertragbar.

Page 4: Fat - Clients mit Java Swing

Vorschau - Details

Arbeitsbereich mit einigen Auswahlreitern und Detailfenstern im Detail. Die Definition der linksseitigen Auswahlreiter, Menüstrukturen und Ereignisverknüpfungen ist verallgemeinert und erfolgt vollständig mit Hilfe des Spring Frameworks.

Page 5: Fat - Clients mit Java Swing

Vorschau - Komponenten

Generierte Beispieldialoge

Page 6: Fat - Clients mit Java Swing

Technologien & Bibliotheken

� Lauffähig ab JDK 1.5

� JDK 1.6 Swing Group Layout (portiert auf JDK 1.5)

� Javax.security (Login, SSO, Kommunikation, ...)

� Springframework 2.x (Komposition, Konfiguration)� AOP, Remoting, JMX, JPA

� Bushe EventBus (siehe JavaOne Präsentation)

� Lf2prod & SwingX Komponenten (Filtertabellen, Panels, ...)

� JGoodies Plastik Look & Feel als Basis für Erweiterungen

� Glazed Lists

� JUnit 3.x & 4.x als Testbasis

� uispec4j & jemmy für Swing UI tests

� hansel-2.x für junit Quellcode Abdeckungstests

Page 7: Fat - Clients mit Java Swing

Eigene Erweiterungen

� Attributbindung & Validierung durch Annotationen

� Formulardefinition / Autolayout durch Annotationen

� Generelle Verwendung von Generics (Java 1.5)

� Grafische Anpassungen am Look & Feel

� Generische Swing Komponenten

� Spring Integration / Komposition

Page 8: Fat - Clients mit Java Swing

Rendering & Binding

Die Darstellung von Transferobjekten kann durch die Verwendung eines frei definierbaren Formular -Models den jeweiligen Bedürfnissen angepasst werden. Bei Bedarf können Formularobjekte mit Datenobjekten gleichgesetzt werden (1:1 Darstellung eines Beans als Formular).

Bean Attribute werden durch Annotationen einzelnen Renderern, Validatoren und Formatierern zugeordnet.

Page 9: Fat - Clients mit Java Swing

Rendering & Binding

Ein abstrakter Basisrenderer implementiert die Verknüpfung zwischen dargestellter Swingkomponente und den zugrundeliegenden Formularobjekten.

Reaktionen auf Benutzer Interaktionen sind in den jeweiligen Feldkapselungen generisch abgebildet und werden an das zugehörige Model weitergeleitet.

Der Entwickler hat bei bedarf vollständige Kontrolle über alle Zeitpunkte einer jeweilige Persistierung bzw. Weitergabe oder Zusammenführung geänderter Attribute.

Page 10: Fat - Clients mit Java Swing

Rendering & Binding

Es können beliebige Swing Komponenten oder eigene Erweiterungen zur Darstellung von Attributwerten eingesetzt werden. Die übergeordnete Renderkomponente delegiert die Darstellung eines Attributes an die jeweilige Renderkomponente des Attributes.

Page 11: Fat - Clients mit Java Swing

Automatische Layoutdefinition

A

A

B

D

C

D

B

C

A : Anordnung zu Clustern

B : Feldbeschreibungen

C : Attributprüfung

D : Formatierung und Prüfung

A

Die Definition der Oberfläche im Formularmodel und ist hier beispielhaft für einige Standardannotationen dargestellt. Diese können beliebig um eigene Aspekte erweitert werden.

Durch die Verwendung des Grouplayouts schrumpft die Auswertung der Annotationen und deren Darstellung in der generalisierten Implementierung eines Formularpanels auf ca. 50 Quellcodezeilen.

Komplexere Zusammenstellungen wie zum Beispiel Mehrspaltigkeit können bei Implementierung entsprechender Annotationen und deren Berücksichtigung im Grouplayout umgesetzt werden.

Page 12: Fat - Clients mit Java Swing

Formatierung von Attributen

Beispiel für einen einfachen Text -Formatierer. Die Formatierung erfolgt in drei Phasen: Laden eines Attributes, bei Nutzereingaben, und bei der Übergabe an das übergeordnete Vaterobjekt.

Page 13: Fat - Clients mit Java Swing

Validierung von Attributen

Analog zu Formatierung können eigene Validierer für Attribute implementiert werden. Die Reihenfolge der Validierung erfolgt ebenfalls in drei Phasen.

Page 14: Fat - Clients mit Java Swing

Eventsystem / EventBus

EventBus

Als Basis für die Kommunikation aller Komponenten wird anstatt eines HMVC Musters ein Eventsystem benutzt. Es handelt sich hierbei um die Standardimplementierung von Michael Bushe, welche im Swing Umfeld als eine der besten Implementierungen gilt und zudem durch hohe Performance heraussticht (siehe Präsentation Java One 2006).

Die Definition von Sendern und Empfängern erfolgt entweder direkt bei der jeweiligen Komponente oder durch Softcoding mit Hilfe des Springframeworks (Beispiel: Folie mit Menüdefinitionen).

“Agents”

Page 15: Fat - Clients mit Java Swing

Navigation über Objektbäume / Eventsystem

EventBus

Beispiel für eine Steuerung des Bearbeitungssystems zur Ansteuerung von Objekten aus Arbeitslisten, Suchergebnissen, Listen ...

“Agents”

Page 16: Fat - Clients mit Java Swing

Anwendungskomposition

In der Beispielanwendung werden alle Konfigurierbaren Aspekte der Anwendung mit Hilfe des Springframeworks konfiguriert. Dieses bietet zu einem späteren Zeitpunkt eine einfache Möglichkeit für Erweiterungen wie zum Beispiel Logging, Eventinterceptionen etc.

Generell ist jedoch das Springframework nichtVoraussetzung und kann durch andere Konfigurationsmechanismen oder eine rohe Javaimplementierung ersetzt werden.

Page 17: Fat - Clients mit Java Swing

Komponentenkomposition

Beispiel der Komposition von Auswahlelementen.

Page 18: Fat - Clients mit Java Swing

Menükomposition

Definition der verfügbaren Menüaktionen (aktuell nicht personalisiert) und deren Verknüpfung mit dem Eventsystem. Die Definition der Menüstrukturen werden analog vorgenommen.

Page 19: Fat - Clients mit Java Swing

Komponentenmanagement

Beispiel für die nachträgliche Bereitstellung einzelner Komponenten durch JMX (zum Beispiel für Serverpush einzelner Komponenteninhalte etc.)

Page 20: Fat - Clients mit Java Swing

Resourcendefinition

Die Definition beliebiger Resourcen erfolgt ebenso mit Spring (hier am Beispiel von Ikondefinitionen).

Page 21: Fat - Clients mit Java Swing

Login als Implementierung des javax.security Standards

Beispiel für eine eigene Implementierung des javax.security.auth.spi.LoginModule

Page 22: Fat - Clients mit Java Swing

Beobachtungen, Fazit und Ausblick

� Seit JDK 1.42 ist Swing sehr schnell und bei sorgfältiger Implementierung auch sehr ressourcenverträglich. Es ist jedoch anzumerken, dass „native“ Anwendungen bei hoher Auslastung des Clients immer noch performanter sind.

� Grundlegende Swing API hat sich seit mehreren Jahren nur geringfügig verändert, auch wenn die interne Implementierung seitens SUN mittlerweile sehr von den ersten Versionen abweicht.

� Simulationen mit 100+ dargestellten Bearbeitungsfenstern verursachen kaum merkliche Verzögerungen.

� Swing Oberflächen können mit geringem Aufwand „schön“ aussehen und entsprechen aktuellen Anforderung der Nutzer. Eigene Komponenten überbieten sogar die Funktionalität von Standardframeworks. Einziger ernsthafter Widersacher ist in dieser Hinsicht wxWidgets.

� Die Testbarkeit mit uispec4j. bzw. netbeans jemmy ermöglicht die vollständige Testabdeckung im Entwicklungsprozess.

� Die Qualität der Anwendung erfordern eine genaue Kenntnis der Swing Interna (insbesondere Threading - Aspekte). Durch eine sorgfältige Implementierung und Kapselung technischer Aspekte kann das Framework jedoch auch an unerfahrene Anwendungsentwickler weitergereicht werden.