Time for genuine 'write-once, run-anywhere' Java
Oracle and BEA: a new hope?
Even in areas you'd expect the Java EE specification to cover have incompatibilities or inconsistencies. As an example, in an ejb-jar.xml file if an unused <resource-ref> is included then some versions of WebLogic ignore the entry while some versions of WebSphere generate misleading error messages.
Transaction management is another minefield, with different application servers having differing defaults - resulting in strange error messages from applications that might work on WebLogic but throw exceptions relating to nested transactions on WebSphere. There are other examples, such as shared connections, where - depending upon the application server - a connection sharing scheme may be emulated or actually shared. The end result may be that a working application on one server may result in unpredictable behavior on another.
Application servers may also implement the Java specification in differing ways. For example, on WebLogic it is possible to have an interface hierarchy in which the remove (Object primaryKey) method occurs both in an application interface and in the EJBHome interface, both of which are used in the same EJB implementation class. While this is fine in WebLogic, errors are generated by the EJB compiler at deployment time in WebSphere.
So there is considerable variability between different application servers for those aspects of an application that sit outside or on the fringe of the specification. Oracle's purchase of BEA at least raises the possibility of the companies working together either on a consolidated application server or on making the two application servers more consistent. If they do this, it will be a considerable step towards establishing an implicit standard in these areas. This may mean greater consensus around how some of these fringe items should work or be defined.
I suspect IBM is unlikely to follow Oracle in ironing out its differences with BEA. However, others in the field - possibly in the open-source camp - might be able to agree a common model and this may become accepted as an implicit standard over time. This can only be a good thing for those of us tasked with the niggling difficulties in working with different Java containers.®