I’m a couple of days into making the switch from Glassfish v1 UR1 to Glassfish v2 beta-2 and I’ve gotta say that, even at beta level, this is a compelling upgrade.

There are tons of improvements in v2 (including first class clustering support), but there were two compelling features for me personally in v2 to make me move over to the new beta:

  • Http Compression Support
  • Much improved Virtual Domain support

The Http Compression support was a big step up. Tomcat users have had this for a while, but it was only introduced to Glassfish in v2. Jean-Francois has documented this ages ago, and you can do it all via the GUI in beta 2 (just put in “compression” equals “on” in the properties of your http-listener-1 page). This has been a killer for me as I creep closer and closer to my ADSL allowance. Check this out:

Graph showing compression effectiveness

The first two days were before enabling compression (and are representative of my standard traffic profile) at just under 400Mb/day, the next two days are once I turned on compression - just under 200Mb/day. Awesome! My traffic cut in half! If I tune the default compressibleMimeTypes I might even be able to improve on that!

The other killer feature for me in v2 is much improved Virtual Domain management. I host about 5 different domains on my current server and I had all sorts of issues with default apps on virtual servers under v1.0. I would often get my “default application” for a particular server starting up twice - which led to all sort of dramas (hibernate concurrency issues, excess memory usage, etc). All that has gone away under V2.0 - and I can see from the logs everything is just starting up once! Under v2, I can also bind multiple apps to the “/“ context - since they each run on different virtual servers. Awesome!

One thing I have also noticed in V2 is much snappier performance on both startup and render times. All my Grails apps continue to run just fine - and I took the opportunity to move to Grails 0.5 which is also much faster to startup.

The only real gotcha was the need to enable access logs (which are turned off by default), and needing to tune my log format, but once that was done my awstats continued working just fine. Also need to add -Djava.awt.headless=true to my JVM params to keep my charting stuff working happily.

Big props to the Glassfish guys. They’ve done an awesome job with this upgrade.