If you have been following Jetty’s adoption of Java 9, you might have read that builds using JDK 9 have started being produced. As the release of JDK 9 looms, developers are no doubt already doing everything they can to test their current implementations and platforms against the available early-access builds.
Here at Webtide, we are no different. We’ve been testing our website on JDK 9 and are happy to report positive results. That said, switching back and forth between JDKs was not as straight forward as you might think, notably when it comes to setting JVM arguments.
Consider the following jvm.mod
file (a custom module located in our jetty.base/modules
directory). We use this module to set JVM arguments when starting a Jetty standalone server.
[exec] -Xms512m -Xmx512m -XX:+PrintGCDetails -Xloggc:logs/gc.log
The problem is that -XX:+PrintGCDetails
is no longer valid in JDK 9. Similarly, the -Xloggc:logs/gc.log
has been deprecated (and the new format is not valid for JDK 8).
While we could change the jvm.mod
file to accept the new values for JDK 9, it does not allow for quick switching back to JDK 8 without editing the module file each time, or copy/pasting in a new module file every time we change JVM version.
To combat this, we created a a dynamic module file that loads a dependent module based on what version of the JVM is found at startup using the Jetty java.version.platform
property.
We still define the module as normal in our jetty.base/start.ini
file:
... --module=jvm ...
But if we examine our jvm.mod
file we now have:
[depend] jvm${java.version.platform}
On startup, once it is determined which version of the Java platform we are running (8 or 9 in this case), it will load one of two module files, either jetty.base/modules/jvm8.mod
or jetty.base/modules/jvm9.mod
. Our jvm8.mod
file is identical to the file we used at the start of this example. The jvm9.mod
file substitutes in the correct values for JDK 9 so that we do not face errors on startup:
[exec] -Xms512m -Xmx512m -Xlog:gc*:file=logs/gc.log
In this way we were able to switch back and forth between JDK 8 and JDK 9 without having to manually change arguments each time.
We hope this helps you with your own testing!
0 Comments