SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Wieviel Client braucht das Web?
Enterprise UI mit JSF, Vaadin und AngularJS
Java User Group Hamburg
07.12.2016
Dirk Weil, GEDOPLAN GmbH
Dirk Weil
GEDOPLAN GmbH, Bielefeld
GEDOPLAN IT Consulting
Konzeption, Realisierung von IT-Lösungen
GEDOPLAN IT Training
Seminare in Berlin, Bielefeld, on-site
Java EE seit 1998
Vorträge, Veröffentlichungen
Wieviel Client braucht das Web? 2gedoplan.de
Ziele / Inhalt
Einführung in die Anwendung / Java EE Backend
Vorstellung der Frameworks
Java Server Faces (JSF)
Vaadin
AngularJS
Check Up
Fazit
Wieviel Client braucht das Web? 3gedoplan.de
Einführung in die Anwendung / Java EE Backend
Datenbasis:
Microsoft Northwind
Technische Basis: Java EE 7
Fachobjekte (Customer, Order, …): JPA
DB-Zugriff (CustomerRepository, …): CDI
Services (OrderService, …): EJB mit Role based Security
Wieviel Client braucht das Web? 4gedoplan.de
Einführung in die Anwendung / Java EE Backend
Wieviel Client braucht das Web? 5
Browser
JavaServer Faces
Webservice
(JAX-RS)
Vaadin
Services
Respositories
Präsentationsschicht
/ Schnittstellen
Geschäftslogik
Datenbank
JavaEEServer
AngularJS (Browser)
Client
gedoplan.de
Java Server Faces (JSF)
Model-View-Controller-Pattern
Im Java-EE-Standard seit 2004
Komponentenmodell für das GUI von Web-Anwendungen
Wieviel Client braucht das Web? 6gedoplan.de
Application-Server
Renderer
Views, xhtml
Browser
Controller, CDI Beans
HTML, JavaScript
Services
JSF - View
Wieviel Client braucht das Web? 7
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:form>
<h:outputLabel value="#{msg.login_name}"/>
<h:inputText value="#{authenticateController.loginname}"/>
<h:outputLabel value="#{msg.login_password}"/>
<h:inputSecret value="#{authenticateController.password}"/>
<h:commandButton action="#{authenticateController.login}"
value="#{msg.login_submit}" />
</h:form>
</html>
gedoplan.de
JSF - Controller
Wieviel Client braucht das Web? 8
@Named
@RequestScoped
public class AuthenticateController {
private String loginname;
private Sring password;
public String login() {
...
return "home";
}
gedoplan.de
JSF – Vorgehensweise / Besonderheiten
Model-Controller als Bindeglied zu Views
CDI Beans
Diverse Scopes verfügbar (Request, Session, Flow, View, …)
Einbindung des Backends mittels Injektion
Serverseitige View Definition
Facelets (austauschbar)
Bindung an Model-Controller mit EL
Multipage Navigation mit zentralem Handler, wenn gewünscht
Request / Rendering partiell mit AJAX ( auch SPA möglich)
Wieviel Client braucht das Web? 9gedoplan.de
JSF – Vorgehensweise / Besonderheiten
Domänenobjekte können direkt genutzt werden ( DTOs unnötig)
Zentrales Error Handling möglich
I.d.R. zusätzliche Komponentenbibliotheken nötig
Addieren Komplexität
Addieren proprietäre Stile, JS, …
JS im Browser möglich
Nicht speziell unterstützt
Wieviel Client braucht das Web? 10gedoplan.de
Vaadin
Open Source Java Framework für Rich-Internet-Applications
Entwickelt von der Firma Vaadin Ltd.
Aufbau der Oberflächen auf Serverseite in Java (ähnlich wie Swing)
JavaScript-Engine im Browser als Thin-Client
Wieviel Client braucht das Web? 11gedoplan.de
Application-Server
Services
Views, Java
Client, Browser
JavaScript
Engine
Widgets
Komponenten
Daten, Java Beans
Synchronisiert
durch Framework
(JSON)
Vaadin - UI
Wieviel Client braucht das Web? 12
@CDIUI("login")
public class LoginUi extends UI {
protected void init(VaadinRequest request) {
TextField name = new TextField(…);
PasswordField password = new PasswordField(…);
Button login = new Button(…, e -> {login… });
FormLayout fieldLayout = new FormLayout(name, password, login);
Panel loginPanel = new Panel(…, fieldLayout);
VerticalLayout page = new VerticalLayout();
page.addComponent(loginPanel);
setContent(page);
}
}
gedoplan.de
Vaadin – Databinding (optional)
Wieviel Client braucht das Web? 13
public class LoginUi extends UI {
@PropertyId("user")
private TextField loginUser;
@PropertyId("password")
private PasswordField loginPassword;
private LoginBean loginBean = new LoginBean();
protected void init(VaadinRequest request) {
BeanFieldGroup<LoginBean> bfg =
new BeanFieldGroup<>(LoginBean.class);
bfg.buildAndBindMemberFields(this);
bfg.setItemDataSource(loginBean);
}
}
public class LoginBean {
private String user;
private String password;
// Getter + Setter
}
gedoplan.de
Vaadin – Vorgehensweise / Besonderheiten
UI-Aufbau durch UI-Klassen
Aggregation von Widget-Objekten
URL-Mapping per Annotation / Servlet
Listener-Konzept
Service-Einbindung mittels Injektion
Direkte Bindung an Domänenobjekte möglich (ohne DTOs)
Clientseitiges Rendering auf Basis serverseitiger Präsentationsdaten
Widgets werden initial in Browser (Tab) geladen
Anschließend nur Aktualisierung von Struktur und Daten
Wieviel Client braucht das Web? 14gedoplan.de
Vaadin – Vorgehensweise / Besonderheiten
SPA im Browser-Tab
Navigation zwischen Views mit bookmarkfähigen URLs
Error Handling, Converter etc. können zentral registriert werden
Erweiterbarkeit
über eigene Aggregationen von vorhandenen Komponenten
durch Entwurf zusätzliche GWT-basierter Widgets
mittels Skripting und HTML-Templates
durch Komponentenbibliotheken (teilweise kommerziell)
Wieviel Client braucht das Web? 15gedoplan.de
Angular JS
Open Source JavaScript-Webframework
RIA - Rich Internet Application
SPA – Single Page Application
entwickelt von Google
Wieviel Client braucht das Web? 16gedoplan.de
Browser
JAX-RS
Services
Application-Server
Views, html
Controller, JavaScript
JSON
AngularJS - View
Wieviel Client braucht das Web? 17
<form class="form-signin">
<input type="text" ng-model="vm.username"
placeholder="{{'login.username' | translate}}" />
<input type="password" ng-model="vm.password"
placeholder="{{'login.password' | translate}}" />
<button ng-click="vm.login()">
{{'actions.login' | translate}}
</button>
</form>
gedoplan.de
Angular – Controller, Navigation
Wieviel Client braucht das Web? 18
angular.module('GedoplanWebClients.login', [])
.controller("login", function (userService,
$translate, $state, $timeout) {
var vm = this;
vm.login = function () {…};
vm.logout = function () {…};
}
$stateProvider
.state('login', {
url: '/login',
templateUrl: 'components/login/login.html',
controller: 'login',
controllerAs: 'vm'
})
gedoplan.de
Angular – Vorgehensweise / Besonderheiten
UI-Aufbau durch HTML-Dateien
Verwendung von Expressions
Aggregation durch Directives
Service-Einbindung mittels Schnittstelle (z.B. REST)
DTOs oder JSON-Mapper notwendig
Clientseitiges Rendering auf Basis statischer HTML-Seiten
dynamische Manipulation durch Controller-Bindings
Wieviel Client braucht das Web? 19gedoplan.de
Angular – Vorgehensweise / Besonderheiten
SPA
Navigation zwischen Views mit bookmarkfähigen URLs
Zustandstandslos
Erweiterbarkeit
über eigene Aggregationen von vorhandenen Komponenten
durch Angular-spezifische Komponenten
durch JavaScript-Komponenten
Wieviel Client braucht das Web? 20gedoplan.de
Technologie-Mix
Wieviel Client braucht das Web? 21
1 2 3
Backend GUI
JSF
Java EE
• HTML-ähnliche Templatesprache, Facelets
• CSS-Kenntnisse in aller Regel notwendig
Vaadin • Java (ähnlich Swing/JavaFX)
• CSS- und JavaScript-Kenntnisse nur optional
und für eigene Komponenten
AngularJS • tiefe Kenntnisse in JavaScript, CSS, HTML nötig
gedoplan.de
Trennung Design / Präsentationslogik
Wieviel Client braucht das Web? 22
JSF • JSF-eigene Tags
• Templates
Vaadin • enge Verbindung durch programmatischen Ansatz
• Abstraktion durch Vaadin-Designer (kostenpflichtig)
AngularJS • reine HTML-Templates mit Angular Markup
• Controller der View konfigurierbar
• vollständige Projekt-Trennung möglich
1 2 2
gedoplan.de
Erweiterbarkeit
Wieviel Client braucht das Web? 23
JSF • eigene Composite Components
• Komponenten-Frameworks (z.B. PrimeFaces)
Vaadin • Komposition durch Erweiterung der Standardklassen
• eigene Komponenten bspw. durch JavaScript Extensions
AngularJS • beliebige JavaScript-Komponenten (z. B. Bootstrap, JQuery)
1 2 2
gedoplan.de
Backend Integration
Wieviel Client braucht das Web? 24
JSF • Controller im Backend-Prozess
• Zugriff auf Services durch CDI Injection
• keine externe Schnittstelle notwendig
Vaadin
AngularJS • Zugriff über externe Schnittstellen
• Datenaustausch z.B. über JAX-RS in JSON
1 1 2
gedoplan.de
Investitionssicherheit
Wieviel Client braucht das Web? 25
JSF • Standard Java EE
• Abwärtskompatibel bis Version 1.0
• Ausgenommen: Komponentenframeworks
Vaadin • proprietär
• bei großen Versionssprüngen keine stabile APIAngularJS
1 2 2
gedoplan.de
Kommunikation
Wieviel Client braucht das Web? 26
JSF • Format: HTML / XML
• User-Interaktionen lösen Requests aus
Vaadin • Format: JSON (inklusive View-Informationen)
• User-Interaktionen lösen Requests aus
AngularJS • Format: JSON (reine Daten)
• keine Requests bei Validierung und GUI-Logik
1 2 2
gedoplan.de
Ressourcen-Nutzung
Wieviel Client braucht das Web? 27
1 2 2
gedoplan.de
JSF • Rendering / View-Aufbau: Serverseitig
• Request-Größe ~ HTML-Fragmente
Vaadin • View-Aufbau: Server
• Rendering: Clientseitig
• Request-Größe ~ View-Informationen
AngularJS • Rendering / „View-Aufbau“: Clientseitig
• JSON Daten-Requests + eigener HTML-Template-Cache
Build-Prozess
Wieviel Client braucht das Web? 28
JSF • gleiche Build-Tools wie für das Backend
• Maven, Gradle, …Vaadin
AngularJS • eigenständige Build-Tools / Scripte
• größere Anzahl an Möglichkeiten
• NPM, Bower, Grunt, Gulp, Webpack, Browsify, …
1 1 2
gedoplan.de
Lernkurve (on top of Java EE)
Wieviel Client braucht das Web? 29
JSF • Facelets
• Komponenten-Bibliotheken
Vaadin • Spezifische API
AngularJS • JavaScript, HTML, CSS
• Build Tools
1 2 3
gedoplan.de
UI Testing
Wieviel Client braucht das Web? 30
JSF • Deployment auf Application Server notwendig
• komplexes Test-Setup (z. B. Arquillian)Vaadin
AngularJS • schnelles Setup dank Angular-spezifischem Test Framework
• einfaches Mocken von HTTP Requests
• HTTP Server reicht
1 2 2
gedoplan.de
Demo-Projekt
https://github.com/GEDOPLAN/webclients-check
Wieviel Client braucht das Web? 31gedoplan.de
More
https://www.slideshare.net/gedoplan/wieviel-client-
braucht-das-web-69901049
Präsentation zum Download
http://www.gedoplan-it-training.de
Seminare in Berlin, Bielefeld, Inhouse
http://www.gedoplan-it-consulting.de
Reviews, Coaching, …
Blog
 dirk.weil@gedoplan.de
@dirkweil
Wieviel Client braucht das Web? 32gedoplan.de

Weitere ähnliche Inhalte

Was ist angesagt?

Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadingedoplan
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptOPEN KNOWLEDGE GmbH
 
PHP UG Karlsruhe - Zend Framework Introduction
PHP UG Karlsruhe - Zend Framework IntroductionPHP UG Karlsruhe - Zend Framework Introduction
PHP UG Karlsruhe - Zend Framework Introductionmaexpower
 
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Oliver Hader
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft AG
 
Metadatenbasierte Validierung
Metadatenbasierte ValidierungMetadatenbasierte Validierung
Metadatenbasierte Validierungos890
 
OAuth 2.0 und OpenId Connect
OAuth 2.0 und OpenId ConnectOAuth 2.0 und OpenId Connect
OAuth 2.0 und OpenId ConnectManfred Steyer
 
JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)Michael Kurz
 
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSOliver Hader
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)Michael Kurz
 
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon MeggleOSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon MeggleNETWAYS
 
Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Tobias Kraft
 
Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?gedoplan
 

