Vaadin for web application development from scratch - Few doubts

We are trying to choose a framework for our client development for a web application. These are the key points about our application.

  1. Rich text application where user performs many activities in the client.

  2. We are looking to develop using Java technology

  3. The services will be offered in cloud.

  4. Mobile support is required.

  5. Scalability is also one main concern.

I went through lot of doc and information along with this video [http://twit.tv/show/floss-weekly/187]
[1]
online and have now left with Vaadin and plain GWT. I have a small bit of experience in development with GWT, but not in Vaadin(I have written couple of sample programs only in Vaadin). Please help me in understanding few things.

  1. If I have to write a new widget in Vaadin how easy or difficult it is to accomplish?

  2. Is there any obvious issues with Vaadin widgets or concepts which might be a blocker for any application?

  3. If tomorrow we decide to just switch back to GWT, is that feasible given that Vaadin works with all server code logic?

  4. Does the Vaadin method of going to server everytime a concern for applications that are deployed on cloud?

  5. Last but most important, how is forum support and future dev?

Thanks a lot. Please note that I have gone through many articles and links about these discussions but feel its good to know from a guy who has real experience in these stuffs atleast for sometime. Thanks again.

[1]
: http://twit.tv/show/floss-weekly/187

Hi!

  1. Developing widgets in Vaadin 7 has become much easier than it previously was. Check out https://vaadin.com/wiki/-/wiki/Main/Vaadin+7 under “Custom widgets”. But essentially, using the Vaadin Eclipse plugin, you can generate a widget with the communication-process included in a few minutes and use that as a starter point.

  2. You’d have to create your widgets as little Vaadin-coupled as possible and separate the communication process outside of the widget(GWT) (and instead use listeners that could be used by any framework). This way, it would be pretty easy to fall back.

  3. It is fully up tp you when you want to communicate the changes from your widget to the server side. I have no experience in deploying apps to the cloud, so maybe someone more experienced could comment on this.

  4. Vaadin is growing rapidly, so I’m sure we will stay here and just grow stronger all the time :slight_smile:

  1. As long as the cloud uses sticky sessions instead of always serializing everything, performance and scalability should be quite good. This means Google App Engine is not a good choice as its approach to serialization leads to long latencies, but most cloud platforms should be fine.

  2. The forum is quite active but there are also commercial support options available if that is important for you.

In your scenario and wanting to keep the fall-back path available, I would say you’d probably end up writing quite a lot of your widgets in GWT but can save a lot in communication, data management etc. code by keeping the server side in the picture. The application will have a state on the server side, so you should consider carefully what data your application keeps in memory - any major memory issues are usually there instead of on the Vaadin component side. CPU-wise, scalability should not be a problem.

Thanks a lot or your replies. So with all processing happening on the server side, I have a doubt. Suppose a layout has multiple widgets and data load to one of the widget takes time, will the GUI be blocked till then, or does Vaadin support ajax loading of data to widgets?

The UI is in a way “blocked” during the processing of a request to the server - not so that you could not create new events from the UI (Ajax requests are used), but the requests will not be processed by the server before the previous one has been processed.

It is possible to use background threads and some push or polling solution to keep the UI responsive during long operations - see
this thread
. Vaadin 7.1 will have built-in push support.

Note that among others the Table and ComboBox components use lazy loading, so only a subset of the data (visible area and a scroll buffer around it) is loaded to the client, and with the use of a suitable lazy-loading Container on the server side, also loading of data from a DB or other data source can be lazy (only the needed data is fetched). These don’t solve all issues, but can already help significantly.

Thanks a lot for your explanation. While I understood most of it, am not sure of one thing.

Suppose I have three widgets in the screen out of which one is a combobox and loading data for that takes time (assume query is on a large table), will the UI be loaded with all widgets, with just the combobox masked or whole of UI is not rendered until some data to the combobox is received?