Patrick,
Scalability and Performance would have several factors to get influenced from. More than technology choice, it would depend on how you design your application.
Which Technology ? There are other things to consider when you design your application,in deciding which technology
you should go for. Some of them are:
1. How stable it is
2. Learnability Curve
3. Community Support
4. Support for the specific functionality
5. Support for specific UI experience
Choices For Presentation Module The choices would be:
1. JSP/Servlets
2. Struts
3. Stripes
4. Spring MVC
5. JSF
Even if you choose to go about using JSP/Servlets, you would end up creating some sort of MVC like code, if your application is more than 2 pages.
Using framework is thus not an overhead, rather expediating and enriching.
All frameworks work good, and have been tested for production use. Struts would be my choice for the stability it offers and extensive support for it in various IDEs.
JSF has a learnability curve, provides you drag and drop feature, if you like it and has over head of execution.
Stripes and Spring MVC are new on the horizon, comparitively. Some people swear by Stripes. Very few use Spring MVC, and I think that is more of a convience if they are already using spring, rather than an architecture decision.
Choice For Business Layer Typically all the MVC frameworks would stop at presentation layer. And you would have to use typical delegation design patterns for business layer. The requirements of Business Layer should be
- Database neutrality : This would be DAO pattern that your business layer will interact with
- Support for Transactions : If your transaction spans over a single database, the
JDBC transactions provided by DAO layer are sufficient. However if you have transactions spanning over multiple resources like JMS, multiple databases etc. you would use a framework like Spring, which provides best practices encapsulated in a framework.
- Distributed Computing: Would you want processing to be achieved across different distributed systems. This is very critical for scalability, and performance. For your requirement I do not forsee this is the case, but EJBs would be one contender in this category.
I would recommend using simple
java objects [fancifully called POJOs] for your business layer. For any specialized requirement as one I mentioned above, consider using Spring. Start with POJOs and then you can graduate to Spring if need be.
Choices for DB Layer This is your DAO. The choices would be
- Plain JDBC
- O/R Mapping, which give you greater flexibility with your queries [ iBatis]
- Tightly integrated O/R Mapping : Hibernate
- JDO etc.
My personal preference is simplicity of design. Start with JDBC or Spring DAO. If you absolutely need it, you woudl consider using O/R mapping. They pose an overhead in terms of query optimization, learning curve, and possibly more errors.
Other Technologies You probably have to choose a couple of more technologies
- Adobe Flex : For an amazing user experience
- XML : For configuration, automatic object-xml transfomration (XML Beans, Castor, JAXB), XSL for transformation of XML to XHTML, SAX/DOM for parsing
- Web Services: If your clients need that interface. This would get to onto a tangent though
What to do? If the options provided above make you more confused. I would suggest hiring an architect.
You could hire me
[ Kidding ]