A couple of days ago, at a client, we were sitting down to choose a new web framework for doing some upcoming Rich Internet Applications (RIA). We listed the contenders and tried to score them against each other on what we found most important. The table below shows the contenders and the score we gave them (1-to-5, 1 is worst, 5 is best). The ones I have made strike-through on failed our conditions:
|Name||Unit testable||Functional testable||Quick devel/build cycle||Fun factor||RIA easiness||Platform independent|
|Open Laszlo (flash)||1||2||5||2||5||5|
|Swing with JWS||5||?||5||4||5||5|
All the DHTML-based ones score about the same on "functional testable" as they all rely on the same kind of tools (watir, selenium, jwebunit, ...) for doing the testing. And they score low, because previous experience have shown us, that this is hard when you get wild with the RIA functionality.
The proprietary runtime ones on the other hand, are even harder. How do you assert if something shows correctly in a flash application after clicking button x? Seems like Adobe/Mercury has something going for flash, but it is closed source/buyware and windows-only.
Quick development/build cycle
We are real tired of having to build and deploy and restart container to be able to see the changes we have made. It takes too long. This is important!
Do not tell your boss about this one, even though it is important too :-) We need to work with this in a long time after deciding on it. It needs to be fun too. I would simply hate writing JSPs to JSF and most probably think about quitting.
By this we mean: "Does the same code look and behave the same in most browsers on most platforms?". It needs to. No other than GWT from the DTHML-based ones score high on this. We feel that google has put a lot of effort in actually testing their components on many platforms. Flash and JVM-based ones score high here.
The ones who did not make it
Here are some short notes on the ones we deemed out and why:
- As a previously big-time user of tapestry, tapestry5 was really interesting. Sadly, it is not done yet, at all, and we need something now.
- Struts2 has something going as it predecessor was really successful, but it really didn't score that well on the "fun factor" and RIA-easiness
- SEAM is, well ... based on the horrible JSF
- ZK loken very promising, but I had some actual experience with it, and it seemed a bit strange to work with and did not look the same on all platforms and browser
- OpenLaszlo also looks promising but it is also much the same as flex is, and flex looks more complete and better documented. And, with Adobes latest open-source statements on the next flex, OpenLaszlo has lost some of its appeal to us. Only thing it has got left is its ability to render to multiple runtimes, but we do not need that (and will that ever work for real anyway?)
- Applet - does anyone ever use this for real applications? If an applet is to work in most browsers on most platforms, the client needs Suns plugin for applets, and with that comes the complete JRE. When the complete JRE is there, Swing with JWS seems more appealing to us
Taking out the ones mentioned above we were left with:
The left out ones
Of course there are others. In Java-land, there are literally hundreds. We feel we have taken the most interesting ones into consideration, but here is a bit of information on some others, that did not even make it to the list.
- Echo2 and Wicket: I see them mostly as a special-cases of GWT. Yes, they are different, for instance Echo2 executes a lot of logic on the server-side. But basically, they can help us in the same way as GWT can with producing RIA-applications, and GWT has got google backing
- JSF: So screaming old-style a way to do web development! Abolutely no innovation in this framework. Only plus-thing is its industry backing and tool support. But that is not enough.
- Tapestry 4: It is nice, yes. But it would not score high on "RIA easiness" and, it is highly incompatible with the upcoming tapestry5. If one is starting a Tapestry project today, it should be on v5.
- WebWork: Well, it is struts2 now
- Spring Web: I think spring should stop doing the complete stack and stick to what it has done well. Simple put!
- RIFE: Simply too much more than simply a web framework.
God knows, I love it :-) But, notice the emphazis I put on the "I". Not all love learning a complete new stack and moving to a new platform. Also, I and others have a lot of investment in the Java world. We are chosing a new web framework yes, but it is going to interoperate with a large existing JEE application.