Was ist angesagt? (20)

Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadin
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
 
PHP UG Karlsruhe - Zend Framework Introduction
PHP UG Karlsruhe - Zend Framework IntroductionPHP UG Karlsruhe - Zend Framework Introduction
PHP UG Karlsruhe - Zend Framework Introduction
 
AngularJS
AngularJSAngularJS
AngularJS
 
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
Vor- und Nachteile von Web Components mit Polymer gegenüber AngularJS ohne P...
 
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform Apps
 
Metadatenbasierte Validierung
Metadatenbasierte ValidierungMetadatenbasierte Validierung
Metadatenbasierte Validierung
 
GWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der PraxisGWT – Google Web Toolkit in der Praxis
GWT – Google Web Toolkit in der Praxis
 
Web Components
Web ComponentsWeb Components
Web Components
 
OAuth 2.0 und OpenId Connect
OAuth 2.0 und OpenId ConnectOAuth 2.0 und OpenId Connect
OAuth 2.0 und OpenId Connect
 
JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)
 
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJSWebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
WebGL - 3D im Browser - Erfahrungsbericht mit BabylonJS
 
GWT: Eintauchen in MVP und Internationalisierung
GWT: Eintauchen in MVP und InternationalisierungGWT: Eintauchen in MVP und Internationalisierung
GWT: Eintauchen in MVP und Internationalisierung
 
