Java EE 6 Gets it Right |
|

The Java EE 6 proposal (JSR 316) was published today. I believe that this will be the most important revision of the platform since it was released nearly 10 years ago, and that it should be welcomed by users of the technology. Interface21 is happy to be a supporter of this JSR, and I am looking forward to contributing to it.
Java EE (known as J2EE for most of its history) has played a valuable role in creating a market for Java middleware. However, over those 10 years, important issues have emerged with the platform, such as:
- The need for a Java EE compliant server to be bloated with a range of functionality that is of little interest to the vast majority of users
- The fact that enterprise requirements have changed since J2EE was envisaged and that a "one size fits all model" is less and less appropriate
- The fact that enterprise Java has been greatly strengthened by the emergence of frameworks (especially in open source) that make developers more productive and their production applications more efficient and maintainable
- New challenges such as Ruby on Rails, and even .NET, showing that, in a time of rapid change and innovation, a cosy 2-3 year release cycle imperils the entire platform
Java EE 6 is an important revision of the platform that has the potential to address all of these issues.
It may also have the potential to address another issue: the fact that if EE vendors need to certify against a huge range of functionality that most of their customers will never use, meaning that it's hard for them to keep up with the specs, that it's a challenge to make stable upgrades, and–importantly–that the likelihood of new entrants in the Java EE market is nil. The last point is concerning, as it's not in the interests of users for EE servers to be a cosy franchise for the incumbents. To bear out the difficulty of doing a new platform release: At this point, to my knowledge, BEA is the only one of the market leaders, to be Java EE certified, although the Java EE 5 specification has been final for months. And the most valuable new parts of Java EE 5, such as JPA, were ready in WebLogic for months before the final release, unable to be released in a GA product while issues were resolved around some technologies that most WebLogic users will probably never touch.
Enough of my interpretation: let's go straight to the proposal and hear from the source:
In the past 8 years, the Java EE platform has grown and matured, and is now able to cover a wide range of enterprise and web application development needs. In addition, the Java EE platform has fostered a vibrant community and marketplace for additional technologies, frameworks, and applications that work with the platform. Some of these provide facilities that are missing from the platform. Others provide alternatives to platform facilities. A major theme for this release is to embrace and support those technologies as part of the overall Java EE landscape, while also continuing to simplify the platform to better target a wider range of developers. To that end we propose two goals for this release – extensibility and profiles.
A few years ago, this would have been heresy. I was a heretic at the time, but I never wanted to be a heretic. Java EE is finally taking into account the bigger picture, instead of imagining that it would ever provide a good solution for all user requirements. With Java EE 6, the EE platform is partly reintrepeted as the central point of agreement underpinning a choice of solutions: the fertile earth that lets a thousand flowers bloom. It's been encouraging seeing this kind of bigger picture thinking grow within Sun: consider their embrace of JRuby, and recognition that, like the EE platform, the JVM is the base for an ecosystem rather than being tied to a single language.
It would not be appropriate for the Java EE platform to grow without bound to include all the interesting and useful technologies desired by web and enterprise application developers. Instead, we believe it is desirable to enable more of these technologies to cleanly layer on or plug in to Java EE application servers. By adding more extensibility points and more service provider interfaces, these other technologies can plug in to platform implementations cleanly and efficiently, and be just as easy to use for developers as the facilities that are built into the platform.
Again, great stuff. The fallacy that technologies shipped with the platform were "better integrated" with the server infrastructure than these "interesting and useful technologies" was long used by server vendors to confuse users and prevent innovation. (Fortunately, nearly all of them have long since stopped doing so: for example, consider IBM's part in the certification of Spring on WebSphere).
The key here is innovation. Some technologies naturally progress at different rates: notably, on one hand, server infrastructure and wire protocols (which change fairly slowly and benefit from standardization); as opposed to the "interesting and useful" technologies that sit on top of it that need to change at a way faster rate and which standardization has largely failed with respect to.
The reach of the Java EE platform has become so broad that it has lost some of its original focus. To refocus the Java EE platform on particular classes of developers and applications, we propose the introduction of Java EE platform Profiles. Profiles will reference the Java EE platform, as defined by the JCP process, and may include a subset of Java EE platform technologies, additional JCP technologies not part of the base Java EE platform, or both. In addition to defining the base Java EE platform, this specification will define the rules for referencing Java EE platform technologies in Java EE Profiles.
Profiles are a great step forward. At last, users will have the power to shop around for what they want, rather than what a specification committee thought they wanted, 2 years before the users start building the application. It's high time that a Soviet style command economy was replaced by some healthy competition. To follow on from my previous point: whereas in previous revisions, the EE platform tried to dictate how you built applications a bit like a Soviet Five Year plan, in EE 6 the role of the platform is more like that of the framework of laws in a Western country, that ensure that people can compete and acts freely as individuals, while agreeing on the rules of the game for the advantage of all.
It's clear that users of enterprise Java technologies have already identified a number of profiles. Today's web applications, SOA applications and financial middleware, for example, have quite different requirements of server infrastructure, although different parts of Java EE have value to offer for each of them. In particular, the batch and headless middleware users have been neglected by Java EE thus far; at last, there is hope for them in sight within the potential of Java EE 6.
The use of profiles is one tool to address the ever increasing size of the Java EE platform. It's also the case that some technologies included in the Java EE platform are no longer as relevant as they were when they were introduced to the platform. There needs to be a way to "prune" these technologies from the platform in a careful and orderly way that minimizes the impact to developers using these technologies while allowing the platform to grow even stronger.
I hope that this is followed through. Let's suppose you have a Java EE 5 server (which your vendor may or may not be able to provide you in an acceptable timeframe). You are the proud owner of a product that supports EJB CMP 2.0 and even 1.1. Remember the public instance variables in CMP 1.1?? You can still enjoy them. This is ugly prehistory that deserves to be forgotten, rather than bloating today's products. If there are any applications out there still running on this stuff, they can crawl out the last years of their existence on an older server until someone puts them out of their misery.
It is great to read in the proposal "EJB CMP – effectively replaced by Java Persistence". A big theme about this release is making EE more relevant in the world of 2007, and removing or making optional old failures is a great statement of that, with real practical benefits for users and vendors who bring products to them.
Interface21 is looking forward to working with Sun and the other companies and individuals on the EE 6 umbrella group and related expert groups to make EE 6 as strong a platform as it can be.
As I said, I never wanted to be a heretic. Essentially the vision of J2EE without EJB (which I coauthored with Juergen Hoeller) was not to trash J2EE, but to help it to prosper by being honest about the bad apples in the barrel and the need for standardization to be tempered by innovation. The Java EE 6 proposal seems to allow this to happen, and I am delighted that I can join the congregation. Let me quote from that book, most of which was written almost 4 years ago. Note the emphasis not just on criticizing EJB but stressing that the big picture of J2EE is what really matters:
J2EE is still a relatively young technology. It’s not surprising that it’s imperfect. It’s time to take stock of where it’s worked, and where it hasn’t worked so well, so that we can eliminate the negatives and enjoy the positives. Because J2EE contains a lot, this essentially means identifying the subset of J2EE that delivers most value, along with some supplementary infrastructure we need to harness it most effectively.
…
You may be wondering, “What’s left of J2EE without EJB?�
The answer is: a great deal. J2EE is much more than EJB. Many J2EE developers believe otherwise, and will tell you so when they see this book on your desk, but a dispassionate analysis of what EJB does, and what J2EE does overall, shows that EJB is only a part of a much bigger and more important picture. J2EE is essentially about standardizing a range of enterprise services, such as naming and directory services (JNDI), transaction management offering a standard API potentially spanning disparate transactional resources (JTS and JTA), connection to legacy systems (JCA), resource pooling, and thread management. The true power of J2EE lies in these services, and this standardization has done great service to the industry.
I believe that supporting Java EE 6, given its aims, is consistent with my position on J2EE, expressed in J2EE without EJB and elsewhere. For example, another central theme of J2EE without EJB is the role that standardization should play and where it's better to have competition among frameworks to foster innovations:
While an open (or at least partially open) specification process is positive, I think one of the biggest advantages of J2EE over .NET is the richness of Java/J2EE open source software…
As we've seen, orthodox wisdom on J2EE architecture is out of step with real-world experience. Some of the J2EE specifications are also, to a lesser extent. I feel that we're at an important crossroads in the evolution of the J2EE platform. It clearly needs to evolve and innovate to survive and prosper. Yet the specification of the fundamental enterprise infrastructure such as JTA, JAXB, JDBC and the Java language itself means that there's scope to innovate on how that infrastructure is accessed without destroying the benefits of a consistent, standard approach to the toughest, low-level problems of enterprise software.
When I wrote those words in 2003, I did not anticipate that the Java EE expert group would eventually use the term "extensibility" to capture the same idea. It's a pleasant surprise.
I believe that the enterprise Java community should welcome Java EE 6, and should welcome Sun's willingness to move with the times and take the choices that will strengthen the enterprise Java platform as a whole. There's a lot of good in J2EE/Java EE, but some of the problems have obscured it. Java EE 6 should change that!
Similar Posts
- VMware vFabric Powers Cloud Application Platform Vision
- The Biggest Loser's Next Contestant: Java Bloatware
- Job Trends: Tomcat, Spring, Weblogic, JBoss, EJB
- Spring 3 on a Java EE 6 server
- dm Server project moves to Eclipse.org









Daniel Fernández Garrido says:
Added on July 4th, 2007 at 8:59 amThis is great news, indeed.
It is not only that these steps would make the Java "ecosystem" more healthy and thus benefit those of us who had somehow started to divert from the "right, standard path" of J2EE. IMHO this also means that JEE has now a real chance to survive (and grow!), now that so many us had started to substitute the word "J2EE" by simply "Java" when describing our work.
Good Luck.
Regards,
Daniel.
Shaun Smith says:
Added on July 4th, 2007 at 11:23 amRod,
You can find the list of Java EE 5 certified app servers on the Sun website [1].
And I would be remiss of me if I didn't point out that the Oracle Application Server is EE 5 certified and provides excellent support for Spring. See the OracleAS/Spring FAQ [2] and the Oracle & Spring page [3] for details.
–Shaun
[1] http://java.sun.com/javaee/overview/compatibility.jsp.
[2] http://www.oracle.com/technology/tech/java/oc4j/1013/whitepapers/OracleAS_Spring_FAQ.pdf
[3] http://www.oracle.com/technology/tech/java/spring/index.html
Saiyan Sakuraba says:
Added on July 4th, 2007 at 11:57 amIt is a great idea. But we are only at the beginning of that journey.
And I have a feeling it is not gonna be an easy road to get there.
Neil Bartlett says:
Added on July 4th, 2007 at 1:49 pmI applaud the goals of this JSR (more choice, more extensibility) but not the implementation. Profiles are not much of a step forward: they failed in JavaME and they will fail in JavaEE.
"Profiles" and "layers" are profoundly naïve models of software architecture. Real architectures are graphs of interdependent components, not big fat layers sitting one on top of each other. Just look at the rendition of any Spring XML file in SpringIDE!
JavaEE should be based on the "Ã la carte" model, not the "set meal" model. Profiles just give us one or two additional Set Meals to choose from, versus the single choice we had before. Inevitably there will be situations where none of the profiles fits our requirements exactly, so what are we to do? We must either forget about some of our requirements, or introduce bloat by going up to the next layer in the hierarchy.
To do this right, the natural technology to leverage is obviously JSR 291, but regrettably the JSR 316 documents fail to make any reference to it.
Rod Johnson (blog author) says:
Added on July 4th, 2007 at 1:55 pmNeil
It depends on how profiles are used.
This is exactly what I've been arguing for years. It's still not clear to me whether profiles will be fixed (web profile, whatever else profile) or it will be possible to define new profiles. I will certainly be arguing for the latter, which I think will provide an ideal balance of standardization and agility to meet customer demands.
Again, as you can see from Spring OSGi etc, we completely agree. I will certainly be raising the intersection with OSGi in the EE6 Expert Group.
Rgds
Rod
Jim Bethancourt says:
Added on July 4th, 2007 at 2:15 pmHi Rod,
Thanks for the insightful post! What do you think will be "the thing" that will draw / convince folks to move to Java EE 6? There's a lot of apps written still using J2EE 1.4 and the Spring / Hibernate stack, and migrating platforms is not always seen as delivering ROI if "what we've got works". Seeing the rate of both implementation and adoption of JEE 5, do you think there will be a "gotta have" item in JEE 6 that isn't available already?
Thanks,
Jim Bethancourt
Houston JUG President
Rod Johnson (blog author) says:
Added on July 4th, 2007 at 2:45 pmJim
I think EE6 is a different animal to EE5. EE5 was a big migration challenge (hopefully being the last of the monolithic releases); it was not innovative; and it's hardly surprising that it seems to have largely been greeted with a yawn. EE6, OTOH, makes the platform far more relevant by enabling what people actually want in practice to be within the spirit of the specification. It also makes en equally important switch toward seeing the platform as the base for innovation on top, not essentially a brake on innovation by trying to provide the solution to all problems, even if they have already been better solved elsewhere…
I don't know when the timescale will be for EE6 adoption, but the fact that it makes a lot of sense technically has to be a good sign.
Rgds
Rod
Stephan says:
Added on July 5th, 2007 at 2:29 amSeeing I21 joining JSR-316 is for me a very important (historic) strategic move which I applaud 100%!!
Does means we're finally seeing an official convergence of the lightweight enterprise 'movement' and Java EE 'standards' body… this is great news for us (enterprise) Java developers
Peter Pilgrim says:
Added on July 5th, 2007 at 4:58 amHere, here.
I think this involvement will be important with all EE Framework designers and implementers.
Incidentally, I have reported some of topics that were discussed at the BOF special session at SpringONE 2007 in my blog. I agreed with the opinion that while WAR file were relatively painlessly to install from one application server to another vendor's one, EAR are not portable. There are not portable without some repackaging.
Also I think that CommonJ WorkItemManager and TimerManager should be part of Java EE 6. I also think that they should standardise either BEA ApplicationLifeCycleListener or IBM StartUp Beans. Most enterprise applications need application initialisation code at the investment bank clients that I have built software for.
Jonathan Allen says:
Added on July 5th, 2007 at 4:51 pm> To that end we propose two goals for this release – extensibility and profiles.
Wasn't the original problem with J2EE was that there was too much extensibility? I don't see how proposing more extensibility will heil things.
Rod Johnson (blog author) says:
Added on July 5th, 2007 at 8:00 pmJonathan
I don't think the original problem with J2EE was that there was two much extensibility. I've written two books on this, but I think the problems were things like:
- it was too complex to author applications
- some of the ideas frankly didn't work out, such as the ideal of a component model that was inherently remotable, CMP entity beans, the deployment descriptor model…
- the belief, through Java EE 5, that the specification should contain all the answers, from access to wire protocols up to web frameworks
Rgds
Rod
peter says:
Added on July 14th, 2007 at 3:27 amwhy not surport Chinese?
ä¸?支æŒ?䏿–‡ï¼?
Mohamed.Fouad says:
Added on February 27th, 2008 at 5:18 pmRod
Can you give out an idea about the advantages of including Spring in Java EE 6 ?
technology says:
Added on July 17th, 2008 at 8:46 amI still not yet can use springframework, there is which can assist me?
Magnus says:
Added on November 20th, 2009 at 1:56 pmI'm reading http://jcp.org/en/jsr/detail?id=316, this blog, jsr-299, and a bunch of questions start to pop up…
Rod, now is a good time for part II of this blog.