I wrote a while back about the project I’m currently working on to build a reference application with Terracotta. At that time, we were still trying to decide on exactly what stack to use. It’s kind of a tricky thing because we were trying to decide on a stack that met several goals:
- Used by a significant portion of our customer base (and to a greater extent the industry)
- Frameworks that can stay out of the way to illustrate how to use Terracotta
- Frameworks we actually find tolerable to use :)
Anyhow, we’ve settled for now on this initial stack:
- Web: Spring MVC
- Conversational web stuff: Spring Webflow
- Page layout: Sitemesh
- Email templates: Freemarker
- Dependency injection: Spring
- Security: Spring Security
- Domain persistence: JPA
- ORM: Hibernate
- Database: MySQL
- Build: Maven
- Unit testing: JUnit
- Web container: Tomcat
This is not to say that this stack is any better or worse than any other stack, of course. In virtually every choice here, there were other alternatives we considered as well that would have worked. But this stack seems to be meeting our goals for the moment. The web framework was definitely the most contentious choice and Geert did most of the analysis (since I’m mostly a web n00b).
It’s interesting to note that we chose a big chunk of technologies similar to the one Grails is built on and thus it would be great to build a Grails version of the app as a follow-on phase for comparison. No promises there but maybe some of the G2One guys would help us out.
Getting the initial project structure in place has been more challenging than it should be due to the alphabet soup of technologies involved. The best starting places I’ve seen are the Maven archetypes provided by AppFuse and WebTide, both of which can give you something to play with quickly.
In the case of AppFuse, they definitely give you a fuller framework and tie together a bunch of technologies. They even provide you a full user login system. However, the user stuff is defined in an AppFuse library and is just pulled in by dependency, not created in the actual project structure. I found that (and the number of additional frameworks included) to be a little daunting in trying to adapt that initial structure into what I wanted. The WebTide archetype is much simpler and for me was a better place to start building out. Ultimately, I ended up starting from scratch and just using a lot of the examples provided from these archetypes and so far that’s been successful. At least I understand what’s there.
So far, it’s definitely been a learning experience for me! At least we’re rolling now…