On ColdFusion and its support for Java 9, 10, and 11
Note: This blog post is from 2018. Some content may be outdated--though not necessarily. Same with links and subsequent comments from myself or others. Corrections are welcome, in the comments. And I may revise the content as necessary.(This post was written originally in May 2018, 2 months before the release of CF2018 and a few months before the release of Java 11. I have updated it some to reflect changes in that.)
Wondering about CF support for Java 9, 10, 11, or later here in 2018 (with respect to CF 2018, CF 2016, CF 11, or earlier)? Did you know that Java 9 and Java 10 each have only 6-month lives? Seriously. And did you know that Java 9 is already no longer updated, while Java 8 still is (into next year), and that Java 11 is due to come out in September 2018? It can be quite confusing if you've not been paying attention to Oracle's new release model.
What does all this mean for Adobe and CF, and CF users? What versions of CF do, do not, and/or may support these various recent Java versions? The good news is that CF 2018 will come out running (and the second public beta does come running) on Java 10 (no word yet on Java 11). But what about other recent CF versions?
Read on for more.
Update: CF2018 did come out as expected in July 2018, and at first it came out supporting Java 10. Then after Java 11 came out in late 2018, Adobe updated both CF2018 and CF2016 in early 2019 to support Java 11 (or you can continue to use Java 8 while it's supported by Oracle). Adobe also announced in Jan 2019 that they had reached an agreement with Oracle licensing Java 11 and updates to 8 for commercial use with CF. You may want to read my post on the CF portal discussing further when the April 2019 updates for Java 8 and 11 were released by Oracle.
I leave what I wrote below for posterity/historical perspective.
While I am writing this in mid-2018, I will come back and update the links and info about CF2018, as it's released, and the JVM versions, as things change over time.
Why we need to know this stuff, and why it's a bit more challenging recently
If you're using ColdFusion (and especially if you admin it), you may be aware of how Adobe has a process to formally support a given new Java (JVM, JDK, or JRE) version before you can/should move to it.
And while normally there have been *years* between Java releases, suddenly Oracle has gone to a process where Java 9 and 10 have come out within the past few to several months, and will each be updated for only 6 *months*, before Java 11 comes out in Sep 2018 (and is then due to "live"/be updated until 2023). After Sep 2018, both Java 9 AND 10 will be considered obsolete (no longer publicly updated by Oracle), just like Java 7 is already.
And yet Java 8 (which existed before this change by Oracle) WILL continue to be publicly supported and updated by Oracle until Jan 2019! Confused? It's understandable. I hope to clarify some things.
And most important: what does all this mean for ColdFusion (ColdFusion 2016 or below, or the new ColdFusion 2018 now in beta), if you are wanting to run Java 9, 10, or 11? Well, that's what I address below. (And for some readers, the info above about the timing of Java 9 and 10 may be enough of an easter egg to help them better understand the situation we and Adobe are in.)
Finally, before moving on, I offer a table at the conclusion to try to summarize the support of various Java versions in various CF versions, but don't just skip there, if you want to understand the why's and when's and wherefor's.
First, what does the ColdFusion 2018 beta support?
This all started (as many of my blog posts do) as a simple reply to an Adobe forum post from someone experiencing a bug when they tried to update the CF2018 Beta (with its update 1) to use Java 10.
I explained to him first how that was simply not listed as being supported. This was at the time of the first public beta, which supported only Java 8 or 9. And I pointed him to the support matrix document for the beta, as is linked to from that page above, which clarifies that. (If you try to find that info in that PDF, look for "jdk"--not "java" or "jvm" or "jre", to see the indication of that. Grr.)
Update: The second CF2018 public beta does come on Java 10?
The natural next question (when I first posted this, during that first public beta) was "why is Adobe not yet supporting Java 10 in CF 2018?"
The good news is that the second CF2018 beta does come with Java 10. The docs don't currently indicate it, but I confirmed it upon installation, where it's running Java 10.0.1.
As for what I'd written before, it explains a bit the delay, and so I will leave here what I wrote, but in this blockquote:
The timing of things about Java 9 and 10 does explain it the delay.So first, yes, the CF team is well aware that Java 10 is now out (and that 11 is coming). Before we deride them for not supporting that in CF 2018, or Java 9 in CF 2016 or CF 11, we need to consider the situation that I mentioned above: Java 9 and 10 both have had only VERY short lives.
Java 9 was released Sep 2017 and public updates ended in March 2018, while Java 10 then came out in March 2018 and public support/updates for it will end in Sep 2018! That's only 6 months each between release and end of public updates, as detailed at the Oracle Java SE Support Roadmap.) Holy smokes!
And the Adobe engineers had already started working on (and indeed building/releasing) the private and then public (beta) prerelease of CF2018 well before Java 10 came out 2 months ago, so they chose to update it to support Java 9 in getting the beta out the door last month. Changing since then to provide formal support for Java 10 is not trivial. (Consider the very bug reported by the gent above on the Adobe forum in trying to force it, let alone all the testing on all platforms they must do.)
So that's why they DID implement Java 9 support in CF2018.
[Update:] And I learned after making this blog post that they DO plan to support Java 10 in CF2018. Adobe engineer Suresh Jayaraman responded to the forum post above, saying:
===================== Regarding the official support for Java 10 for CF 2018 , the current plan is to support it even though we have shipped the installers with Java 9 JRE .. we are contemplating on switching to Java 10 .BTW , even the Public beta build was certified in Java 10 before release so you are safe to continue to test with Java 10
(Sadly, I can't seem to find a way to provide a direct link to the specific comment, neither via a feature in the blog UI or as any sort of anchor in the underlying html. Also, FWIW, the problem raised by the poster of the forum entry turned out not about Java 10 after all, because again, as Suresh notes, CF2018 was even certified with Java 10, though it CAME with Java 9 initially.)
And what about Java 9 or 10 support in CF2016 or 11? When is that planned?
As for getting Java 9 or 10 support into CF2016 or CF11, I suspect it may come.
But I can understand that since Java 9 came up RIGHT while they were in the middle of getting the CF2018 (private and then) public prerelease out the door, they couldn't give the attention needed to get Java 9 or 10 running on CF2016 or 11.
So when will the support Java 9 or 10 on CF 2016 or CF 11 (which is still supported into 2019)? I don't know (and to be clear, I am not on the Adobe team and currently have no more insight into the timing of the release of CF 2018 or support of specific Java versions than others.)
I wouldn't be surprised if they opted to just wait to Java 11, due in September. Or they may well come out with a CF11/2016 update that supports Java 10, since it did come out in March 2018 and will live to Sep 2018. I won't be surprised if they opt to skip Java 9 for them, since Oracle's public support for it has already stopped.
But you can see what a pickle they are in, with these very short Java releases.
What about Java 11?
As for when Java 11 then comes out in Sep 2018, I think it's safe to say that it still won't be supported right away (by either CF 2018, CF 2016, or if at all in CF 11).
As many readers will know, Adobe typically provides a CF update that adds formal support for a new major Java version a few to several months after it is released, which could mean 2019 (yes, ugh), for all 3 then-current CF editions. (And CF11 support will end in 2019, per the Adobe product support matrix.)
I don't like that delay between Java releases and CF updates supporting them, either. And yes, Adobe are aware they could obtain pre-release versions at Java Early Access Downloads. My sense, from having observed things, is that they don't seem to feel they can adequately start working with that in advance as far as folks would wish, so that the time between final Java release and initial CF support would be shorter.
If there's any good news in all this about Java 11, it's that since Java 11 is due to be an LTS ("long term support") release by Oracle, (per that Oracle Java Support Roadmap above) and so it's slated to have public updates until 2023! That should even suffice to get us even well into CF2020 or whatever it may be called.
What about Java 8, or 7 or 6?
Before closing, some future readers may find this blog post when trying to find info about CF support of another older Java (or jdk, jre, or jvm) version. This has been addressed by Adobe in various two posts in 2014:
- About Java 8, CF 2016 supports it out of the box (as does CF 2018). For a discussion of CF 10 and CF 11 support (and what CF update you must be on for Java 8 to be supported, or what installer of CF11 included it), see this Adobe blog post
- As for Java 7 or 6, for a discussion of support its support in CF 9, 10, or 11, see this Adobe blog post.
Speaking of Java 8, if you are on CF 9 or earlier and needing to update to Java 8 or above (such as for TLS support), which CF9 and earlier did not support, just know that while running CF 9 and earlier never FORMALLY supported Java 8, many have gone ahead and updated the JVM (see more on doing that, below), and it's worked ok.
Again, Adobe doesn't even SUPPORT CF 10 or earlier anymore, so whether CF 9 or earlier "formally support" Java 8 doesn't matter so much as, "does updating it solve a problem for you and not cause one?". In this case, you're on your own to try (but I can help you, whether to implement the JVM change or if you run into trouble after the fact.)
Conclusion on CF support of Java 9, 10, and 11 in mid-2018
In conclusion, as for all this about Java 9 and 10, let's just consider it a rough patch, caused as much by Oracle's odd choice to make these have only 6-month long lives. Adobe (and any vendor who bundles or requires support of Java) is kind of stuck, and we will suffer a bit because of it. But this, too, shall pass.
As for Java 11, I suspect we will soon settle into it being supported on ColdFusion 2018 and ColdFusion 2016 (perhaps even ColdFusion 11) within some months of it release, and we'll then be back to a more settled state for a while.
Table of CF vs Java Versions
If it helps, here is my crack at a table of what versions of CF support what versions of Java, at this writing. This is based on either the CF Support Matrix documents for each CF version, or Adobe blog posts I have found. (Again, I will try to keep this post updated as time passes and things change. And I'm of course open to correcting any mistakes I have made.)Note I have marked as "Y" where it supported it at the release of that CF edition. I mark it as "N" where either it's stated it won't be supported or it's not likely ever to be (in my opinion). I have marked "Not yet" where I think it's likely or could come. I have marked "conditionally" where it depends on an update or particular installer (sometimes the initial installer for a release did not support a given JVM, but a later "refreshed" one DID, in addition to later updates adding such later JVM support).
Update: I offer an updated version of this table in my more recent Adobe CF portal post I'd mentioned above. Later in 2019, Adobe released support for Java 12, and I have updated the table in that newer post to reflect that, but I have a post on why you should probably NOT update to Java 12 for use with CF, since it was EOL before the CF support was released.
CF Version | Java 11 | Java 10 | Java 9 | Java 8 | Java 7 | Java 6 |
---|---|---|---|---|---|---|
CF2018 | Not yet | Y | Y | Y | N | N |
CF2016 | Not yet | Not yet | Not yet | Y | N | N |
CF11 | Not yet | Not yet | Not yet | Conditionally | Y | N |
CF10 | N | N | N | Conditionally | Conditionally | Y |
CF9 | N | N | N | N | Conditionally | Y |
Note that Adobe has said in their blog posts above and elsewhere that you are always free to run any MINOR java version of a MAJOR version they support. So for instance, with CF2016, you can be on any version of Java 8 (including Java 8 updates that are still coming out in the future), because CF2016 supports ANY minor version of Java 8. But again (for now) you can NOT go UP to Java 9 or above, at least not as formally supported (nor are earlier Java versions formally supported on CF2016).
Oh, and I'll add that if you are ever interested in updating the JVM that CF uses, that can be a simple process, but covered with thorns which could leave you thinking CF is dead. More good news: I have a blog post to help you, best read before you suffer but written to help when you're in panic mode: CF911: 'Help! I've updated the JVM which ColdFusion uses, and now it won't start!'.
Hope all that helps. Comments welcome.
For more content like this from Charlie Arehart:Need more help with problems?
- Signup to get his blog posts by email:
- Follow his blog RSS feed
- View the rest of his blog posts
- View his blog posts on the Adobe CF portal
- If you may prefer direct help, rather than digging around here/elsewhere or via comments, he can help via his online consulting services
- See that page for more on how he can help a) over the web, safely and securely, b) usually very quickly, c) teaching you along the way, and d) with satisfaction guaranteed
https://coldfusion.a...
This little hiccup in Java versions is rather confusing. I'm wondering is Adobe and other companies are essentially waiting for Java 11 to drop before releasing support for new Java versions. I can envision a scenario that Java 10 might even be skipped. Crazy times.
Wil
Suresh Jayaraman said:
=====================
Regarding the official support for Java 10 for CF 2018 , the current plan is to support it even though we have shipped the installers with Java 9 JRE .. we are contemplating on switching to Java 10 .
BTW , even the Public beta build was certified in Java 10 before release so you are safe to continue to test with Java 10
=====================
And for any who may wonder where Adobe shared that info, it was in a reply to Benjamin in the thread that started the discussion (albeit titled about a specific error he was getting, which turns out not to have been about Java 10 after all):
https://coldfusion.a...
Sadly, I can't seem to find a way to provide a direct link to the specific comment from Adobe, whether via a feature in the UI or the underlying html. But interested folks can search for that quote from Adobe there, if interested.
I hope to get some time later today to fold this observation into my blog post, to save readers having to find it here in the comments. :-)
Before we installed a different Java version in production we would need extensive jdbc testing...
1) First, I have not encountered any instances of an update to the JVM cause a problem with the JDBC drivers in CF. Now, to be clear, I am referring to a supported JVM updated and the built-in JDBC drivers, though I would be surprised also to hear of it even with downloaded JDBC drivers.
Now, I suppose if one jumped from Java 6 to 8, for instance (as was possible in CF11), it could be that a driver in use that worked with Java 6 might not work with Java 8.
But again in this blog post we are not even talking about one upgrading the JVM, per se. We're talking about the state of CF support of those new JVM versions, 9, 10, and 11. To be clear, I was not proposing people move up to them, at least not until Adobe did formally support them.
So while you warn people to beware moving up to "any java release" due to issues with drivers and without "extensive jdbc testing", I would not make such a broad warning, for my reasons just stated.
2) Second, you refer to the help I offered (back in 2016), and thanks for the kind regards. And the implication is that I might recall the trouble you faced about a JVM update and JDBC driver issues. But I must say that from my notes, I don't see that.
I do see first that in March there was an issue where you brought me in for some emergency help and it turned out someone had run an automated JVM update which had removed the old version that CF pointed to (and we fixed that easily).
Then I see in August we did update the JVM (manually), and in doing that (and updating the jetty.lax also to point to that, for the CF Add-on Service, as I discuss in my other blog post), we happened to find there was already an issue with that not starting, which we fixed by my giving you a stock neo-document.xml file.
Neither of those were about JDBC driver issues hurt by the JVM udpdte, at least from my notes. Do you recall differently?
Or could this have been something you experienced on your own, and not something I helped with? I do see also that in Mar 2017 you shared an email about a problem you had with a CF update (not a JVM update), which fortunately you resolved (and reported was a permissions issue).
BTW, if anyone may think this is too much of "airing dirty laundry" on the blog here about Paul's past issues, I am hopeful that Paul will not feel that way. These are issues that happen to people all the time that I help resolve. If anything, it could be helpful for some readers to see such problems can be easily solved.
I do realize his goal is simply to help people who may be contemplating a JVM update. Again, that's not really the point of this post. But since Paul raised these concerns, and referenced past work we had done with troubleshooting, I wanted to share my understanding of things, for his sake and for all who may be reading along. :-)
It's certainly an interesting situation that we face. If I were to guess, I'd think the choices will be:
a) they license the future versions (which they bundle with CF), in which case we can get updates because we're using the Java binary under THEIR licensing of it
b) they stop bundling Java and make US get it ourselves. Other apps do that, like Tomcat. And the good news there is that there is the OpenJDK (from Oracle), and perhaps Adobe will certify CF in the future to support that and its later versions (like they do eventually when new Java versions have come out).
Again, they will need to confirm that. For those interested in a bit more on this topic, you can just google: oracle java licensing 2019 and find PLENTY. But I found a nice, concise yet complete discussion of the matter here:
https://www.azul.com...
Any Adobe folks following along who may be able to help us out here? Especailly with a post to clarify things on your blog?
- Steve
https://coldfusion.a...
For completeness sake, my post discussing Corretto as an option back then is here:
https://www.carehart...
And to be clear, as you say, Adobe never has certified CF for use with it (and seemingly won't), but some have reported it's worked. And I appreciate your regard for it as being optimized for AWS.
Even so, it would seem that those who CAN use the Oracle jvm SHOULD use it, until some distinctive benefit of Corretto is identified. Or do at least be aware that you are operating on an unsupported jvm, so unexpected problems may be more challenging to resolve, and Adobe won't help.