What's the difference between using GWT and other licensed extensions to it like SmartGWT and extJS? Does it have to do mainly with the number of components and ease of integration into an existing or new web application? In other words, if I am building a J2EE web app and am considering implementing the UI layer with GWT (as opposed to JSF), which one am I best suited to go with given that development time and scalability are both important issues. I really don't want to sacrifice one over the other, in the long run. Thanks.
I know more about SmartGWT so this reply will be have more information on that side..
SmartGWT and others like ExtGWT add a large number of visual components to GWT, and SmartGWT also adds server-side functionality.
Not all of these are "licensed" or uniformly licensed. Substantially all of SmartGWT's visual components use the LGPL license, same license as Hibernate and commercially friendly. SmartGWT's server side functionality introduces commercial licensing:
http://www.smartclient.com/product/
ExtGWT uses the GPL license for the whole product - most organizations must purchase a license to use the product at all (check with your legal department).
For server communication, Using ExtGWT generally implies use of GWT's built-in GWT-RPC, a basic client-server communications mechanism, connected to various third-party libraries, like Gilead.
SmartGWT Pro and above uses a different client-server comm mechanism designed to eliminate the need to write DTOs - Sanjiv Jivan's blog explains the DTO issue and how to solve it in some depth:
http://www.jroller.com/sjivan/entry/solving_the_dto_dilemma
Both libraries, and other similar libraries, greatly simplify client-side development with a variety of visual components far more powerful than the GWT built-in components.
SmartGWT's server-side support includes visual data binding wizards that give you an immediate connection to either SQL databases or Hibernate, as well as a mechanism called "DMI" that allows you to route data requests coming from components to Java methods via an XML declaration file (similar to Struts, but CRUD-oriented).
Neither library is necessarily built in such a way that there is a scalability vs ease of use tradeoff. For example, with SmartGWT you have a concept of a DataSource, which can be initially backed by sample data, but can be later replaced by whatever you want without changing any of the components that use the DataSource. ExtGWT have a similar concept called a "Store".
If there's a scalability difference between the two libraries, it would not be an early ease of use tradeoff but instead the overall design of the libraries with respect to how the library interacts with the server. Consider the Adaptive Filtering concept of SmartGWT, for example, which reduces the most expensive types of server requests (sorting/filtering large datasets):
http://www.smartclient.com/smartgwt/showcase/#grid_adaptive_filter_featured_category
Thanks Charles, that was very helpful. I've been doing a bit of reading in the last couple of days and might very well go the SmartGWT way and purchase a license in the coming weeks. Had a couple of more questions:
I am considering integration a forum software (VBulletin, mostly) in my application. Does SmartGWT provide a way to create custom widgets? I don't know if JSR-168 applies here but ultimately I want to be able to expose some functionality via widgets (backed by database or web providers). So, in my example, the user should be able to use the features of a forum within a SmartGWT widget. Is that a possibility?
I couldn't find any performance metrics in my reading. Let's assume that my database tables doesn't have a whole lot of rows but would atleast run into the 100s of thousands (not millions). What about the overhead added by SmartGWT here?
Did you manage to add vbulletin content to GWT widgets? I want have vbulletin content within GWT widgets.