Vaadin - ConceptPeople

Werbung
Moderne Web-Anwendungen mit Vaadin
[email protected]
September 2013
???
Copyright © 2013 – akquinet AG
<{
Web-Anwendungen mit Vaadin
2
Agenda
• Was sind tägliche Herausforderungen?
• Warum ist Vaadin bei deren Bewältigung hilfreich?
• Wie wird in Vaadin eine Anwendung entwickelt?
• Womit anfangen?
Copyright © 2013 – akquinet AG
3
Agenda
• Was sind tägliche Herausforderungen?
• Warum ist Vaadin bei deren Bewältigung hilfreich?
• Wie wird in Vaadin eine Anwendung entwickelt?
• Womit anfangen?
Copyright © 2013 – akquinet AG
4
Was sind tägliche Herausforderungen?
Effizienz
•
•
•
•
Copyright © 2013 – akquinet AG
Roundtrip
API / Libraries
Debugging
Testbarkeit
5
Was sind tägliche Herausforderungen?
Varianz
• Feedback
• Standards
• Vorbereitung
Copyright © 2013 – akquinet AG
6
Was sind tägliche Herausforderungen?
Akzeptanz
•
•
•
•
Copyright © 2013 – akquinet AG
Nutzen
Einfachheit
Einstellung
tats. Nutzung
7
Agenda
• Was sind tägliche Herausforderungen?
• Warum ist Vaadin bei deren Bewältigung hilfreich?
• Wie wird in Vaadin eine Anwendung entwickelt?
• Womit anfangen?
Copyright © 2013 – akquinet AG
8
Wege zu Vaadin – Fat Client (Ausgangspunkt)
12
stark
10
ausgeprägt8
6
4
Fat Client
wenig
2
ausgeprägt
0
maximaler Umfang für einen kleinen Kreis
Copyright © 2013 – akquinet AG
9
Wege zu Vaadin – CGI
12
stark
10
ausgeprägt8
6
4
wenig
2
ausgeprägt
Fat Client
CGI
0
sehr rudimentäre, aber eben weithin einsetzbare Architektur
Copyright © 2013 – akquinet AG
10
Wege zu Vaadin – JSF & Co.
12
stark
10
ausgeprägt8
6
4
wenig
2
ausgeprägt
Fat Client
CGI
JSF & Co.
0
in der Effizienz verbesserte, nach wie vor weithin einsetzbare Architektur
Copyright © 2013 – akquinet AG
11
Wege zu Vaadin – Vaadin
12
stark
10
ausgeprägt8
6
4
wenig
2
ausgeprägt
Fat Client
CGI
JSF & Co.
Vaadin
0
Evolution zu Perfektion: sehr großer Umfang für eine sehr breite Zielgruppe
Copyright © 2013 – akquinet AG
12
Was ist Vaadin?
• Rich Internet Applications = RIA (im Browser)
• Auf Desktop-Niveau für die Anwender
• Mittels Komponenten (wie SWT / Swing) für die Entwickler
• In pure Java entwickeln
Streng typisierte Web-Entwicklung
Copyright © 2013 – akquinet AG
13
Geschichte von Vaadin
2000 Start
intern
2003 AJAX
Rendering
2007 Open
Src / GWT
2009
Vaadin 6
2012 Beta
Vaadin 7
2013
Vaadin 7
Stabilität + Aktualität
Copyright © 2013 – akquinet AG
14
Architektur von Vaadin: Shared State/Terminal Adapter
via Framework
Copyright © 2013 – akquinet AG
15
Umfangreiche Vorarbeit - UI-Bibliothek
Copyright © 2013 – akquinet AG
•
45+ Komponenten
300+ im Add-on Dir
•
5+ Layouts
•
3 Themes
1 weitere in Arbeit
•
Drag & Drop Support
•
Touch Events
•
CSS + SASS
16
Mobile Development: Vaadin TouchKit
Copyright © 2013 – akquinet AG
•
Nach wie vor RIA
•
Nach wie vor Pure
Java
•
iOS Look & Feel
Neutraler Look
möglich
•
Navigationsmodell
Listen scrollen,
Navigation Bar
17
Warum ist Vaadin hilfreich? – Effizienz
Effizienz
• Maven, Hot Deployment,
JRebel
• Roundtrip
• API / Libraries
• Debugging
• Testbarkeit
• UI Komponenten Sammlung
• Full Java
• Remote Debugging
• JUnit
• Selenium
• JMeter
Copyright © 2013 – akquinet AG
18
Warum ist Vaadin hilfreich? – Varianz / Risiko
• Schnelle erste Version
• Qualifiziertes Feedback
• Standard JEE-Technologie
• Keine Kinderkrankheiten
• Gehärtet
Varianz
• Feedback
• Standards
• Vorbereitung
Copyright © 2013 – akquinet AG
• Große UI Komponenten
Sammlung
19
Warum ist Vaadin hilfreich? – Akzeptanz
• Erwartungskonforme UI
• Style und Usability
• Mobile
• Zeit für Business-Logik
• Schnelles Feedback
Akzeptanz
• Nutzen
• Einfachheit
• Einstellung
• tats. Nutzung
Copyright © 2013 – akquinet AG
20
Agenda
• Was sind tägliche Herausforderungen?
• Warum ist Vaadin bei deren Bewältigung hilfreich?
• Wie wird in Vaadin eine Anwendung entwickelt?
• Womit anfangen?
Copyright © 2013 – akquinet AG
21
Basis der Vaadin-Architektur
Darstellung im
Browser
Kommunikation /
State
UI für spezifische
Use Cases
Theme /
Design
Data Binding
•
Client State im Hintergrund abgewickelt
•
Erstellen von Widgets
(analog Swing / SWT)
auf dem Server
•
Verwenden von Web /
JEE Container
•
Fokus auf spezifische
Logik (türkis)
Spezifische Business-Logik und Datenhaltung
JVM
Copyright © 2013 – akquinet AG
22
Sprung in den Code: init()
@Theme(“officewerker“)
public class OfficewerkerApplicationUI extends UI {
Eigener Theme
@Inject
Notificator notificator;
...
@Override
public void init(VaadinRequest request) {
main() von Vaadin
this.i18nLocaleConfig.setLocale(getLocale());
...
setContent((ComponentContainer) this.mainPresenter
.getView().getComponent());
Fenster analog Swing
Page.current().setTitle("Officewerker");
}
MVP ist eine Option
}
Copyright © 2013 – akquinet AG
23
Sprung in den Code: LoginComponent
public void init() {
setSizeFull();
Toolbar toolbar = new Toolbar(
this.i18n.get("login.title"), null);
this.textFieldMandator = new TextField(
this.i18n.get("login.label.mandator"));
this.textFieldMandator.setWidth("100%");
this.textFieldMandator.setTabIndex(1);
this.textFieldMandator.focus();
this.textFieldMandator.setId("loginMandant");
this.textFieldMandator.addStyleName("styleid-loginMandant");
Internationalisierung
TextField analog Swing
Vorbereitung
Oberflächentest
this.textFieldLogin = new TextField(
this.i18n.get("login.label.login"));
this.textFieldLogin.setWidth("100%");
this.textFieldLogin.setTabIndex(2);
this.textFieldLogin.setDebugId("loginName");
this.textFieldLogin.addStyleName("styleid-loginName");
HorizontalLayout layoutLoginMandator = new HorizontalLayout();
layoutLoginMandator.setWidth("100%");
layoutLoginMandator.setSpacing(true);
layoutLoginMandator.addComponent(this.textFieldMandator);
layoutLoginMandator.addComponent(this.textFieldLogin);
Copyright © 2013 – akquinet AG
Panels analog Swing
24
Sprung in den Code: init() + LoginComponent
Copyright © 2013 – akquinet AG
Sprung in den Code: init() + LoginComponent – HTML
Copyright © 2013 – akquinet AG
Sprung in den Code: init() + LoginComponent – HTML
Copyright © 2013 – akquinet AG
Vaadin Entwicklungsumgebung
Core
Quality
IDE
(z.B. Eclipse)
Visual Designer
CI
(z.B. Jenkins)
Server/Debug
Build
(z.B. Maven)
Develop /
Manage
Build
Functional Test
(z.B. Selenium)
Dev Server
(z.B. Glassfish)
Test/Run
PerformanceTest
(z.B. JMeter)
Repository (z.B. SVN)
Copyright © 2013 – akquinet AG
28
Details zur Entwicklung – Performance Test
•
•
•
•
EC² x-large
zufällig 10 (dann 500) von 10k Rechnungen
bis 200 parallele (leicht versetzte) Threads
JMeter / JVisualVM
Highlights Antwortzeit (Self time):
• ~70ms je Rechnung im Durchschnitt
• 3 von 4 in weniger als ~150ms
• >50% ist DB, 98% Backend-related
• Vaadin ist nicht mehr messbar (0%)
Highlights Speicherverbrauch:
• 900k Instanzen Rechnungs-Bean
• 2.800 Instanzen „teuerste“ Vaadin-Klasse
(Rework im) Backend bestimmt Performance
Siehe auch http://blog-de.akquinet.de/2013/07/02/vaadin-unter-last-teil-1-aufsetzen-der-testumgebung/ etc.
Copyright © 2013 – akquinet AG
24.09.2013
29
Details zur Entwicklung – Integration
•
Aufruf von beliebigem JavaScript (massiv verbessert in Vaadin 7)
vaadin.forceSync()
= JS 2 vaadin (Vaadin 6)
JavaScript.getCurrent().addFunction
= JS 2 vaadin (Vaadin 7)
getWindow().executeJavaScript
= vaadin 2 JS (Vaadin 6)
JavaScript.getCurrent().execute
= vaadin 2 JS (Vaadin 7)
•
Einschließlich Integration via HTML5
(e.g. HTML5 postMessage(…))
•
Beispiel: Integration mit Bonita:
Kundenauswahl (situativ) verbessert
- Choose ruft Bonita auf
einen kleinen TEIL einer großen
Anwendung mit vaadin umsetzen
Copyright © 2013 – akquinet AG
30
Details zur Entwicklung – Integration
•
Klein, smart, situativ anfangen (können) – überschaubares Risiko
•
weiteres Beispiel: Facebook-like „Wall“
für Kundenservice
(vgl. Projekt der MetLife, NYC:
(http://www.10gen.com/press/metlife-leapfrogs-insuranceindustry-mongodb-powered-big-data-application))
Verwendung von Vaadin (7),
CouchDB, MVP, CDI, etc.
- Auswahl Standard-Posts in Bonita
u.v.a.m
Copyright © 2013 – akquinet AG
24.09.2013
31
Agenda
• Was sind tägliche Herausforderungen?
• Warum ist Vaadin bei deren Bewältigung hilfreich?
• Wie wird in Vaadin eine Anwendung entwickelt?
• Womit anfangen?
Copyright © 2013 – akquinet AG
32
Wo fange ich an?
•
Loslegen!
Leichter Einstieg
Schnell erste Ergebnisse
•
Achtung: Vaadin hilft, ist aber nur eine Technologie!
Klare Anforderungen
Gute Projektmethodik
Permantes Feedback
Sauberer Architektur
Copyright © 2013 – akquinet AG
33
Wo fange ich an?
Tutorials
(auch gedruckt)
Book of
Vaadin
Comm
unity
(e.g. akquinet)
Copyright © 2013 – akquinet AG
e.g. JavaMagazin
(vaadin.com)
Solution
Partner
34
Wo fange ich an?
• Peter Palchinsky (1875-1929) ist Ihr Freund!
• Durchstich mit einem Use Case – einfach machen
• Muster etablieren (upfront, vorhersagbar) und wachsen
Copyright © 2013 – akquinet AG
35
Fazit und Wrap-Up
•
Streng typisierte Web-Entwicklung
•
Pure and Full Java
•
Evolution Richtung Perfektion
bzgl. Effizienz / Varianz / Akzeptanz
•
Legen Sie los!
Copyright © 2013 – akquinet AG
FRAGEN?
36
Backup
Copyright © 2013 – akquinet AG
24.09.2013
37
Wie können wir Sie unterstützen?
Copyright © 2013 – akquinet AG
38
Ihre Ansprechpartner
Copyright © 2013 – akquinet AG
Olaf Lange
Sebastian Rothbucher
Geschäftsführer
akquinet engineering
GmbH
Analyst / Developer / Berater
akquinet engineering
GmbH
040-88173-2412
0179-121 42 06
[email protected]
0157-738 657 78
[email protected]
24.09.2013
39
Herunterladen