MVP mit dem Google Web Toolkit
MVP mit dem Google Web ToolkitMVP mit dem Google Web Toolkit
MVP mit dem Google Web Toolkit
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)
 
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon MeggleOSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
OSMC 2012 | End2End-Monitoring von Webapplikationen mit SAHI by Simon Meggle
 
IHK GfI
IHK GfIIHK GfI
IHK GfI
 
Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?
 
Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?
 
Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT Eintauchen in MVP mit GWT
Eintauchen in MVP mit GWT
 

Andere mochten auch

Andere mochten auch (20)

Spectcc perez
Spectcc perezSpectcc perez
Spectcc perez
 
H3 fa1 mirte klerkx-bedoin
H3 fa1 mirte klerkx-bedoinH3 fa1 mirte klerkx-bedoin
H3 fa1 mirte klerkx-bedoin
 
RM_Most Likely to Lead - final (1)
RM_Most Likely to Lead  - final (1)RM_Most Likely to Lead  - final (1)
RM_Most Likely to Lead - final (1)
 
CHAPWorkbook
CHAPWorkbookCHAPWorkbook
CHAPWorkbook
 
Presentacion de arte gótico
Presentacion de arte góticoPresentacion de arte gótico
Presentacion de arte gótico
 
Stara pinakoteka-u-minhenu
Stara pinakoteka-u-minhenuStara pinakoteka-u-minhenu
Stara pinakoteka-u-minhenu
 
