Let's be clear from the outset that Perl is not an option. Its strengths and weaknesses aside, I just plain don't like the language very much, so I'm not going to architect a large-scale system in it. Querki is intended to be industrial-grade code, highly OO and highly pluggable, so I want a language I can think in clearly.
I've long been enamored of Ruby, and that's been Plan A for a long time, but I've been starting to question that lately, simply due to speed. My understanding is that Rails is single-threaded (which is unacceptable), and in general Ruby still has a reputation for being slow. I'm sure that will fix itself in time -- all interesting languages start slow and speed up -- but it's not clear that that will happen in the timeframe I need.
(C#, BTW, is also counted out -- Querki is intended to be a major open-source project, and being fundamentally Windows-based isn't acceptable. The last time I looked at the Mono project, it just wasn't complete enough for me to depend on it as a good option. In general, while I use a lot of Microsoft tools professionally, I know them well enough to not *trust* them and their good will very much.)
So I find myself pondering the most classic of fallbacks, Java and more generally the JVM. The speed kinks have largely been worked out of that platform by now, and it's one of the default options for commercial code nowadays. I suspect that going back to Java from C# would annoy me some of the time (I do a lot of C# power-programming in precisely the areas where Java still seems a little weaker, like delegates and reflection), but they're close enough that I'm still semi-fluent in Java. And the rise of interesting new languages in the JVM like F3 and Scala means that I can potentially satisfy my desire for cool toys while still working on a fast and reliable platform.
All that said, though, I've done very little server-side programming with Java. My Java experience was way in the distant past, when it was still just a client technology. I've done absolutely no J2EE or servlets or anything like that, and have no experience with Tomcat or the other relevant tools -- even my Eclipse experience is mainly with ActionScript.
So I'm seeking opinions from the programming community out there. What do I need to know about trying to assemble a substantial server app based on the JVM? What are the gotchas? Obviously, one weakness is that it requires a host that is willing to run servlets, which eliminates a large number of potential hosts; is that a crippling weakness for an open-source project like this? Are there any licensing or tech headaches that I wouldn't know about? Don't worry about the language itself -- I'm not worried about the capabilities of the language -- but I am very interested in input about the platform...