SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Downloaden Sie, um offline zu lesen
Christian Kaltepoth | ingenit GmbH & Co. KG
JSF vs. GWT? JSF und GWT!
JavaServer Faces
• „Bodenständige Technologie“
• Formularbasierte Anwendungen
• Data Lifecycle
– z.B. Konvertierung + Validierung
• Mächtige Komponenten
• Support für AJAX, HTML5, etc.
Aber...
• Server als zentrale Instanz
– Rendering, Validierung, etc.
– Viel Kommunikation mit dem Server
• PPR reicht oft nicht aus
• State, State, State, ...
– Muss synchron gehalten werden
– Ohne langlebige Scopes geht nichts
Ein Blick über den
Tellerrand...
GWT
[ i t]ɡʉˑ ˑ
GWT
• „Development toolkit for building [...]
complex browser-based applications“
• Veröffentlicht 2006
• Geleitet von:
– 2006-2012: Google
– Seit 2012: Steering Committee
GWT Compiler
Was ist GWT?
Warum GWT statt JavaScript?
• Java als etablierte Sprache
• Gewohntes Tooling
– IDE, Build Tools, Testing, ....
• Starke Typisierung
– Compiler Checks, Static Code Analysis, ...
• GWT kümmert sich um:
– DOM Garbage Collection
– Inkompatibilitäten zwischen Browsern
Server Client
Shared Code!
GWT
• GWT Compiler
• Client Bundles
• Deferred Binding
• RequestBuilder
• I18N
• Logging
• UI Components
• RequestFactory
• Testing
• GWT-RPC
• UI Binder
• Editors
• JSNI
• Code Splitting
GWT
• GWT Compiler
• Client Bundles
• Deferred Binding
• RequestBuilder
• I18N
• Logging
• UI Components
• RequestFactory
• Testing
• GWT-RPC
• UI Binder
• Editors
• JSNI
• Code Splitting
Ist GWT überhaupt noch
„State of the Art“?
Google Sheets
Google Shopping Express
Evernote
„Hello World!“
mit GWT
DEMO
Kann man JSF und GWT
kombinieren?
Ja, das geht! ☺
JSF & GWT
• Das Ziel:
– Clientseitige Funktionalität
– Mehr Interaktivität
– User Experience
• Die Herausforderung:
– Interaktion mit JSF Komponenten
– JSF Lifecycle nicht beeinflussen
JSF + GWT
Eine Beispielanwendung
Was ist das BMS?
• Bäckerei Verwaltungssoftware
• JEE7 Anwendung mit JSF 2.2
• Artikelmanagement
– Stammdaten, Kosten, Preise, ...
• Rezeptverwaltung
• Berechnung der Produktionskosten
Sprint 23: Einkaufspreise
Featurewunsch
„Graphische Aufbereitung
der Auswirkungen
von Einkaufspreisveränderung
auf die Herstellungskosten
der betroffenen Artikel.“
Probleme
• Kostenberechnung im Backend!
• JavaScript Komponente sinnvoll!
– Interaktivität (Tooltips, etc.)
• Berechnung auf dem Server?
– RTT problematisch!
• Neuimplementierung der
Berechnungslogik in JavaScript?
Lösungsansatz
• Implementierung mittels GWT
– Eingaben aus JSF Komponenten auf dem
Client auslesen
– Berechnungslogik als Shared Code
– Nutzung von JavaScript Chart Library für
die Grafik (d3.js)
BMS DEMO
Was brauchen wir?
• Interaktion mit JSF Komponenten
➡ GWT Components
• Integration der JavaScript Library
➡ JSNI
• Kommunikation mit Server
➡ Remoting
GWT Components
GWT Components
• Realisiert als „einfache“ Klassen
• Unterklassen von Widget
• Tiefe Vererbungshierarchie
• Verschiedene Typen:
– Widgets / Panels / Composites
• Component > DOM Element + Kinder
Klassenhierarchie
Quelle: Book of Vaadin - https://vaadin.com/book/
Beispiel: PasswordTextBox
GWT Components
• Basic:
– Button
– RadioButton
– Checkbox
– Textbox
– Textarea
– Listbox
– ...
• Advanced:
– DatePicker
– MenuBar
– Tree
– SuggestBox
– CellTable
– Dialog
– ...
Komponentenbaum
Label label = new Label("Name:");
TextBox textbox = new TextBox();
textbox.setText("Christian");
FlowPanel panel = new FlowPanel();
panel.add(label);
panel.add(textbox);
RootPanel.get().add(panel);
Eigene Komponenten
<input type="input" placeholder="Enter email" />
Eigene Komponenten
public class Html5TextBox extends TextBox {
public void setPlaceholder(String value) {
getElement().setPropertyString("placeholder", value);
}
public String getPlaceholder() {
return getElement().getPropertyString("placeholder");
}
}
Für uns interessant...
<input id="foobar" type="text" />
Element element =
Document.get().getElementById("foobar");
TextBox textBox = TextBox.wrap(element);
textBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
// ...
}
});
Was heißt das?
• Zugriff auf DOM Element der JSF
Komponenten ist einfach möglich
• Erlaubt uns...
– ... aktuelle Werte zu lesen
– ... den Zustand zu verändern
– ... Listener zu registrieren
JSNI
(JavaScript Native Interface)
„We think of JSNI as the
web equivalent of inline
assembly code.“
Quelle: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
JSNI Beispiel
public void someMethod() {
sayHello();
}
private native void sayHello() /*-{
alert('Hello World!');
}-*/;
Beispiel: jQuery Integration
public void someMethod() {
fadeOut("foobar");
}
private native void fadeOut(String className) /*-{
$wnd.jQuery('.' + className).hide(800);
}-*/;
Overlay Types
public native <????????> getKonferenz() /*-{
var konferenz = {
name : 'JAX',
jahr : 2014
};
return konferenz;
}-*/;
Overlay Types
public class Konferenz extends JavaScriptObject {
protected Konferenz() {}
public final native String getName() /*-{
return this.name;
}-*/;
public final native int getJahr() /*-{
return this.jahr;
}-*/;
}
Overlay Types
public native Konferenz getKonferenz() /*-{
// ...
}-*/;
public void someMethod() {
Konferenz konferenz = getKonferenz();
Window.alert("Hello " + konferenz.getName());
}
Was heißt das?
• Einbindung von JavaScript
Komponenten problemlos möglich
• Overlay Types erlauben:
– Zugriff auf JavaScript Objekte
– „Parsen“ von JSON Dokumenten
Remoting
Optionen für Remoting
• Standard GWT
– GWT RPC
– RequestBuilder
– ...
• 3rd Party Bibliotheken
– RestyGWT
– ...
GWT RPC
• RPC Framework auf Basis von Servlets
• Pro:
– Standard GWT
– Geteilte Modellobjekte
• Contra:
– Proprietäres Datenformat (kein JSON)
– Relativ viele Klassen
– Performance
RequestBuilder
• Für GWT optimierter HTTP Client
• Pro:
– Standard GWT
– Nutzung von Standard JSON APIs
• Contra:
– Benötigt Overlay Types
– Manuelles Erstellen der URL
JAX-RS Resource
@Path("/")
public class ZutatenResource {
@GET
@Path("/zutat/{name}")
@Produces("application/json")
public Zutat getByName(
@PathParam("name") String name) {
// ...
}
}
JAX-RS Resource
RestyGWT Client
public interface ZutatenClient extends
RestService {
@GET
@Path("/zutat/{name}")
public void getByName(
@PathParam("name") String name,
MethodCallback<Zutat> callback);
}
RestyGWT Client
ZutatenClient client = GWT.create(ZutatenClient.class);
client.getArtikel("Zucker", new MethodCallback<Zutat>() {
@Override
public void onSuccess(Method method, Zutat response) {
// ...
}
@Override
public void onFailure(Method method, Throwable e) {
// ...
}
});
Zusammenfassung
GWT
RPC
Request
Builder
Resty
GWT
Standard GWT + + -
Shared Model Classes + - +
JSON via JAX-RS - + +
Was heißt das?
• Kommunikation mit dem Server auf
verschiedene Arten möglich
• Wir verwenden RestyGWT:
– Nutzung von JAX-RS
– Modellobjekte als Shared Code
• Funktioniert auch mit JPA Entitäten!
– Stark typisierte Client API
Time for...
Source Code!
Fazit
• JSF & GWT lassen sich kombinieren
• Keine „Lösung für Alles“
• Kann sinnvoll sein, wenn...
– geteilter Code benötigt wird
– bestehende JSF Anwendungen mehr
„Interaktivität“ benötigen
– Typensicherheit gewünscht wird
Vielen Dank für die
Aufmerksamkeit!
https://github.com/chkal/jax14-jsf-gwt
Christian Kaltepoth
kaltepoth@ingenit.com
@chkal