Pascua Lama Barrick
Pascua Lama BarrickPascua Lama Barrick
Pascua Lama Barrick
 
Componentes del universo
Componentes del universoComponentes del universo
Componentes del universo
 
Resume
ResumeResume
Resume
 
Inspirational Lecture - Philippe De Backer - Privacy
Inspirational Lecture - Philippe De Backer - PrivacyInspirational Lecture - Philippe De Backer - Privacy
Inspirational Lecture - Philippe De Backer - Privacy
 
Using server logs to your advantage
Using server logs to your advantageUsing server logs to your advantage
Using server logs to your advantage
 
GiovannaGargano_CV
GiovannaGargano_CVGiovannaGargano_CV
GiovannaGargano_CV
 
Liturgia 4
Liturgia 4Liturgia 4
Liturgia 4
 
Act1 ev
Act1 evAct1 ev
Act1 ev
 
Klasik karyola satmak istiyorum
Klasik karyola satmak istiyorumKlasik karyola satmak istiyorum
Klasik karyola satmak istiyorum
 
Human genetics
Human geneticsHuman genetics
Human genetics
 
aerie “real” ad campaign
aerie “real” ad campaignaerie “real” ad campaign
aerie “real” ad campaign
 
Chava y sergio
Chava y sergioChava y sergio
Chava y sergio
 
