Technology
Bulding complex web sites involves a host of technologies, which are (like web sites themselves) ever evolving. Our primary tools for projects these last few years have been:
Languages
Java is our primary language for web site implementation. Its maturity, installed base, and framework ecosystem make it an easy choice. In addition, we have experience with C/C++, Perl, and various dynamic languages like Groovy and Ruby.
View Frameworks
Wicket is our current favorite view framework for building Web 2.0 sites. It is well designed, and facilitates the construction of typesafe views that are refactorable. In addition we have extensive experience with JSF and Apache Struts, as well as RIA frameworks like Adobe flex.
Dependency Injection
JBoss Seam, soon to be standardized as Web Beans, is our current choice for dependency injection as well as association services like an interception stack and making JSF livable. We also have experience with the Spring framework as well as Google Guice.
Persistence
We use JPA for persistence, with hibernate as the provider. We typically use MySQL as a database where possible, and we have experience with Postgres, MS-SQL, and Oracle as well. We have experience with replicated sql systems for backups and scale-out.
Servers
We use Apache to serve static content, rewriting, proxying, and simple load-balancing, with Jboss AS as our typical JavaEE container. We have experience clustering for scaling, incremental deployment, and failover.