Friday, October 31, 2014

Java EE process cycles and server availability

When we normally talk about the Java EE cycle time, we talk about the time it takes between major revisions of the spec. E.g. the time between Java EE 6 and Java EE 7. While this is indeed the leading cycle time, there are two additional cycles that are of major importance:
  1. The time it takes for vendors to release an initial product that implements the new spec revision
  2. The time it takes vendors to stabilize their product (which incidentally is closely tied to the actual user adoption rate)

In this article we'll take a somewhat closer look on the time it takes vendors to release their initial product. But first let's take a quick look at the time between spec releases. The following table lists the Java EE version history and the delta time between versions:

Java EE delta times between releases
Version Start date Release date Days since last release Days spent on spec
1.2 - 12 Dec, 1999 - -
1.3 18 Feb, 2000 24 Sep, 2001 653 days (1 year, 9 months) 584 (1 year, 7 months)
1.4 22 Oct, 2001 12 Nov, 2003 779 days (2 years, 1 month) 751 (2 years)
5 10 May, 2004 11 May, 2006 911 days (2 years, 6 months) 731 (2 years)
6 16 Jul, 2007 10 Dec, 2009 1310 days (3 years, 7 months) 878 (2 years, 4 months)
7 14 Mar, 2011 28 May, 2013 1266 days (3 years, 5 months) 806 (2 years, 2 months)
8 17 Aug, 2014 ~May, 2017 (*) 1461 days days (4 years) (*) 1015 (2 years, 9 months) (*)

As can be seen the time between releases has been steadily increasing, but seemed to have been stabilized to approximately three and a half years. The original plan was to release Java EE 8 using the same pace, meaning we would have expected it around the end of 2016, but this was later changed to H1 2017. "H1" not rarely means the last month of H1 (often certainly not the first 3 months, or otherwise Q1 would be used). This means around May 2017 is a likely release date, pushing the time to a solid 4 years.

It may be worth emphasizing that the time between releases is not fully spend on Java EE. Typically there is what one may call with respect to spec work The Big Void™ between releases. It's a period of time where there is no spec work being done. This void starts right after the spec is released and the various EGs are disbanded. The time is used differently by everyone, but typically it's used for implementation work, cleaning up and refactoring code, project structures, tests and other artifacts.

After some time (~1 year for Java EE 6, ~5 months for Java EE 7) initial discussions start where just some ideas are pitched and the landscape is explored. After that it still takes some time until the work really kicks off for the front runners (~1 year and 5 months for Java EE 6, ~1 year and 3 months for Java EE 7).

Those numbers are however for the front runners, a bunch of sub-specs of Java EE start even later than this, and some of them even finish well before the release date of the main umbrella spec. So while the time between releases seems like a long time, it's important to realize by far not all this time is actually spend on the various specifications. As can be seen in the table above, the time actually spend on the specification has been fairly stable at around 2 years. 1.3 was a bit below that and 6 a bit above it, but it's all fairly close to these two years. What has been increasing is the time taken up by The Void (or uptake as some others call it); less than a month between 1.3 and 1.4 to well over a year between 5 and 6, and 6 and 7.

As mentioned previously, finalizing the spec is only one aspect of the entire process. With the exception of GlassFish, the reference implementation (RI) that is made available at the same time that the new spec revision becomes available, the implementation cycle of Java EE starts right after a spec release.

A small complication in tracking Java EE server products is that various of these products are variations of each other or just different versions taken from the same code line. E.g. WASCE is (was) an intermediate release of Geronimmo. JBoss AS 6 is obviously just an earlier version of JBoss AS 7, which is itself an earlier version of JBoss EAP 6 (although JBoss markets it as a separate product). NetWeaver is said to be a version of TomEE, etc.

Also complicating the certification and first version story is that a number of vendors chose to have beta or technical preview versions certified. In one occasion a vendor even certified a snapshot version. Obviously those versions are not intended for any practical (production) use. It's perhaps somewhat questionable that servers that in the eyes of their own vendors are very far from the stability required by their customers can be certified at all.

The following two tables show how long it took the Java EE 6 Full- and Web Profile to be implemented for each server.

Java EE 6 Full Profile server implementation times
Server Release date Days since spec released
GlassFish 3.0 10 Dec, 2009 0
* JEUS 7 Tech Preview 1 15 Jan, 2010 36
WebSphere 8.0 22 June, 2011 559 (1 year, 6 months)
* Geronimo 3.0 BETA 1 14 November, 2011 704 (1 year, 11 months)
WebLogic 12.1.1 1 Dec, 2011 721 (1 year, 11 months)
Interstage AS 10.1 27 December, 2011 747 (2 years)
* JBoss AS 7.1 17 Feb, 2012 799 (2 years, 2 months)
(u)Cosminexus 9.0 ~16 April, 2012 858 (2 years, 4 months)
JEUS 7.0 ~1 June, 2012 904 (2 years, 5 months)
JBoss EAP 6 20 June, 2012 923 (2 years, 6 months)
Geronimo 3.0 13 July, 2012 946 (2 years, 7 months)
WebOTX AS 9.1 30 May, 2013 1267 (3 years, 5 months)
InforSuite AS 9.1 ~July, 2014 ~1664 (4 years, 6 months)
* denotes a server that's a tech preview, community, developer preview, beta, etc version