Weitere ähnliche Inhalte

Was ist angesagt?

Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der PraxisTobias Kraft
 
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.David Jardin
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEEBenjamin Schmid
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresMatthias Jauernig
 
Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Tobias Kraft
 
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
 
Informatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und GrailsInformatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und Grailsschmichri
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzeRalf Lütke
 
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Christian Janz
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerSandro Sonntag
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagHendrik Lösch
 
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
 
DB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBaseDB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBasegedoplan
 
Präsentation webservices
Präsentation webservicesPräsentation webservices
Präsentation webservicesxxtesaxx
 
Good by Server... Hello Client!
Good by Server... Hello Client!Good by Server... Hello Client!
Good by Server... Hello Client!Sandro Sonntag
 

Was ist angesagt? (20)

Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
 
MVP mit dem Google Web Toolkit
MVP mit dem Google Web ToolkitMVP mit dem Google Web Toolkit
MVP mit dem Google Web Toolkit
 
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
 
GWT: Eintauchen in MVP und Internationalisierung
GWT: Eintauchen in MVP und InternationalisierungGWT: Eintauchen in MVP und Internationalisierung
GWT: Eintauchen in MVP und Internationalisierung
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 
Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?
 
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?
 
Informatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und GrailsInformatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und Grails
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-Ansätze
 
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
Building Enterprise Applications with AngularJS (GDG DevFest Karlsruhe 2014)
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM Server
 
