In a series of blog posts here and here, Compuware’s Andrei Iltchenko writes about incompatibilities between different vendor implementations of J2EE. He works on the OptimalJ MDA (Model Driven Architecture) product which generates Java code from language-independent application models. He found unexpected inconsistencies between Sun-certified J2EE application servers, for example:
When we started testing our code generation modules for J2EE web services on one vendor’s application server, we were in for a big surprise. The application server had a non-XML Schema aware web services stack, which effectively meant no proper support for WS-I Basic Profile. Why wasn’t such a major omission caught by SUN’s compatibility test suite for J2EE 1.4?
I was also surprised by his comments since in general Java’s cross-platform, cross-vendor compatibility strikes me as much better than it was in the early days. No doubt Iltchenko stresses this more than most developers, but note his conclusion:
With the differences in implementing the same J2EE 1.4 features I described, one should probably start questioning how feasible it would be to maintain a J2EE 1.4 application that needs to run on more than one application server and not be rigged toward a given vendor.
I have seen this kind of issue all too often with J2EE. While J2EE purports to be a compatible standard, it seems fairly common that applications will not work on different application servers. While Java is good in simpler terms for cross platform, multiple application server functionality, more complex applications using J2EE tend to gravitate to one vendor and become less and less portable. Quite disturbing.
Even different vendors implementations of java can differ in details. When starting one of projects the client noticed he will run it on ibm’s java and we developed and tested using it. Sometimes we tried to run the code on sun java then several tests failed. More hard situation is with application servers, e.g. jboss strictly follows specification, weblogic allows specification violation for customer convenience.