IGNITE-6735: Fixed JDK version resolution logic to support Java 9. This closes #3005. This closes #3273.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b662afff Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b662afff Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b662afff Branch: refs/heads/ignite-zk Commit: b662afff014c44bef7eeed97c0c49d27fb5ef473 Parents: 9f98ca1 Author: devozerov <[email protected]> Authored: Fri Dec 22 13:03:59 2017 +0300 Committer: devozerov <[email protected]> Committed: Fri Dec 22 13:03:59 2017 +0300 ---------------------------------------------------------------------- .../org/apache/ignite/internal/IgnitionEx.java | 5 ++-- .../discovery/GridDiscoveryManager.java | 16 ++++++------ .../ignite/internal/util/IgniteUtils.java | 27 ++++++++++++++++++++ 3 files changed, 38 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/b662afff/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java index d84f8a9..232476b 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java @@ -189,8 +189,9 @@ public class IgnitionEx { */ static { // Check 1.8 just in case for forward compatibility. - if (!U.jdkVersion().contains("1.7") && - !U.jdkVersion().contains("1.8")) { + int majorJavaVer = U.majorJavaVersion(U.jdkVersion()); + + if (majorJavaVer < 7) { throw new IllegalStateException("Ignite requires Java 1.7.0_71 or above. Current Java version " + "is not supported: " + U.jdkVersion()); } http://git-wip-us.apache.org/repos/asf/ignite/blob/b662afff/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java index be789e2..438b2bf 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java @@ -1393,16 +1393,16 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> { * @throws IgniteCheckedException If failed to get the version. */ private int nodeJavaMajorVersion(ClusterNode node) throws IgniteCheckedException { - try { - // The format is identical for Oracle JDK, OpenJDK and IBM JDK. - return Integer.parseInt(node.<String>attribute("java.version").split("\\.")[1]); - } - catch (Exception e) { - U.error(log, "Failed to get java major version (unknown 'java.version' format) [ver=" + - node.<String>attribute("java.version") + "]", e); + String verStr = node.<String>attribute("java.version"); - return 0; + int res = U.majorJavaVersion(verStr); + + if (res == 0) { + U.error(log, "Failed to get java major version (unknown 'java.version' format) [ver=" + + node.<String>attribute("java.version") + "]"); } + + return res; } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/b662afff/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java index c6ce969..9804608 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java @@ -6586,6 +6586,33 @@ public abstract class IgniteUtils { } /** + * Get major Java version from string. + * + * @param verStr Version string. + * @return Major version or zero if failed to resolve. + */ + public static int majorJavaVersion(String verStr) { + if (F.isEmpty(verStr)) + return 0; + + try { + String[] parts = verStr.split("\\."); + + int major = Integer.parseInt(parts[0]); + + if (parts.length == 1) + return major; + + int minor = Integer.parseInt(parts[1]); + + return major == 1 ? minor : major; + } + catch (Exception e) { + return 0; + } + } + + /** * Indicates whether HotSpot VM is used. * * @return {@code true} if current JVM implementation is a Sun HotSpot VM, {@code false} otherwise.