Workshop Vue js
Workshop Vue jsWorkshop Vue js
Workshop Vue js
 
WPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF RundumschlagWPF Dos n Don'ts - der WPF Rundumschlag
WPF Dos n Don'ts - der WPF Rundumschlag
 
Webpack
WebpackWebpack
Webpack
 
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
 
DB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBaseDB-Schema-Evolution mit LiquiBase
DB-Schema-Evolution mit LiquiBase
 
Präsentation webservices
Präsentation webservicesPräsentation webservices
Präsentation webservices
 
Good by Server... Hello Client!
Good by Server... Hello Client!Good by Server... Hello Client!
Good by Server... Hello Client!
 
Web Components
Web ComponentsWeb Components
Web Components
 

Andere mochten auch (16)

Staples - Green Office
Staples - Green OfficeStaples - Green Office
Staples - Green Office
 
Pessoasfamosasberhmteleutefamouspeople
PessoasfamosasberhmteleutefamouspeoplePessoasfamosasberhmteleutefamouspeople
Pessoasfamosasberhmteleutefamouspeople
 
Gorilla 01 2013 low
Gorilla 01 2013 lowGorilla 01 2013 low
Gorilla 01 2013 low
 
Architetkurbuero_Murgel Grundrisse.pdf
Architetkurbuero_Murgel Grundrisse.pdfArchitetkurbuero_Murgel Grundrisse.pdf
Architetkurbuero_Murgel Grundrisse.pdf
 
The simpsons family
The simpsons familyThe simpsons family
The simpsons family
 
USP-D Gruppencoaching mit Methodenmix
USP-D Gruppencoaching mit MethodenmixUSP-D Gruppencoaching mit Methodenmix
USP-D Gruppencoaching mit Methodenmix
 
954.pdf
954.pdf954.pdf
954.pdf
 
Success Story "Agile Entwicklung im Onsite Outsourcing"
Success Story "Agile Entwicklung im Onsite Outsourcing"Success Story "Agile Entwicklung im Onsite Outsourcing"
Success Story "Agile Entwicklung im Onsite Outsourcing"
 
DUMAUG_FREEDOM OF EXPRESSION
DUMAUG_FREEDOM OF EXPRESSIONDUMAUG_FREEDOM OF EXPRESSION
DUMAUG_FREEDOM OF EXPRESSION
 
PI MB Bank 25 Jahre.pdf
PI MB Bank 25 Jahre.pdfPI MB Bank 25 Jahre.pdf
PI MB Bank 25 Jahre.pdf
 
Besucher mögen Service
Besucher mögen ServiceBesucher mögen Service
Besucher mögen Service
 
Schnäppchenurlaub Hurghada Ägypten
Schnäppchenurlaub Hurghada ÄgyptenSchnäppchenurlaub Hurghada Ägypten
Schnäppchenurlaub Hurghada Ägypten
 