Java EE 6 Web Profile server implementation times
Server Release date Days since spec released
* JBoss AS 6.0 28 December, 2010 322 (10 months)
Resin 4.0.17 May, 2011 507 (1 year, 4 months)
* JBoss AS 7.0 12 July, 2011 579 (1 year, 7 months)
* TomEE beta 4 Oct, 2011 663 (1 year, 9 months)
TomEE 1.0 08 May, 2012 880 (2 years, 4 months)
* JOnAS 5.3.0-M8-SNAPSHOT [14 Nov, 2012 ~ 07 Jan 2013] 1070~1124 (~3 years)
Liberty 8.5.5 14 Jun, 2013 1282 (3 years, 6 months)
JOnAS 5.3 04 Oct 2013 1394 (3 years, 9 months)
* denotes a server that's a tech preview, community, developer preview, beta, etc version

As we can see here, excluding GlassFish and the tech preview of JEUS, it took 1 year and 6 months for the first production ready (according to the vendor!) Java EE 6 full profile server to appear on the market, while most other servers appeared after around two and half years.

Do note that "production ready according to the vendor" is a state that can not easily be quantified with respect to quality. What some vendor calls 1.0 Final, may correspond to what another vendor calls 0.5 Beta. From the above table it doesn't mean that say WebLogic 12.1.1 (production ready according to its vendor) is either more or less stable than e.g. JEUS 7 Tech Preview 1 (not production ready according to its vendor).

The Java EE 7 spec was released at 28 May, 2013, which is 522 days (1 year, 5 months) ago at the time of writing. So let's take a look at what the current situation is with respect to available Java EE 7 servers:

Java EE 7 Full Profile server implementation times
Server Release date Days since spec released
GlassFish 4.0 28 May, 2013 0
* JEUS 8 developer preview ~26 Aug, 2013 90 (2 months, 29 days)
* JBoss WildFly 8.0 11 Feb, 2014 259 (8 months, 14 days)
Hitachi AS (Cosminexus) 10.0 19 Dec, 2014 570 (1 year, 6 months)
Liberty 25 Jun, 2015 758 (2 years, 1 month)
WebLogic 12.2.1 25 October, 2015 880 (2 years, 5 months)
JBoss EAP 7.0.0 10 May, 2016 1078 (2 years, 11 months)
* denotes a server that's a tech preview, community, developer preview, beta, etc version

With quite a few entries present already we can see that those largely follow the same pattern as the Java EE 6 implementation cycle. (I'll be updating the table above as new certified servers come in)

GlassFish is by definition the first release, while JEUS is again the second one with a developer preview (a pattern that goes all the way back to J2EE 1.2). There's unfortunately no information available on when JEUS 8 developer preview was exactly released, but a blog posting about this was published at 26 aug, 2003 so I took that date.

For JBoss the situation for Java EE 7 compared to EE 6 is not really that much different either. WildFly 8 was released after 259 days (the plan was 167 days), which is not that different from JBoss AS 6 which was released after 322 days. One big difference here though is that AS 6 was only certified for the web profile, while in fact practically implementing the full profile. The similarities don't end there, as just as with Java EE 6 the eventual production version (JBoss EAP 6) wasn't based on JBoss AS 6.x, but on the major new version JBoss AS 7. JBoss EAP 7 is not based on JBoss WildFly 8.x, but on JBoss WildFly 10.0. Where JBoss EAP 6 took 2.5 years to be released, JBoss EAP 7 took a little longer, but not that much; nearly exactly 3 years.

Hitachi AS was the first implementation of Java EE 7 that is commercially supported by its own vendor, but outside Japan Hitachi AS is not that well known. For the rest of the world IBM's Liberty was the first one, relatively speaking closely followed by Oracle's flagship server WebLogic.

This means that currently (mid 2016) all three big vendors have a supported Java EE 7 product available.

If history is anything to go by, we may see one or two additional Java EE 7 implementations in a few months, while after a little more than a year from now most servers should be available in a Java EE 7 flavor. At the moment of writing it looks like Web Profile implementation TomEE 7.0 indeed isn't that far away. It took TomEE 2 years and 4 months for Java EE 6. For Java EE 7 that will be at least 3 years, but hopefully not that much longer.

Arjan Tijms

No comments:

Post a Comment