The Java jungle: application servers
As promised in this previous post, I will start this short serie by the JavaEE application servers jungle. As a side-effect I won't consider Tomcat as it is not a full-stack application server. Also, I will only consider the opensource JavaEE servers.
JBoss

JBoss is an obvious option when it comes to JavaEE application servers. In fact, it delivers very well. I found the JBoss application server to be very easy to use. The documentation is good. You quickly forget that you are running it once your favorite IDE has been set-up. Also, the startup time is pretty fast (in fact, JBoss is the fastest that I have tested).
Of course JBoss is not perfect. There is not proper web administration console. Adding new resources (e.g., a new JDBC datasource pool) needs to be done by hand. This involves editing a few XML files and getting used to the files locations. There is nothing complicated in this though: it is just a matter of reading a bit of documentation and copying/editing sample files. This is yet not the simplest for teaching purposes. Apart from that, I like this application server a lot, and I encourage you to check out their impressive suite of middleware solutions.
JOnAS

I have not tested it as the stable releases are only JavaEE 1.4 certified.
Apache Geronimo

At first sight, I thought that Apache Geronimo would be roughly a JBoss clone. I was so wrong!
Geronimo is a pleasure to work with. The IDE support is very good (Eclipse, IntelliJ IDEA). It comes with a very good documentation. Last but not least, it has the best web admin console I have seen. You can do pretty much anything from there. For example, you can add JDBC datasource pools with a very intuitive wizard and Geronimo will download the drivers for you... or provide you with a link when some legal restrictions apply. You can also opt for Tomcat or Jetty as your servlets container which is very nice (to me, Jetty is superior by far to Tomcat...).
I was very impressed with Geronimo, yet I won't use if for teaching purposes. The startup is a bit slow: I suspect that the GBeans framework (IoC) flexibility price is some CPU time. But my main complain is related to OpenEJB, the EJB container that is used by Geronimo. For some (biiiip)king reason, I could never manage to retrieve a remote session bean through JNDI from a standalone Java application... The lookup would always fail and I have really no idea why... This was never a problem with both JBoss and Glassfish (using the same application of course).
Glassfish

This is my choice
Glassfish is the reference JavaEE implementation and it is pretty slick. The documentation is excellent as well as the IDE support (although IntelliJ IDEA 7 run console always gets disconnected from the server, which is a bit annoying). The administration console is very good, yet a bit less powerful than the one of Geronimo. The startup time is ok.
I also enjoy the fact that Glassfish supports multiple independent domains (i.e., domains are like Oracle instances). This is a must-have feature for labs as pair of students can have their own domains instead of having to reuse a (possibly broken!) one that was left from a previous lab session. The command-line asadmin tool is just great and it is very easy to manage instances, deploy applications, backup or restore domains and so on. The future Glassfish v3 is probably going to be highly attractive as it will support some nice features such as the direct deployment of RoR applications using JRuby.
Verdict
Glassfish wins by a narrow margin over Geronimo (stupid OpenEJB!). I won't use JBoss for my teaching, not because of flaws but mostly because it lacks a proper administration console. Overall, Glassfish provides the most straightforward application server experience. It also looks to have a very bright future with the upcoming version 3
Update: I have nearly launched a troll