Mundo3 rioinfo2016
Mundo3 rioinfo2016Mundo3 rioinfo2016
Mundo3 rioinfo2016
 
Assessing Flow-Accelerated Corrosion in Hard-to-Reach Places
Assessing Flow-Accelerated Corrosion in Hard-to-Reach PlacesAssessing Flow-Accelerated Corrosion in Hard-to-Reach Places
Assessing Flow-Accelerated Corrosion in Hard-to-Reach Places
 

Ähnlich wie Wieviel Client braucht das Web?

Enterprise UI
Enterprise UIEnterprise UI
Enterprise UIgedoplan
 
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)greenrobot
 
Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?gedoplan
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1Manfred Steyer
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?GFU Cyrus AG
 
Atlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-InfrastrukturAtlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-InfrastrukturGeorg Schmidl
 
Back to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesBack to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesAndré Fleischer
 
Progressive Web Apps Presentation
Progressive Web Apps PresentationProgressive Web Apps Presentation
Progressive Web Apps PresentationSteffen Wagner
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit AngularJens Binfet
 
Banking portal
Banking portalBanking portal
Banking portalJoeyNbg
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenPhilipp Burgmer
 
Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4Digicomp Academy AG
 
Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Kai Donato
 
Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoOliver Lemm
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?adesso AG
 
Ivory Soa Suite
Ivory Soa SuiteIvory Soa Suite
Ivory Soa SuitePredrag61
 
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und behebenPimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und behebenDavid Schneider
 

Ähnlich wie Wieviel Client braucht das Web? (20)

Enterprise UI
Enterprise UIEnterprise UI
Enterprise UI
 
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
Android Entwicklung (App Entwickler Konferenz 2010 der Telekom)
 
Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?Angular und JEE - Wieso, weshalb, warum (und wie)?
Angular und JEE - Wieso, weshalb, warum (und wie)?
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1
 
GWT
GWTGWT
GWT
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?
 
Atlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-InfrastrukturAtlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-Infrastruktur
 
Back to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit MicroservicesBack to the Frontend – aber nun mit Microservices
Back to the Frontend – aber nun mit Microservices
 
Progressive Web Apps Presentation
Progressive Web Apps PresentationProgressive Web Apps Presentation
Progressive Web Apps Presentation
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
 
Banking portal
Banking portalBanking portal
Banking portal
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpen
 
Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4Mobile Development mit ASP.NET MVC 4
Mobile Development mit ASP.NET MVC 4
 
Web-API Design in Java
Web-API Design in JavaWeb-API Design in Java
Web-API Design in Java
 
Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.
 
Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & Co
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
 
Ivory Soa Suite
Ivory Soa SuiteIvory Soa Suite
Ivory Soa Suite
 
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und behebenPimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
Pimp My SharePoint - Performanceprobleme vorbeugen, analysieren und beheben
 

