I plan on rewriting my "Comparing Java Web Frameworks" presentation for this year's Colorado Software Summit. Rather than "Comparing Java Web Frameworks", I'm going to make it into more of a "Choosing a JVM Web Framework" presentation. I think this opens it up to more possibilities such as Grails, JRuby on Rails, Flex and GWT.
One of the things I hope to talk about is choosing the right tool for the job. I think there's 3 types of web applications you can develop:
- Consumer-facing, high-traffic, stateless applications
- Internal, more desktop-like applications that are stateful
- Media-rich applications that require a RIA framework like Flex
Once you've decided on which of these you're developing, it's much easier to narrow down the choices:
- Struts 2, Spring MVC, Stripes
- JSF, Tapestry, Wicket
- GWT, Flex, OpenLaszlo
I'm not sure if GWT fits in the RIA category. I'm not sure where Rails or Grails fit either. They more closely resemble category #1 than any other, yet there's a lot of speculation about their scalability. I think if that perception can be changed, they'll fit into the first category quite well. However, I don't think they compete with component-based or RIA because they don't hold state or offer rich-media capabilities.
Sidenote: I find the scalability debate quite interesting. There's a fair amount of propaganda in Javaland that scalability can be achieved with appservers and clustering tools like Terracotta. If this is true, I've yet to read good solid proof of it. Most of the "how to scale" information out there suggests "share nothing" architectures that shard data and applications across several servers. Of course, there's scalability and then there's massive scalability. Can appservers and clustering solve massive scalability like Google and Amazon require?
What's your opinion? How can we make it easier for developers and companies to choose a web framework? Is categorizing application types a good technique?