USP-D Belastungen von Führungskräften
USP-D Belastungen von FührungskräftenUSP-D Belastungen von Führungskräften
USP-D Belastungen von Führungskräften
 
Einführung Open Science
Einführung Open ScienceEinführung Open Science
Einführung Open Science
 
Bewerb01_EYCUP_Opening.pdf
Bewerb01_EYCUP_Opening.pdfBewerb01_EYCUP_Opening.pdf
Bewerb01_EYCUP_Opening.pdf
 
Ulrich kievernagel die redaktion.de
Ulrich kievernagel die redaktion.deUlrich kievernagel die redaktion.de
Ulrich kievernagel die redaktion.de
 

Ähnlich wie JSF vs. GWT? JSF und GWT!

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
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAsQAware GmbH
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Kooperative Angebote von GBV und GDZ im Bereich Digitalisierung
Kooperative Angebote von GBV und GDZ im Bereich DigitalisierungKooperative Angebote von GBV und GDZ im Bereich Digitalisierung
Kooperative Angebote von GBV und GDZ im Bereich DigitalisierungRalf Stockmann
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...OPEN KNOWLEDGE GmbH
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerGregor Biswanger
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit AngularJens Binfet
 
Collaboration Days 2011 - Damit die Tester schneller ran können.
Collaboration Days 2011 - Damit die Tester schneller ran können.Collaboration Days 2011 - Damit die Tester schneller ran können.
Collaboration Days 2011 - Damit die Tester schneller ran können.David Schneider
 
Implementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRImplementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRAlexander Hundt
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Daniel Havlik
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
 
Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)Ralf Stockmann
 
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
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzKai Donato
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web ToolkitTorben Brodt
 
Atlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-InfrastrukturAtlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-InfrastrukturGeorg Schmidl
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBRalf Eggert
 

Ähnlich wie JSF vs. GWT? JSF und GWT! (20)

GWT
GWTGWT
GWT
 
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
 
TDD für Testmuffel
TDD für TestmuffelTDD für Testmuffel
TDD für Testmuffel
 
Was kommt nach den SPAs
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Kooperative Angebote von GBV und GDZ im Bereich Digitalisierung
Kooperative Angebote von GBV und GDZ im Bereich DigitalisierungKooperative Angebote von GBV und GDZ im Bereich Digitalisierung
Kooperative Angebote von GBV und GDZ im Bereich Digitalisierung
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
 
Collaboration Days 2011 - Damit die Tester schneller ran können.
Collaboration Days 2011 - Damit die Tester schneller ran können.Collaboration Days 2011 - Damit die Tester schneller ran können.
Collaboration Days 2011 - Damit die Tester schneller ran können.
 
Implementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBRImplementierung der Knowledge Engineering Workbench in myCBR
Implementierung der Knowledge Engineering Workbench in myCBR
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)Fit für die digitale Bibliothek? (2007)
Fit für die digitale Bibliothek? (2007)
 
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?
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
imatics FormEngine
imatics FormEngineimatics FormEngine
imatics FormEngine
 
Atlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-InfrastrukturAtlassian Confluence als Software-Infrastruktur
Atlassian Confluence als Software-Infrastruktur
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDB
 

Mehr von Christian Kaltepoth

TypeScript - das bessere JavaScript!?
TypeScript - das bessere JavaScript!?TypeScript - das bessere JavaScript!?
TypeScript - das bessere JavaScript!?Christian Kaltepoth
 
MVC 1.0 - Das neue Webframework in Java EE 8
MVC 1.0 - Das neue Webframework in Java EE 8MVC 1.0 - Das neue Webframework in Java EE 8
MVC 1.0 - Das neue Webframework in Java EE 8Christian Kaltepoth
 
Beyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in RewriteBeyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in RewriteChristian Kaltepoth
 
Beyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in RewriteBeyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in RewriteChristian Kaltepoth
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFChristian Kaltepoth
 

Mehr von Christian Kaltepoth (6)

TypeScript - das bessere JavaScript!?
TypeScript - das bessere JavaScript!?TypeScript - das bessere JavaScript!?
TypeScript - das bessere JavaScript!?
 
JavaScript im Jahr 2016
JavaScript im Jahr 2016JavaScript im Jahr 2016
JavaScript im Jahr 2016
 
MVC 1.0 - Das neue Webframework in Java EE 8
MVC 1.0 - Das neue Webframework in Java EE 8MVC 1.0 - Das neue Webframework in Java EE 8
MVC 1.0 - Das neue Webframework in Java EE 8
 
Beyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in RewriteBeyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in Rewrite
 
Beyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in RewriteBeyond PrettyFaces - Einführung in Rewrite
Beyond PrettyFaces - Einführung in Rewrite
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSF
 

JSF vs. GWT? JSF und GWT!

  • 1. Christian Kaltepoth | ingenit GmbH & Co. KG JSF vs. GWT? JSF und GWT!
  • 2.
  • 3.
  • 4. JavaServer Faces • „Bodenständige Technologie“ • Formularbasierte Anwendungen • Data Lifecycle – z.B. Konvertierung + Validierung • Mächtige Komponenten • Support für AJAX, HTML5, etc.
  • 5. Aber... • Server als zentrale Instanz – Rendering, Validierung, etc. – Viel Kommunikation mit dem Server • PPR reicht oft nicht aus • State, State, State, ... – Muss synchron gehalten werden – Ohne langlebige Scopes geht nichts
  • 6. Ein Blick über den Tellerrand...
  • 8. GWT • „Development toolkit for building [...] complex browser-based applications“ • Veröffentlicht 2006 • Geleitet von: – 2006-2012: Google – Seit 2012: Steering Committee
  • 10. Warum GWT statt JavaScript? • Java als etablierte Sprache • Gewohntes Tooling – IDE, Build Tools, Testing, .... • Starke Typisierung – Compiler Checks, Static Code Analysis, ... • GWT kümmert sich um: – DOM Garbage Collection – Inkompatibilitäten zwischen Browsern
  • 12. GWT • GWT Compiler • Client Bundles • Deferred Binding • RequestBuilder • I18N • Logging • UI Components • RequestFactory • Testing • GWT-RPC • UI Binder • Editors • JSNI • Code Splitting
  • 13. GWT • GWT Compiler • Client Bundles • Deferred Binding • RequestBuilder • I18N • Logging • UI Components • RequestFactory • Testing • GWT-RPC • UI Binder • Editors • JSNI • Code Splitting
  • 14. Ist GWT überhaupt noch „State of the Art“?
  • 19. Kann man JSF und GWT kombinieren? Ja, das geht! ☺
  • 20. JSF & GWT • Das Ziel: – Clientseitige Funktionalität – Mehr Interaktivität – User Experience • Die Herausforderung: – Interaktion mit JSF Komponenten – JSF Lifecycle nicht beeinflussen
  • 21. JSF + GWT Eine Beispielanwendung
  • 22.
  • 23. Was ist das BMS? • Bäckerei Verwaltungssoftware • JEE7 Anwendung mit JSF 2.2 • Artikelmanagement – Stammdaten, Kosten, Preise, ... • Rezeptverwaltung • Berechnung der Produktionskosten
  • 25. Featurewunsch „Graphische Aufbereitung der Auswirkungen von Einkaufspreisveränderung auf die Herstellungskosten der betroffenen Artikel.“
  • 26. Probleme • Kostenberechnung im Backend! • JavaScript Komponente sinnvoll! – Interaktivität (Tooltips, etc.) • Berechnung auf dem Server? – RTT problematisch! • Neuimplementierung der Berechnungslogik in JavaScript?
  • 27. Lösungsansatz • Implementierung mittels GWT – Eingaben aus JSF Komponenten auf dem Client auslesen – Berechnungslogik als Shared Code – Nutzung von JavaScript Chart Library für die Grafik (d3.js)
  • 29. Was brauchen wir? • Interaktion mit JSF Komponenten ➡ GWT Components • Integration der JavaScript Library ➡ JSNI • Kommunikation mit Server ➡ Remoting
  • 31. GWT Components • Realisiert als „einfache“ Klassen • Unterklassen von Widget • Tiefe Vererbungshierarchie • Verschiedene Typen: – Widgets / Panels / Composites • Component > DOM Element + Kinder
  • 32. Klassenhierarchie Quelle: Book of Vaadin - https://vaadin.com/book/
  • 34. GWT Components • Basic: – Button – RadioButton – Checkbox – Textbox – Textarea – Listbox – ... • Advanced: – DatePicker – MenuBar – Tree – SuggestBox – CellTable – Dialog – ...
  • 35. Komponentenbaum Label label = new Label("Name:"); TextBox textbox = new TextBox(); textbox.setText("Christian"); FlowPanel panel = new FlowPanel(); panel.add(label); panel.add(textbox); RootPanel.get().add(panel);
  • 36. Eigene Komponenten <input type="input" placeholder="Enter email" />
  • 37. Eigene Komponenten public class Html5TextBox extends TextBox { public void setPlaceholder(String value) { getElement().setPropertyString("placeholder", value); } public String getPlaceholder() { return getElement().getPropertyString("placeholder"); } }
  • 38. Für uns interessant... <input id="foobar" type="text" /> Element element = Document.get().getElementById("foobar"); TextBox textBox = TextBox.wrap(element); textBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { // ... } });
  • 39. Was heißt das? • Zugriff auf DOM Element der JSF Komponenten ist einfach möglich • Erlaubt uns... – ... aktuelle Werte zu lesen – ... den Zustand zu verändern – ... Listener zu registrieren
  • 41. „We think of JSNI as the web equivalent of inline assembly code.“ Quelle: http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
  • 42. JSNI Beispiel public void someMethod() { sayHello(); } private native void sayHello() /*-{ alert('Hello World!'); }-*/;
  • 43. Beispiel: jQuery Integration public void someMethod() { fadeOut("foobar"); } private native void fadeOut(String className) /*-{ $wnd.jQuery('.' + className).hide(800); }-*/;
  • 44. Overlay Types public native <????????> getKonferenz() /*-{ var konferenz = { name : 'JAX', jahr : 2014 }; return konferenz; }-*/;
  • 45. Overlay Types public class Konferenz extends JavaScriptObject { protected Konferenz() {} public final native String getName() /*-{ return this.name; }-*/; public final native int getJahr() /*-{ return this.jahr; }-*/; }
  • 46. Overlay Types public native Konferenz getKonferenz() /*-{ // ... }-*/; public void someMethod() { Konferenz konferenz = getKonferenz(); Window.alert("Hello " + konferenz.getName()); }
  • 47. Was heißt das? • Einbindung von JavaScript Komponenten problemlos möglich • Overlay Types erlauben: – Zugriff auf JavaScript Objekte – „Parsen“ von JSON Dokumenten
  • 49. Optionen für Remoting • Standard GWT – GWT RPC – RequestBuilder – ... • 3rd Party Bibliotheken – RestyGWT – ...
  • 50. GWT RPC • RPC Framework auf Basis von Servlets • Pro: – Standard GWT – Geteilte Modellobjekte • Contra: – Proprietäres Datenformat (kein JSON) – Relativ viele Klassen – Performance
  • 51. RequestBuilder • Für GWT optimierter HTTP Client • Pro: – Standard GWT – Nutzung von Standard JSON APIs • Contra: – Benötigt Overlay Types – Manuelles Erstellen der URL
  • 52.
  • 53. JAX-RS Resource @Path("/") public class ZutatenResource { @GET @Path("/zutat/{name}") @Produces("application/json") public Zutat getByName( @PathParam("name") String name) { // ... } }
  • 55. RestyGWT Client public interface ZutatenClient extends RestService { @GET @Path("/zutat/{name}") public void getByName( @PathParam("name") String name, MethodCallback<Zutat> callback); }
  • 56. RestyGWT Client ZutatenClient client = GWT.create(ZutatenClient.class); client.getArtikel("Zucker", new MethodCallback<Zutat>() { @Override public void onSuccess(Method method, Zutat response) { // ... } @Override public void onFailure(Method method, Throwable e) { // ... } });
  • 57. Zusammenfassung GWT RPC Request Builder Resty GWT Standard GWT + + - Shared Model Classes + - + JSON via JAX-RS - + +
  • 58. Was heißt das? • Kommunikation mit dem Server auf verschiedene Arten möglich • Wir verwenden RestyGWT: – Nutzung von JAX-RS – Modellobjekte als Shared Code • Funktioniert auch mit JPA Entitäten! – Stark typisierte Client API
  • 60. Fazit • JSF & GWT lassen sich kombinieren • Keine „Lösung für Alles“ • Kann sinnvoll sein, wenn... – geteilter Code benötigt wird – bestehende JSF Anwendungen mehr „Interaktivität“ benötigen – Typensicherheit gewünscht wird
  • 61.
  • 62. Vielen Dank für die Aufmerksamkeit! https://github.com/chkal/jax14-jsf-gwt Christian Kaltepoth kaltepoth@ingenit.com @chkal