Wieviel Client braucht das Web?

  • 1. Wieviel Client braucht das Web? Enterprise UI mit JSF, Vaadin und AngularJS Java User Group Hamburg 07.12.2016 Dirk Weil, GEDOPLAN GmbH
  • 2. Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Konzeption, Realisierung von IT-Lösungen GEDOPLAN IT Training Seminare in Berlin, Bielefeld, on-site Java EE seit 1998 Vorträge, Veröffentlichungen Wieviel Client braucht das Web? 2gedoplan.de
  • 3. Ziele / Inhalt Einführung in die Anwendung / Java EE Backend Vorstellung der Frameworks Java Server Faces (JSF) Vaadin AngularJS Check Up Fazit Wieviel Client braucht das Web? 3gedoplan.de
  • 4. Einführung in die Anwendung / Java EE Backend Datenbasis: Microsoft Northwind Technische Basis: Java EE 7 Fachobjekte (Customer, Order, …): JPA DB-Zugriff (CustomerRepository, …): CDI Services (OrderService, …): EJB mit Role based Security Wieviel Client braucht das Web? 4gedoplan.de
  • 5. Einführung in die Anwendung / Java EE Backend Wieviel Client braucht das Web? 5 Browser JavaServer Faces Webservice (JAX-RS) Vaadin Services Respositories Präsentationsschicht / Schnittstellen Geschäftslogik Datenbank JavaEEServer AngularJS (Browser) Client gedoplan.de
  • 6. Java Server Faces (JSF) Model-View-Controller-Pattern Im Java-EE-Standard seit 2004 Komponentenmodell für das GUI von Web-Anwendungen Wieviel Client braucht das Web? 6gedoplan.de Application-Server Renderer Views, xhtml Browser Controller, CDI Beans HTML, JavaScript Services
  • 7. JSF - View Wieviel Client braucht das Web? 7 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:form> <h:outputLabel value="#{msg.login_name}"/> <h:inputText value="#{authenticateController.loginname}"/> <h:outputLabel value="#{msg.login_password}"/> <h:inputSecret value="#{authenticateController.password}"/> <h:commandButton action="#{authenticateController.login}" value="#{msg.login_submit}" /> </h:form> </html> gedoplan.de
  • 8. JSF - Controller Wieviel Client braucht das Web? 8 @Named @RequestScoped public class AuthenticateController { private String loginname; private Sring password; public String login() { ... return "home"; } gedoplan.de
  • 9. JSF – Vorgehensweise / Besonderheiten Model-Controller als Bindeglied zu Views CDI Beans Diverse Scopes verfügbar (Request, Session, Flow, View, …) Einbindung des Backends mittels Injektion Serverseitige View Definition Facelets (austauschbar) Bindung an Model-Controller mit EL Multipage Navigation mit zentralem Handler, wenn gewünscht Request / Rendering partiell mit AJAX ( auch SPA möglich) Wieviel Client braucht das Web? 9gedoplan.de
  • 10. JSF – Vorgehensweise / Besonderheiten Domänenobjekte können direkt genutzt werden ( DTOs unnötig) Zentrales Error Handling möglich I.d.R. zusätzliche Komponentenbibliotheken nötig Addieren Komplexität Addieren proprietäre Stile, JS, … JS im Browser möglich Nicht speziell unterstützt Wieviel Client braucht das Web? 10gedoplan.de
  • 11. Vaadin Open Source Java Framework für Rich-Internet-Applications Entwickelt von der Firma Vaadin Ltd. Aufbau der Oberflächen auf Serverseite in Java (ähnlich wie Swing) JavaScript-Engine im Browser als Thin-Client Wieviel Client braucht das Web? 11gedoplan.de Application-Server Services Views, Java Client, Browser JavaScript Engine Widgets Komponenten Daten, Java Beans Synchronisiert durch Framework (JSON)
  • 12. Vaadin - UI Wieviel Client braucht das Web? 12 @CDIUI("login") public class LoginUi extends UI { protected void init(VaadinRequest request) { TextField name = new TextField(…); PasswordField password = new PasswordField(…); Button login = new Button(…, e -> {login… }); FormLayout fieldLayout = new FormLayout(name, password, login); Panel loginPanel = new Panel(…, fieldLayout); VerticalLayout page = new VerticalLayout(); page.addComponent(loginPanel); setContent(page); } } gedoplan.de
  • 13. Vaadin – Databinding (optional) Wieviel Client braucht das Web? 13 public class LoginUi extends UI { @PropertyId("user") private TextField loginUser; @PropertyId("password") private PasswordField loginPassword; private LoginBean loginBean = new LoginBean(); protected void init(VaadinRequest request) { BeanFieldGroup<LoginBean> bfg = new BeanFieldGroup<>(LoginBean.class); bfg.buildAndBindMemberFields(this); bfg.setItemDataSource(loginBean); } } public class LoginBean { private String user; private String password; // Getter + Setter } gedoplan.de
  • 14. Vaadin – Vorgehensweise / Besonderheiten UI-Aufbau durch UI-Klassen Aggregation von Widget-Objekten URL-Mapping per Annotation / Servlet Listener-Konzept Service-Einbindung mittels Injektion Direkte Bindung an Domänenobjekte möglich (ohne DTOs) Clientseitiges Rendering auf Basis serverseitiger Präsentationsdaten Widgets werden initial in Browser (Tab) geladen Anschließend nur Aktualisierung von Struktur und Daten Wieviel Client braucht das Web? 14gedoplan.de
  • 15. Vaadin – Vorgehensweise / Besonderheiten SPA im Browser-Tab Navigation zwischen Views mit bookmarkfähigen URLs Error Handling, Converter etc. können zentral registriert werden Erweiterbarkeit über eigene Aggregationen von vorhandenen Komponenten durch Entwurf zusätzliche GWT-basierter Widgets mittels Skripting und HTML-Templates durch Komponentenbibliotheken (teilweise kommerziell) Wieviel Client braucht das Web? 15gedoplan.de
  • 16. Angular JS Open Source JavaScript-Webframework RIA - Rich Internet Application SPA – Single Page Application entwickelt von Google Wieviel Client braucht das Web? 16gedoplan.de Browser JAX-RS Services Application-Server Views, html Controller, JavaScript JSON
  • 17. AngularJS - View Wieviel Client braucht das Web? 17 <form class="form-signin"> <input type="text" ng-model="vm.username" placeholder="{{'login.username' | translate}}" /> <input type="password" ng-model="vm.password" placeholder="{{'login.password' | translate}}" /> <button ng-click="vm.login()"> {{'actions.login' | translate}} </button> </form> gedoplan.de
  • 18. Angular – Controller, Navigation Wieviel Client braucht das Web? 18 angular.module('GedoplanWebClients.login', []) .controller("login", function (userService, $translate, $state, $timeout) { var vm = this; vm.login = function () {…}; vm.logout = function () {…}; } $stateProvider .state('login', { url: '/login', templateUrl: 'components/login/login.html', controller: 'login', controllerAs: 'vm' }) gedoplan.de
  • 19. Angular – Vorgehensweise / Besonderheiten UI-Aufbau durch HTML-Dateien Verwendung von Expressions Aggregation durch Directives Service-Einbindung mittels Schnittstelle (z.B. REST) DTOs oder JSON-Mapper notwendig Clientseitiges Rendering auf Basis statischer HTML-Seiten dynamische Manipulation durch Controller-Bindings Wieviel Client braucht das Web? 19gedoplan.de
  • 20. Angular – Vorgehensweise / Besonderheiten SPA Navigation zwischen Views mit bookmarkfähigen URLs Zustandstandslos Erweiterbarkeit über eigene Aggregationen von vorhandenen Komponenten durch Angular-spezifische Komponenten durch JavaScript-Komponenten Wieviel Client braucht das Web? 20gedoplan.de
  • 21. Technologie-Mix Wieviel Client braucht das Web? 21 1 2 3 Backend GUI JSF Java EE • HTML-ähnliche Templatesprache, Facelets • CSS-Kenntnisse in aller Regel notwendig Vaadin • Java (ähnlich Swing/JavaFX) • CSS- und JavaScript-Kenntnisse nur optional und für eigene Komponenten AngularJS • tiefe Kenntnisse in JavaScript, CSS, HTML nötig gedoplan.de
  • 22. Trennung Design / Präsentationslogik Wieviel Client braucht das Web? 22 JSF • JSF-eigene Tags • Templates Vaadin • enge Verbindung durch programmatischen Ansatz • Abstraktion durch Vaadin-Designer (kostenpflichtig) AngularJS • reine HTML-Templates mit Angular Markup • Controller der View konfigurierbar • vollständige Projekt-Trennung möglich 1 2 2 gedoplan.de
  • 23. Erweiterbarkeit Wieviel Client braucht das Web? 23 JSF • eigene Composite Components • Komponenten-Frameworks (z.B. PrimeFaces) Vaadin • Komposition durch Erweiterung der Standardklassen • eigene Komponenten bspw. durch JavaScript Extensions AngularJS • beliebige JavaScript-Komponenten (z. B. Bootstrap, JQuery) 1 2 2 gedoplan.de
  • 24. Backend Integration Wieviel Client braucht das Web? 24 JSF • Controller im Backend-Prozess • Zugriff auf Services durch CDI Injection • keine externe Schnittstelle notwendig Vaadin AngularJS • Zugriff über externe Schnittstellen • Datenaustausch z.B. über JAX-RS in JSON 1 1 2 gedoplan.de
  • 25. Investitionssicherheit Wieviel Client braucht das Web? 25 JSF • Standard Java EE • Abwärtskompatibel bis Version 1.0 • Ausgenommen: Komponentenframeworks Vaadin • proprietär • bei großen Versionssprüngen keine stabile APIAngularJS 1 2 2 gedoplan.de
  • 26. Kommunikation Wieviel Client braucht das Web? 26 JSF • Format: HTML / XML • User-Interaktionen lösen Requests aus Vaadin • Format: JSON (inklusive View-Informationen) • User-Interaktionen lösen Requests aus AngularJS • Format: JSON (reine Daten) • keine Requests bei Validierung und GUI-Logik 1 2 2 gedoplan.de
  • 27. Ressourcen-Nutzung Wieviel Client braucht das Web? 27 1 2 2 gedoplan.de JSF • Rendering / View-Aufbau: Serverseitig • Request-Größe ~ HTML-Fragmente Vaadin • View-Aufbau: Server • Rendering: Clientseitig • Request-Größe ~ View-Informationen AngularJS • Rendering / „View-Aufbau“: Clientseitig • JSON Daten-Requests + eigener HTML-Template-Cache
  • 28. Build-Prozess Wieviel Client braucht das Web? 28 JSF • gleiche Build-Tools wie für das Backend • Maven, Gradle, …Vaadin AngularJS • eigenständige Build-Tools / Scripte • größere Anzahl an Möglichkeiten • NPM, Bower, Grunt, Gulp, Webpack, Browsify, … 1 1 2 gedoplan.de
  • 29. Lernkurve (on top of Java EE) Wieviel Client braucht das Web? 29 JSF • Facelets • Komponenten-Bibliotheken Vaadin • Spezifische API AngularJS • JavaScript, HTML, CSS • Build Tools 1 2 3 gedoplan.de
  • 30. UI Testing Wieviel Client braucht das Web? 30 JSF • Deployment auf Application Server notwendig • komplexes Test-Setup (z. B. Arquillian)Vaadin AngularJS • schnelles Setup dank Angular-spezifischem Test Framework • einfaches Mocken von HTTP Requests • HTTP Server reicht 1 2 2 gedoplan.de
  • 32. More https://www.slideshare.net/gedoplan/wieviel-client- braucht-das-web-69901049 Präsentation zum Download http://www.gedoplan-it-training.de Seminare in Berlin, Bielefeld, Inhouse http://www.gedoplan-it-consulting.de Reviews, Coaching, … Blog  dirk.weil@gedoplan.de @dirkweil Wieviel Client braucht das Web? 32gedoplan.de