Dave Johnson on open web technologies, social software and Java
It's hard to believe, but I've been dorking around with Roller, the blog software that powers this site, for almost 10 years now. I started in summer 2001. In the past couple of years, I've had a lot less time to work on Roller. I devoted some of that time to mentoring student developers, which was fun and rewarding. I also spent time making Roller more consumable for developers by making it easier to build, run and deploy to modern Java app servers, which was not really fun but was definitely educational, bloggable even.
Making Roller work on the new crop of "modern" Java EE 6 servers was an interesting experience and the story makes a pretty good case study in Java EE application portability. I've put together a short series of blog posts to tell the story and this is the first, an overview. In subsequent posts I'll explain the changes I had to make to get Roller working on:
|GlassFish 3 (released June 2010)|
|JBoss 6 (released December 2010)|
|WebSphere 8 (beta released July 2010)|
|Tomcat 6 and 7 (not Java EE but Roller just has to work on Tomcat)|
There are other Java EE 6 servers out there and there's a good summary of them on The Aquarium; those are just the ones I had time to explore.
There were three categories of things I changed to accomodate Java EE 6 servers. The first is changes to the Roller code base to make Roller work on all of my targets. Most of these changes were in way Roller uses calls the Java Persistence APIs (JPA), needed because of differences in the JPA implementations used by each server. GlassFish uses EclipseLink JPA and JBoss uses Hibernate JPA. On WebSphere and Tomcat, Apache OpenJPA is the implementation. Fortunately, nowhere did I have to use any conditional code or introduce special behavior for any platform.
The second category of changes is additions to the Roller install guide to mention the special settings required to make Roller work on all targets. On some platforms, special behaviors must be enabled for Roller, for example the "filter compatibility" flag on WebSphere. I added a section to the install guide for each server and documented the details there.
The third category is changes to the Roller build process to create special versions of Roller for some servers. Unfortunately, due to Tomcat not being a full Java EE server and some JBoss classloader issues, I'm not able to provide one Roller release that runs on all servers. The latest Roller 5 release candidate comes in three flavors, one for Tomcat 6/7, one for JBoss 6 and one for "Java EE" which is the one intended for use with Glassfish 3.1 and WebSphere 8.
In the next post I'll tell you what I had to do to get Roller running on Glassfish 3 with EclipseLink JPA.