GWT 2.2 Breaks Most Plug-ins

Google Web Toolkit I often comment that the GWT API is extremely unstable, more so than most other open source projects, due to the vast number of changes in each release. When Google released GWT 2.2 a few weeks ago, the release notes implied this was a relatively minor release. After attempted to update a fairly large GWT project to 2.2, I discovered a major issue: all of the referenced GWT plugins broke and required a new version that was GWT 2.2-compatible.

The API Change – Small and Subtle

In GWT 2.2, Google changed the class library JClassType from an abstract class to an interface. On the surface, this may seem like a minor change that would not affect most developers. Java compiler experts may be aware, though, that changing the class type alters the byte code of classes that compile against this class. In other words, any JAR or library compiled prior to GWT 2.2 that references this class will be unable to be used in GWT 2.2.

The error often manifests during a GWT Production mode compilation as:

[ERROR]  Internal compiler error
java.lang.IncompatibleClassChangeError: Found interface com.google.gwt.core.ext.typeinfo.JClassType, but class was expected

The Fallout

Because of this API change, most GWT plug-in libraries must be recompiled to GWT 2.2, and the resulting JAR will not be compatible with versions of GWT older than 2.2. In my case, this affected all the plug-ins I was using.

On the plus side, many GWT plug-in developers have already noticed the issue and begun issuing new versions. For example, if you are using Ext GWT, Sencha just released a new version this morning that is compatible with GWT 2.2. Bst-player, a plug-in I have contributed to, has also been updated for GWT 2.2.

Unfortunately, Google Maps, one of the most commonly used plug-ins, has not yet been updated and is therefore not currently compatible with GWT 2.2, as described in this bug report (please “Star” this issue if you have a G-mail/Google account!). If you rely on Google Maps in your GWT application, I strongly recommend you hold off upgrading to GWT 2.2. If you refer to the ticket, a user has posted their own GWT 2.2-compiled JAR, but this is not an official release.

All or Nothing

The major problem with this update is that it forces developers to update GWT and all plug-ins at the same time. If you upgrade to GWT 2.2, you are required to update all of your plug-in libraries and if, as in the case of Google Maps, there is no such update available, then you cannot upgrade at this time. Alternatively, if you keep the older version of GWT, then you cannot upgrade any of your plug-ins since the new versions will not be compatible with versions of GWT older than 2.2.

Conclusion

When I upgraded from GWT 1 to 2.0, a much more significant process, most plug-ins still worked, albeit with some issues. The fact that the GWT 2.2 upgrade completely breaks existing plug-ins is a serious issue, one I hope Google does not repeat in the future. With any luck, this is not a sign of things to come, and Google will consider supporting existing software in the future.

I'm Speaking at TheServerSide Java Symposium Reminder: Jeanne and I are both presenting at TheServerSide Java Symposium next week. My lecture is entitled “GWT Roundup: An Overview of Google’s Web Toolkit and Hybrid Integration” and Jeanne’s presentation is called “Throw Away All The Rules. Now What Process Do You Follow?.” The conference is being held in Las Vegas and it’s not too late to register to attend.

on oracle requiring course for Java hands on exams

I learned that Oracle is adding a course requirement to the developer and architect certifications. thanks to this CodeRanch thread.  I’m glad I already completed the SCEA/OCMJEA. For facts and updates see the CodeRanch thread.  The first post is being updated as we learn more about the details.  This blog post is my thoughts on it along with a comparison to other certs.

What does Oracle hope to gain by the change?

The official statement/FAQ says,

Many Oracle certifications require hands-on course attendance as a part of the certification path. The course requirement is being added to these certification paths to bring them in line with Oracle Certification Program’s standards for the levels of certification under which they fall.

Oracle blogged about this for their Oracle exams.  The gist of the blog is that less people take the test with a required course but it cuts out cheaters.

Other possibilities:

  1. It’s a way for Oracle to make more money. (Oracle denies this in the blog)
  2. It makes the certification rarer and more valuable.  (This didn’t work out for Spring – see section below)
  3. It’s a way for Oracle to quietly retire those certifications from “lack of demand” or reinvent them into something else.

Things I find odd:

  1. They aren’t the right courses!  For the architect exam, you can take Intro to Java, Intro to Modeling, JEE development or JEE architecture.  I’ve paraphrased the names to make it easy to see that only one or two are things that apply to an architect.  And all of them are something someone should know before taking the exam.  I wouldn’t have been interested in going to any of those classes as I already know that material and it would have been a waste of time/money.
  2. Oracle doesn’t require a mandatory course for their developer exams.
  3. The Oracle 11g Master exam requires a two day hands on course to pass.  I think this is what discourages cheaters, not the class.  In our world, the equivalent would be a longer exam that has you develop or design something new in person.  Incidentally, the SCJP Plus that Sun didn’t proceed with would have gone in that direction.  (alebeit not at a master level)
  4. On the Oracle side, Oracle has declared that developer exams don’t go in the master category.  The table shows they are all that professional or specialization/expert level.  And no, most of them don’t require training.  So I can be a Peoplesoft Expert without training but not a developer?
  5. An official course makes more sense for a product than development.  (Oracle knows their database better than anyone.)

But Spring requires a course

The SpringSource developer exam (see my comments) has “required” completion of their course since the exam’s inception in 2008.  Then they got rid of the grandfather option and everyone is required to take the course.  Which of course means the exam serves as a final exam for the course and is of significantly less value.  Not the best analogy.