GWT Best Practices I
()
About this ebook
Related to GWT Best Practices I
Titles in the series (100)
JavaScript auf dem Server Rating: 0 out of 5 stars0 ratingsEinstieg in Google Go Rating: 0 out of 5 stars0 ratingsJava EE Security Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenGL, OpenAL und KI Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsHTML5 für Mobile Web Rating: 0 out of 5 stars0 ratingsNutzeraspekte in Suchmaschinen: Komponenten für eine gelungene Usability-Gestaltung Rating: 0 out of 5 stars0 ratingsGeolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsAlgorithmen: Grundlagen und Implementierung Rating: 0 out of 5 stars0 ratingsNFC: Near Field Communication für Android-Entwickler Rating: 5 out of 5 stars5/5IT Wissensmanagement: Theorie und Praxis Rating: 0 out of 5 stars0 ratingsjQuery Mobile - Basics: Basics Rating: 0 out of 5 stars0 ratingsErfolgreiche Spieleentwicklung: OpenCL Rating: 0 out of 5 stars0 ratingsHTML5 Security Rating: 0 out of 5 stars0 ratingsNintex Workflow: Konzepte und Strategien für leistungsfähige SharePoint-Workflows Rating: 0 out of 5 stars0 ratingsSkalierbare Softwaresysteme: Design, Betrieb und Optimierungspotenziale Rating: 0 out of 5 stars0 ratingsJavaScript für Eclipse-Entwickler: Orion, RAP und GWT Rating: 0 out of 5 stars0 ratingsSharePoint-Entwicklung für Einsteiger Rating: 0 out of 5 stars0 ratingsQualitätssicherung mit JavaScript und PHP Rating: 0 out of 5 stars0 ratingsAmazon Web Services für .NET Entwickler Rating: 0 out of 5 stars0 ratingsMobile Business: Was Entscheider morgen wissen müssen Rating: 0 out of 5 stars0 ratingsC++: Kurzportträt einer zeitlosen Sprache Rating: 0 out of 5 stars0 ratingsJava EE 7: Ein Ausblick Rating: 0 out of 5 stars0 ratingsServiceorientierte Architektur: Anforderungen, Konzeption und Praxiserfahrungen Rating: 0 out of 5 stars0 ratingsÜberzeugende Präsentationen: Konzeption, Technik und Design Rating: 0 out of 5 stars0 ratingsTFS 2012 Versionskontrolle: Grundlagen, Check-In Policies und Branch-Modelle Rating: 0 out of 5 stars0 ratingsApache Tapestry: Einstieg in die komponentenorientierte Webentwicklung Rating: 0 out of 5 stars0 ratingsAgile Architektur mit .NET - Grundlagen und Best Practices Rating: 0 out of 5 stars0 ratingsTFS 2012 Anforderungsmanagement: Work Items und Prozessvorlagen Rating: 0 out of 5 stars0 ratingsBig Data: Technologiegrundlagen Rating: 0 out of 5 stars0 ratings
Related ebooks
Progressive Web-Apps: Offlinefähige Web-Anwendungen mit nativen Qualitäten Rating: 0 out of 5 stars0 ratingsEnterprise Java Web Services Rating: 0 out of 5 stars0 ratingsAutomatisiertes Testen: Testautomatisierung mit Geb und ScalaTest Rating: 0 out of 5 stars0 ratingsMicrosoft Azure: Cloud Entwicklung für lokale Applikationen Rating: 0 out of 5 stars0 ratingsJPA 2.1: Persistence-Features in Java EE 7 Rating: 0 out of 5 stars0 ratingsDatenbank-Tuning - Slow Queries und MySQL-Performance: Slow Queries und MySQL-Performance Rating: 0 out of 5 stars0 ratingsApps mit Azure Rating: 0 out of 5 stars0 ratingsDependency Injection in Java: Testing mit CDI-Unit und DI-Frameworks Rating: 0 out of 5 stars0 ratingsAufsetzen, Testen und Betrieb einer Android-App Rating: 0 out of 5 stars0 ratingsSpring: Vier Perspektiven auf Framework und Ökosystem Rating: 0 out of 5 stars0 ratingsForms over Data mit Knockout.js: Die freie MVVM-JavaScript-Bibliothek im Praxiseinsatz Rating: 0 out of 5 stars0 ratingsAngularJS: Testing und Best Practices Rating: 5 out of 5 stars5/5Nebenläufigkeit in Java und C++ Rating: 0 out of 5 stars0 ratingsjQuery Mobile: Unit Testing Rating: 0 out of 5 stars0 ratingsBig Data: Datenverarbeitung basierend auf MOM und SQL Rating: 0 out of 5 stars0 ratingsiOS Essentials: Frameworks, Tools und Twitter API Rating: 0 out of 5 stars0 ratingsMemory Leaks in Java Rating: 0 out of 5 stars0 ratingsJava 7: Fork-Join-Framework und Phaser Rating: 0 out of 5 stars0 ratingsSharePoint Kompendium - Bd. 16 Rating: 0 out of 5 stars0 ratingsMQL: Eine hierarchische Abfragesprache mit TypeScript erstellen Rating: 0 out of 5 stars0 ratingsElasticsearch: Clientnutzung, Datenvisualisierung und Apache Lucene Rating: 0 out of 5 stars0 ratingsApache Mahout: Empfehlen, clustern, klassifizieren Rating: 0 out of 5 stars0 ratingsTestwissen für Java-Entwickler Rating: 0 out of 5 stars0 ratingsDer App-Entwicklungszyklus Rating: 0 out of 5 stars0 ratingsGeolocation mit PHP: Foursquare-API, Google Places & Qype Rating: 0 out of 5 stars0 ratingsSoftwarestabilität in der Industrie Rating: 0 out of 5 stars0 ratingsSoftware entwickeln mit C#, WPF und dem MVVM-Konzept Rating: 0 out of 5 stars0 ratingsOSGi-Entwicklung Rating: 0 out of 5 stars0 ratingsApplication Insights Rating: 0 out of 5 stars0 ratingsSingle-Page-Web-Apps: JavaScript im Einsatz: Webseiten erstellen mit AngularJS, Meteor und jQuery Mobile Rating: 0 out of 5 stars0 ratings
Internet & Web For You
Wir machen dieses Social Media Rating: 0 out of 5 stars0 ratingsProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Rating: 0 out of 5 stars0 ratingsDas Facebook-Marketing-Buch Rating: 4 out of 5 stars4/5Einstieg in WordPress Rating: 0 out of 5 stars0 ratingsEinführung ins Darknet: Darknet ABC Rating: 0 out of 5 stars0 ratingsHTML5 & CSS3 (Prags) Rating: 0 out of 5 stars0 ratingsSchnelleinstieg WordPress SEO: Einstellungen, Keywords, Plug-ins und Strategien für optimales SEO Rating: 0 out of 5 stars0 ratingsDer Content Faktor: Schreiben Sie Texte, die gefunden und gelesen werden Rating: 0 out of 5 stars0 ratingsShopware 6 Handbuch Rating: 0 out of 5 stars0 ratings30 Minuten Metaverse Rating: 0 out of 5 stars0 ratingsWas kommt. Was geht. Was bleibt.: Kluge Texte über die wichtigsten Fragen unserer Zeit Rating: 0 out of 5 stars0 ratingsJavaScript kinderleicht!: Einfach programmieren lernen mit der Sprache des Web Rating: 0 out of 5 stars0 ratingsAndroid Security: Von Fake-Apps, Trojanern und Spy Phones Rating: 0 out of 5 stars0 ratingsJoomla 4.0 logisch!: Einfache Webseitenerstellung ohne Programmierkenntnisse Rating: 0 out of 5 stars0 ratingsStarke Webtexte. So texten Sie Ihre Website selbst Rating: 0 out of 5 stars0 ratingsUX-Missverständnisse: Was sich User wirklich wünschen Rating: 0 out of 5 stars0 ratingsSo findest du den Einstieg in WordPress: Die technischen Grundlagen zu Installation, Konfiguration, Optimierung, Sicherheit, SEO Rating: 0 out of 5 stars0 ratingsGoogle Platz 1: Lernen Sie von einem der führenden Suchmaschinenoptimierer Deutschlands Rating: 0 out of 5 stars0 ratingsDas kleine Hypnose Einmaleins - Alles was Sie schon immer über die Hypnose wissen wollten von Ewald Pipper vom Hypnoseinstitut Rating: 0 out of 5 stars0 ratingsWordPress-Themes entwickeln: HTML5, CSS3, JavaScript und PHP: Praxiswissen und Quellcodes zum Entwurf von WordPress-Themes Rating: 0 out of 5 stars0 ratingsIch Hacker – Du Script-Kiddy: Hacking und Cracking Rating: 0 out of 5 stars0 ratingsPR im Social Web: Das Handbuch für Kommunikationsprofis Rating: 0 out of 5 stars0 ratingsSEO Crashkurs - 10 Schritte zum Erfolg auf Google Rating: 0 out of 5 stars0 ratingsopenHAB: Automatisiertes Heim - Teil 1 Rating: 4 out of 5 stars4/5PHP für WordPress: Themes und Templates selbst entwickeln Rating: 0 out of 5 stars0 ratingsEinfach Verschlüsseln Rating: 0 out of 5 stars0 ratingsBug Bounty Hunting mit Kali-Linux oder Parrot Security OS: Hacking als Hautberuf oder Nebenjob Rating: 3 out of 5 stars3/5Online-Marketing: 10 Schritte zur finanziellen Freiheit Rating: 0 out of 5 stars0 ratingsNext Level JavaScript: Schlagworte Rating: 0 out of 5 stars0 ratings
Reviews for GWT Best Practices I
0 ratings0 reviews
Book preview
GWT Best Practices I - Elisabeth Blümelhuber
GmbH
1 Asynchrone Requests und Race Conditions in GWT
Für die Kommunikation zwischen Server und Client verwendet Google Web Toolkit (GWT) asynchrone Requests [1]. Hierbei sendet der Client eine Anfrage an den Server und erhält die Antwort zeitlich versetzt, wodurch für den Nutzer der Webseite ein Weiterarbeiten ohne Blockieren des Workflows möglich ist – ein Muss für die heutigen Erwartungen an Usability.
Bei Applikationen mit größeren, komplexen User Interfaces kann dies jedoch zu Problemen in Form von Race Conditions führen. Um damit in Hinblick auf Codequalität, korrekter Funktionalität und konkreter Situation sinnvoll umzugehen, gibt es mehrere Alternativen.
1.1 Ausgangssituation
Die Spezifikation für unser Beispiel: Eine zu erstellende Webseite beinhaltet eine Listbox, die mit Werten aus einer Datenbank befüllt werden soll, sowie einen Button, der das Hinzufügen von neuen Werten ermöglichen soll. Dieser Button soll nicht angezeigt werden, wenn sich in der Datenbank bereits fünf oder mehr Werte befinden. Außerdem soll der Button unabhängig von der Anzahl der Werte in der Listbox auch dann nicht angezeigt werden, wenn eine zusätzliche Datenbankanfrage über die Rechte des Benutzers negativ ausfällt. Sichtbar ist der Button daher lediglich dann, wenn sich sowohl weniger als fünf Werte in der Listbox befinden als auch die notwendigen Rechte vorhanden sind.
In der zu unserem Beispiel zugehörigen Serviceklasse auf der Serverseite gibt es zwei Methoden: fillListbox() und hasAddRights(). Dieses reduzierte Beispiel soll die grundsätzliche Problematik zeigen, dass in einem komplexen UI einander widersprechende Wünsche betreffend der Behandlung einzelner Kontrollelemente existieren. Eine gute Diskussion zu diesem Thema findet sich unter [2].
1.2 Ein erster Versuch
Die erste, naive Umsetzung der gewünschten Funktionalität auf Clientseite zeigt Listing 1.1. Auf den ersten Blick kann diese Implementierung für einen nicht an asynchrone Requests gewöhnten Entwickler die gewünschte Funktionalität liefern. Tatsächlich erhält der Client die Ergebnisse der beiden Abfragen nur zufällig in der Reihenfolge, die zur korrekten Anzeige des UI führt. Unter Umständen kehrt nämlich der zweite Request zuerst zurück, sodass die Variable tooManyValues (noch) auf true steht. Obwohl das der Fall sein sollte, wird der Button dann auch bei entsprechenden Rechten nicht angezeigt.
Wie bei jedem Auftreten von Race Conditions ist dabei besonders unangenehm, dass das Verhalten nicht deterministisch ist. Unter Umständen wird das Fehlverhalten im Testbetrieb gar nicht bemerkt, z. B.