Monday, November 9, 2009

Seam + {jboss 5.0 | jboss 5.1} = ?

About a month ago I completed the upgrade of all my Macs to Snow Leopard. This generally went smoothly -- not a surprise for a release that has been charactered as "more refinement than upgrade."

One exception was a jboss 4.2.2/seam 2.1 application that would hang when generating a list view of objects that included images. My initial reaction was that this provided an opportunity to upgrade to jboss 5.x and partake of whatever enhancements that offered.

This proved to be a task that ended in frustration. I spent ~ 40 hours on it and eventually gave up. I fell back to the earlier version and upgraded to jboss 4.2.3 which solved the problem (which I think was related to using Java 1.6).

I thought I'd share some of my experiences, just in case someone else finds it useful:

The first glitch was that the version of seam I was running didn't appear to work with jboss 5.x so I upgraded to version 2.2

The attendant upgrades caused me to change some of the DB mappings
change blob annotations (mysql specified)
From: @Column(name = “data”, length = 8000000)
To: @Column(name = “data”, length = 8000000, columnDefinition = “mediumblob”)

I also tried switching to jboss developer studio to see if that would help me uncover the problem -- this had no real impact.

The core symptom was that nothing was coming back from pages that generated a list of items in the DB and no Hibernate queries showed up in the back end stream.

I eventually tried to go in to one of the more "internal" pages

(a real advantage of Seam's rest interface) and finally saw a hibernate query on the background stream with the warning:

WARN [Param] could not create converter for: competitionId
javax.el.PropertyNotFoundException: Target Unreachable, identifier ‘competitionHome’ resolved to NULL

This warning was similar to the error I was getting that the authenticate method resolved to NULL.

What appeared to be happening is that the seam annotations weren't being processed correctly (specifically @Name("competitionHome") ).

After searching on this error I found this link
which made me think that things are basically broken.

As I said, rolling back to the original code, the problems went away in jboss 4.2.3. However, I must admit that I'm surprised that the issue exists in the newer versions of seam/jboss

5.0.0.GA Stable 104 MB 2008-12-05 LGPL 134971 Download Notes
5.1.0.GA Stable 130 MB 2009-05-23 LGPL 181731 Download Notes
JBoss Seam 2.2 2.2.0.GA Production 111 MB 30.07.2009 LGPL Notes Download

I know that this is "unsupported" code, but I would still think that there would be better testing. After all, 5.1 was out in May of this year and Seam 2.2 claims

Seam 2.2 examples target JBoss Application Server 5.1.

Now, I do realize I could have been anywhere from 1 minute to 1 month away from a solution for this problem (if anyone has a solution, I'd be more than happy to try it), but I have two closing thoughts:
  • Allocate more time than you might have expected towards making the transition

  • It would have been appreciated if the various teams involved paid more attention to migration tools (even documentation) and/or backward compatibility. My various searches trying to solve this problem turned up a lot of people having obscure issues with the transition: this is not the way to encourage wide uptake of a tool set.