Gah! Again! People not explaining what something is on the landing page!
> GWT is used by many products at Google, including Google AdWords and Google Wallet. It's open source, completely free, and used by thousands of enthusiastic developers around the world.
Any amount of things fit that description. Beer? Air? Clicking "Learn about GWT" gets you this:
> GWT is a development toolkit for building and optimizing complex browser-based applications.
That's all it takes! Can we please start seeing these kinds of descriptions on landing pages. You're not selling a clothing brand, you are selling a toolkit to developers: I care first and foremost what the thing does, not how fashionable it is.
Not even that is enough. My train of thought was: "This is the Java thing, right?" But I wasn't sure, and it's not mentioned anywhere in the opening paragraph of that page either. Java is not mentioned until "The GWT SDK contains the Java API libraries, compiler, and development server."
When I see a landing page like this, I feel that this is their filter. If you are interested in knowing more, you will seek the answers. Otherwise, you will move on to the next HN post...
The ones that seek to know more are the ones they want to engage.
Grammar question from this non-native English speaker: does it sound right to say "you can quickly develop performance AJAX applications"? Wouldn't you say something like "high-performance AJAX applications" or "highly performant AJAX applications" (or just "performant AJAX applications")? It seems to be missing something.
Been using GWT for almost a decade. It makes it easy to develop and maintain enormous and complex web applications, which would otherwise be difficult if you had to rely only on JavaScript (both the language and the toolchain).
Being able to write the entire application, from the client and the domain model on down to the backend, in the same language, re-using classes across the entire application,
is a big advantage.
In addition, being a very mature toolkit by now, GWT has A LOT of features to make life easier. Transparent RPC/serialization, code obfuscation/deobfuscation, IDE integrated debugging, i18n, resource bundling, code splitting, JavaScript interoperability, and a lot of other stuff.
Current project: Real-time multiplayer GTA-style game based on HTML5 canvas:
> * GWT has A LOT of features ... and a lot of other stuff.*
Yep, that's the problem. I had to learn GWT for a project last year and I don't share your enthusiasm. The learning curve is steep, integration with "the rest" of a Java EE application messy (but doable) and you still need a CSS expert. GWT is now a 'grown' framework. Many concepts have changed during the years and therefore many previous recommendations are obsolete nowadays. Documentation is meager. After a while I spent most of the time searching for the right code snippets on Stack Overflow.
I've never used GWT, but it looks a lot like ASP.NET (all the button declarations in code, heavy page lifecycle in code, etc.). Can anyone with ASP.NET knowledge comment on that? ASP.NET has many problems, there are valid reasons why most developers are moving towards ASP.NET MVC so I wonder what is the place for GWT in modern web dev.
First difference is that ASP.NET is running on the server side. GWT is fully compiled to JavaScript and runs in browser. The server doesn't even need to be Java, can be even plain web server without server side code. With GWT you typically develop one-page web applications.
As of doing everything in code - not necessary. As of now GWT has UiBinder - it is a kind of template or DOM + widgets, where you then bind code to it. But in upcoming 3.0 it will use web components standard (http://www.w3.org/TR/components-intro/)
Yes, seriously (at least that's what I heard people at Google calling it). How many different ways could you pronounce "gwit"? (If you really don't get it, it's like "quit" but with a voiced consonant at the beginning).
2. automatic updates to the client's view of the database
And also:
3. automatic optimal re-execution of javascript code whenever something changes in the input (e.g., the database). Note the word "optimal", e.g., no glitches, and no (or minimal) unnecessary work done.
Of course, it should be fast :) Does anybody know where to find such a toolbox, or libraries that allow me to accomplish the above? Any pointers are greatly appreciated!
Since there are a million "what is GWT" questions, let me give a thorough answer :
If you have any question with "javascript" anywhere in there GWT is not the answer, unless it's "how can I avoid javascript alltogether ?" (a common question for me and a lot of others).
GWT is a crosscompiler, RPC generator and UI toolkit. That means :
1) Crosscompiler: all code is in Java (and you can pick what code runs client-side). You write browser applications in Java, instead of Javascript. It's not emulated. The client-side javascript is not large (like asm.js stuff), doesn't require plugin downloads that don't work on half the platforms (flash, ms stuff, ...), it's not limited (like most of the javascript frameworks that are advised here that won't work for graphs in canvas ...), ...
TLDR: it's cross-platform, resulting application can work on all browsers, and everything else (e.g. native Android/iOS/Windows/...) (even IE6 if you really want).
2) RPC generator: you can call server-side methods that are also in Java. You can call them as if they are local methods, except that they can execute asynchronously and they can fail with network-related exceptions. This means you don't do it yourself, meaning no work and no errors.
This means that using any java-accessible code on the server in your in-browser applications is trivial.
3) A powerful desktop-like UI toolkit that works well. GWT is "Delphi/Visual Basic/Visual C++/..." with Java as the backing language on the web. https://www.youtube.com/watch?v=kV5H3rGfqOE
4) It's java. The same code works on Android, works on iOS, works in Windows, works on linux native, works on ... and works in the web browser (though you'll have to use different UI toolkits. But in a well-designed application, MVC, only the V needs to be platform-specific).
5) Because reusable code is actually possible in this UI toolkit, you find graphing libraries/controls/... that work well within the toolkit and that work together and you can usually get support for (e.g. Vaadin).
Making client-side Models and Controllers that work on all platforms is very easy (with a little discipline). Making sure that code stays in sync across all platforms is trivial (java is statically typed. Add a new field, and forget to add it on one platform, boom, compile fails).
The big disadvantages :
The big one : Java is a language that is made primarily to allow you to manage complexity in large applications. There is a lot of "default" complexity and lots and lots of tools to manage and refactor large codebases. Java itself is a static language with access controls and many tools to help you. That means that GWT-Java based applications can be a LOT larger than anything you'll ever write in Javascript. This also means that this is meant for large applications. You will find it less helpful for small applications.
You can't use javascript frameworks easily (but it's possible).
It's possible to not use the UI toolkit, but it requires lots of inside knowledge.
You have no easy control over the generated javascript (again, possible, but if you don't know compilers, you may want to avoid this).
You have very indirect control over the DOM elements in your web page. If this is important to you, life's gonna suck.
It's java, not many people would call this their favorite language.
It's not exactly been bleeding edge the past few years. Now with the 2.7 release and the 3.0 release (which is hopefully coming very soon) it's receiving a major revival.
One of the most important new features are javascript interopt, which enables you to write libraries in java and let other people use it like any other js library. In the other direction, you can easily use javascript (libraries) in java.
That means it's possible to just use modern stuff like polymer from within gwt without much of a hassle.
No, currently it's 1.7 (with gwt2.7.0) and soon (when gwt 3.0.0 is released) it will support java 8.
Parts of the page are still rather outdated and haven't really been touched since 2010/ 2012.
This is why it's so great that the site got a new look now, it indicates that things are moving again and I'm sure the outdated parts are going to be removed soon.
I used it for about 8 months, Hated it. Its like a big wall between you and the DOM.
I guess its good of you hate html and javascript. But once you grow up and realise your making a web page and need to control the DOM in a particular way, it just gets in your way.
Moreover Newsdesk, a reasonably large media monitoring platform is pretty much solely based on GWT, though it looks like they are moving away from it in their new development.
Seems to me the textbook example of Java people trying to make everything Java (and failing at it, as usual)
While it's funny (and sometimes silly) to see a huge amount of .js libraries popping up, they're not adding a big block between the programmer and the browser.
And js may have its quirks, but it's not java and I'm thankful for that. I'd rather use js over java anyday, unless there's something really dependent on it.
[+] [-] zamalek|11 years ago|reply
> GWT is used by many products at Google, including Google AdWords and Google Wallet. It's open source, completely free, and used by thousands of enthusiastic developers around the world.
Any amount of things fit that description. Beer? Air? Clicking "Learn about GWT" gets you this:
> GWT is a development toolkit for building and optimizing complex browser-based applications.
That's all it takes! Can we please start seeing these kinds of descriptions on landing pages. You're not selling a clothing brand, you are selling a toolkit to developers: I care first and foremost what the thing does, not how fashionable it is.
[+] [-] kosinus|11 years ago|reply
[+] [-] prohor|11 years ago|reply
[+] [-] florian-f|11 years ago|reply
[+] [-] Kiro|11 years ago|reply
[+] [-] yitchelle|11 years ago|reply
The ones that seek to know more are the ones they want to engage.
Only my speculation.
[+] [-] ezequiel-garzon|11 years ago|reply
[+] [-] johnyzee|11 years ago|reply
Being able to write the entire application, from the client and the domain model on down to the backend, in the same language, re-using classes across the entire application, is a big advantage.
In addition, being a very mature toolkit by now, GWT has A LOT of features to make life easier. Transparent RPC/serialization, code obfuscation/deobfuscation, IDE integrated debugging, i18n, resource bundling, code splitting, JavaScript interoperability, and a lot of other stuff.
Current project: Real-time multiplayer GTA-style game based on HTML5 canvas:
http://www.webworks.dk/html5engine
[+] [-] ExpiredLink|11 years ago|reply
Yep, that's the problem. I had to learn GWT for a project last year and I don't share your enthusiasm. The learning curve is steep, integration with "the rest" of a Java EE application messy (but doable) and you still need a CSS expert. GWT is now a 'grown' framework. Many concepts have changed during the years and therefore many previous recommendations are obsolete nowadays. Documentation is meager. After a while I spent most of the time searching for the right code snippets on Stack Overflow.
[+] [-] polskibus|11 years ago|reply
[+] [-] prohor|11 years ago|reply
As of doing everything in code - not necessary. As of now GWT has UiBinder - it is a kind of template or DOM + widgets, where you then bind code to it. But in upcoming 3.0 it will use web components standard (http://www.w3.org/TR/components-intro/)
[+] [-] mradmin|11 years ago|reply
Seriously? First I've heard this is how you pronounce it. And how does one pronounce gwit? I think I'll continue to call it: G.W.T.
[+] [-] insin|11 years ago|reply
Obviously "gwit" is pronounced as "jwit", right?
[+] [-] taejo|11 years ago|reply
[+] [-] farresito|11 years ago|reply
[+] [-] amelius|11 years ago|reply
1. client-side (javascript) database access
2. automatic updates to the client's view of the database
And also:
3. automatic optimal re-execution of javascript code whenever something changes in the input (e.g., the database). Note the word "optimal", e.g., no glitches, and no (or minimal) unnecessary work done.
Of course, it should be fast :) Does anybody know where to find such a toolbox, or libraries that allow me to accomplish the above? Any pointers are greatly appreciated!
[+] [-] thekaleb|11 years ago|reply
[+] [-] ExpiredLink|11 years ago|reply
[+] [-] waps|11 years ago|reply
If you have any question with "javascript" anywhere in there GWT is not the answer, unless it's "how can I avoid javascript alltogether ?" (a common question for me and a lot of others).
GWT is a crosscompiler, RPC generator and UI toolkit. That means :
1) Crosscompiler: all code is in Java (and you can pick what code runs client-side). You write browser applications in Java, instead of Javascript. It's not emulated. The client-side javascript is not large (like asm.js stuff), doesn't require plugin downloads that don't work on half the platforms (flash, ms stuff, ...), it's not limited (like most of the javascript frameworks that are advised here that won't work for graphs in canvas ...), ...
TLDR: it's cross-platform, resulting application can work on all browsers, and everything else (e.g. native Android/iOS/Windows/...) (even IE6 if you really want).
2) RPC generator: you can call server-side methods that are also in Java. You can call them as if they are local methods, except that they can execute asynchronously and they can fail with network-related exceptions. This means you don't do it yourself, meaning no work and no errors.
This means that using any java-accessible code on the server in your in-browser applications is trivial.
3) A powerful desktop-like UI toolkit that works well. GWT is "Delphi/Visual Basic/Visual C++/..." with Java as the backing language on the web. https://www.youtube.com/watch?v=kV5H3rGfqOE
4) It's java. The same code works on Android, works on iOS, works in Windows, works on linux native, works on ... and works in the web browser (though you'll have to use different UI toolkits. But in a well-designed application, MVC, only the V needs to be platform-specific).
5) Because reusable code is actually possible in this UI toolkit, you find graphing libraries/controls/... that work well within the toolkit and that work together and you can usually get support for (e.g. Vaadin).
Making client-side Models and Controllers that work on all platforms is very easy (with a little discipline). Making sure that code stays in sync across all platforms is trivial (java is statically typed. Add a new field, and forget to add it on one platform, boom, compile fails).
The big disadvantages :
The big one : Java is a language that is made primarily to allow you to manage complexity in large applications. There is a lot of "default" complexity and lots and lots of tools to manage and refactor large codebases. Java itself is a static language with access controls and many tools to help you. That means that GWT-Java based applications can be a LOT larger than anything you'll ever write in Javascript. This also means that this is meant for large applications. You will find it less helpful for small applications.
You can't use javascript frameworks easily (but it's possible).
It's possible to not use the UI toolkit, but it requires lots of inside knowledge.
You have no easy control over the generated javascript (again, possible, but if you don't know compilers, you may want to avoid this).
You have very indirect control over the DOM elements in your web page. If this is important to you, life's gonna suck.
It's java, not many people would call this their favorite language.
[+] [-] JensRantil|11 years ago|reply
[+] [-] rdwallis|11 years ago|reply
[+] [-] florian-f|11 years ago|reply
One of the most important new features are javascript interopt, which enables you to write libraries in java and let other people use it like any other js library. In the other direction, you can easily use javascript (libraries) in java. That means it's possible to just use modern stuff like polymer from within gwt without much of a hassle.
[+] [-] pjmlp|11 years ago|reply
[+] [-] needusername|11 years ago|reply
[+] [-] florian-f|11 years ago|reply
Parts of the page are still rather outdated and haven't really been touched since 2010/ 2012.
This is why it's so great that the site got a new look now, it indicates that things are moving again and I'm sure the outdated parts are going to be removed soon.
[+] [-] ciudilo|11 years ago|reply
[+] [-] jamies888888|11 years ago|reply
[+] [-] stephen123|11 years ago|reply
I guess its good of you hate html and javascript. But once you grow up and realise your making a web page and need to control the DOM in a particular way, it just gets in your way.
[+] [-] pavlov|11 years ago|reply
https://news.ycombinator.com/item?id=8554339
Other references mentioned by the poster are "Apple (iAds Workspace), Amazon (AWS Console), Nike".
[+] [-] prohor|11 years ago|reply
- http://trends.builtwith.com/websitelist/Google-Web-Toolkit - but this might be seriously underestimated, as they are not able to detect services accessible after login, where GWT is mostly used.
- http://ars-codia.raphaelbauer.com/2011/12/why-google-web-too...
Other that I'm aware of:
- https://www.cloudorado.com/
- https://ruxit.com/ - their service once you log in
- http://gogrid.com/ - again after login
[+] [-] mutagen|11 years ago|reply
AdWords UI AdSense UI Blogger Groups Doclist Parts of Maps / Geo
according to https://groups.google.com/forum/#!msg/google-web-toolkit/Mjj...
Their case studies page has a few more: http://www.gwtproject.org/casestudies.html
[+] [-] bvm|11 years ago|reply
[+] [-] Djorak_|11 years ago|reply
[+] [-] buu700|11 years ago|reply
[+] [-] mg74|11 years ago|reply
[+] [-] gwtuser|11 years ago|reply
[+] [-] bshimmin|11 years ago|reply
[+] [-] BilalBudhani|11 years ago|reply
[+] [-] x0rg|11 years ago|reply
[+] [-] collyw|11 years ago|reply
[+] [-] raverbashing|11 years ago|reply
While it's funny (and sometimes silly) to see a huge amount of .js libraries popping up, they're not adding a big block between the programmer and the browser.
And js may have its quirks, but it's not java and I'm thankful for that. I'd rather use js over java anyday, unless there's something really dependent on it.