Ich beschäftige mich in letzter Zeit etwas intensiver mit GWT. GWT selbst kommt mit einer Vielzahl brauchbarer Widgets. Diese Widgets sind vom GWT Team getestet und optimiert. Beginnt man ein GWT Projekt, wird man jedoch relativ schnell feststellen, das die Grund-Widgets relativ schnell ausgereizt sind bzw. man sich eine etwas erweiterte Funktionalität wünschen würde. Man steht vor der Entscheidung die Widgets von Hand zu erweitern oder eine der vielen Bibliotheken zu verwenden. Grundsätzlich gilt: Don’t Reinvent The Wheel, Unless You Plan on Learning More About Wheels
Welche Bibliotheken gibt es also? (siehe Stackoverflow.com)
Nun gibt es zwei grundsätzlich unterschiedliche Arten von Bibliotheken
- Sogenannte Wrapper, z.B. GWT-Ext und SmartGWT
- “Echte” GWT Bibliotheken
Meiner Meinung nach schließen sich Wrapper Bibliotheken von alleine aus. GWT kompiliert Java Code und erzeugt dabei für einzelne Browser optimiertes HTML und Javascript. Neben vollem Java IDE-Support sind das die Hauptvorteile von GWT. Da die von den Wrapper-Bibliotheken gekapselten Javascript-Bibliotheken bereits in Javascript vorliegen, kann der Compiler nichts mehr optimieren. Wenn GWTs Hauptvorteile also wegfallen, warum sollte ich aufwendig ein neues Framework lernen? Nur um anstatt in Javascript in Java zu programmieren? Für die meisten Projekte lautet die Antwort nein. Sind einige der Features einer Javascript Bibliothek derart wichtig für ein Projekt, dass man nicht darauf verzichten kann, ist man meiner Meinung besser beraten die JS Bibliothek direkt zu verwenden, ohne GWT zwischen zuschalten.
Bleibt noch die zweite Möglichkeit, die “echten” GWT Bibliotheken. Diese passen in soweit besser ins GWT Modell, als das sie auf die gleiche Art und Weise funktionieren und somit im optimalen Falle die Gründe warum man GWT verwenden möchte nicht ad absurdum führen: Javascript-Optimierung auf Performance und Browser-Kompatibilität.
Die umfangreichste GWT Bibliothek ist momentan wohl Ext GWT (auch GXT genannt), welche nicht zu verwechseln ist mit GWT Ext auch wenn die Namen zum vertauschen ähnlich sind:
Ext-GWT (formerly MyGWT) is a “pure” Java/GWT port of the well known Ext-JS JavaScript library, not to be mistaken for gwt-ext, which is a Java/GWT wrapper around Ext-JS… Still following?
In short, gwt-ext requires Ext-JS, while Ext-GWT doesn’t. Ext-GWT is from the same company that makes Ext-JS (appropriatley called Ext), while gwt-ext is an independant work. Also, since version 2.1, Ext-JS removed LGPL from its licensing options, which effectively prevents software like gwt-ext from using it, so it’s stuck with v 2.0.x.
Quelle: blog.gerardin.info
Ich habe eine Weile mit Ext-GWT gespielt, schnell fallen einem aber Nachteile auf:
- Einige Widgets rendern nicht korrekt im Hosted Mode Browser (fairer weise muss ich an dieser Stelle zugeben, dass ich mit Ext-GWT 2.0 RC-1 getestet habe, Version 1.2.4 mag sich besser verhalten). Das ist insbesondere deshalb nervig, da der GWT Compile-Vorgang recht langsam ist.
- Das First-Page-Load Volumen steigt drastisch, nicht weiter verwunderlich, aber eine Tatsache, die man im Auge behalten sollte: Braucht man nur ein einziges Widget der Bibliothek wird viel Javascript geladen, das nie ausgeführt wird.
- Nicht alle Widgets entsprechen den Performance-Ansprüchen, die man an eine RIA stellt. Die Benutzerfreundlichkeit soll verbessert und nicht verschlechtert werden!
Weitere Vor- und Nachteile von Ext-GWT kann man hier nachlesen: Why Ext-GWT MVC is broken, GWT 1.6 and GXT 2.0-M1 upgrade experience, gwt libraries (die erste Antwort ist äußerst hilfreich!), Best GWT widget library.
Zwei Bibliotheken gibt es dann doch, die den Ansprüchen genügen: Incubator und Mosaic. Beide bei weitem nicht so umfangreich wie Ext-GWT, dafür aber auch viel einfacher und gefahrloser in bestehende Projekte zu integrieren.
Zusammenfassung
- Wrapper: Ist man auf eine Großzahl der Features einer der großen Javascript Bibliotheken wie Ext JS, SmartClient oder Dojo angewiesen, sollte man sie besser direkt verwenden, als GWT zwischen zu schalten. GWT verkompliziert an dieser Stelle Integration, Entwicklung, Upgrade, Deployment, ….
- Echte GWT Bibliotheken: Ext GWT beherbergt viele gute Widgets, man erbt aber auch viele Probleme: Upgrade auf neuere Version, schwer erweiterbar, festgelegte Templates. Für ein internes Projekt, das selten aktualisiert wird mag das Ok sein, für andere Fälle nicht. Mosaic und Incubator erlauben die maßvolle Erweiterung von GWT und bringen wenige oder keine Probleme mit sich
Ich hoffe das geschriebene und die Links helfen weiter.
I'm a Software Developer, currently working at