diff --git a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig index ebeedaa36b2a..6cd3ca644482 100644 --- a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig +++ b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig @@ -1248,8 +1248,7 @@ meth public java.util.Optional getUpdate() meth public java.util.Optional getVM() meth public java.util.Optional getVendor() meth public short getMajor() -meth public static boolean isCorrectJDK(java.util.Optional,java.util.Optional) -meth public static boolean isCorrectJDK(org.netbeans.modules.payara.tooling.data.JDKVersion,java.util.Optional,java.util.Optional,java.util.Optional) +meth public static boolean isCorrectJDK(org.netbeans.modules.payara.tooling.data.JDKVersion,java.util.Optional,java.util.Optional,java.util.Optional,java.lang.String,java.lang.String) meth public static org.netbeans.modules.payara.tooling.data.JDKVersion getDefaultPlatformVersion() meth public static org.netbeans.modules.payara.tooling.data.JDKVersion toValue(java.lang.String) meth public static org.netbeans.modules.payara.tooling.data.JDKVersion toValue(java.lang.String,java.lang.String) diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java index a0dc61ad806b..a07bd672de31 100644 --- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java +++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java @@ -283,24 +283,55 @@ public static JDKVersion getDefaultPlatformVersion() { return IDE_JDK_VERSION; } - public static boolean isCorrectJDK(JDKVersion jdkVersion, Optional vendorOrVM, Optional minVersion, Optional maxVersion) { + public static boolean isCorrectJDK(JDKVersion jdkVersion, + Optional vendorOrVM, + Optional minVersion, + Optional maxVersion, + String jvmOption, + String javaHome) { + boolean correctJDK = true; if (vendorOrVM.isPresent()) { - correctJDK = jdkVersion.getVendor().map(vendor -> vendor.contains(vendorOrVM.get())).orElse(false) - || jdkVersion.getVM().map(vm -> vm.contains(vendorOrVM.get())).orElse(false); + correctJDK + = jdkVersion.getVendor() + .map(v -> v.contains(vendorOrVM.get())) + .orElse(false) + || jdkVersion.getVM() + .map(vm -> vm.contains(vendorOrVM.get())) + .orElse(false); } + if (correctJDK && minVersion.isPresent()) { correctJDK = jdkVersion.ge(minVersion.get()); } + if (correctJDK && maxVersion.isPresent()) { correctJDK = jdkVersion.le(maxVersion.get()); } + + if (correctJDK + && jvmOption != null + && jvmOption.matches("^-XX:[+-]?CRaC.*")) { + + correctJDK = isCRaCJDK(javaHome); + } + return correctJDK; } - public static boolean isCorrectJDK(Optional minVersion, Optional maxVersion) { - return isCorrectJDK(IDE_JDK_VERSION, Optional.empty(), minVersion, maxVersion); + /** + * Checks whether the given JDK installation supports CRaC by verifying the + * presence of the lib/criu directory. + * + * @param javaHome Java home directory to check + * @return true if CRaC-enabled JDK + */ + public static boolean isCRaCJDK(String javaHome) { + return Optional.ofNullable(javaHome) + .map(home -> new java.io.File(home, "lib/criu")) + .map(java.io.File::exists) + .orElse(false); } static { diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java index a624eae5de91..60cb309c563e 100644 --- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java +++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java @@ -157,11 +157,22 @@ public static ResultProcess startServer(PayaraServer server, } } - JDKVersion javaVersion = args.getJavaVersion() == null ? JDKVersion.getDefaultPlatformVersion() : args.getJavaVersion() ; + JDKVersion javaVersion = args.getJavaVersion() == null ? JDKVersion.getDefaultPlatformVersion() : args.getJavaVersion(); + String selectedJavaHome + = args.getJavaHome() != null + ? args.getJavaHome() + : System.getProperty("java.home"); List optList = jvmConfigReader.getJvmOptions() .stream() - .filter(fullOption -> JDKVersion.isCorrectJDK(javaVersion, fullOption.vendorOrVM, fullOption.minVersion, fullOption.maxVersion)) + .filter(fullOption + -> JDKVersion.isCorrectJDK( + javaVersion, + fullOption.vendorOrVM, + fullOption.minVersion, + fullOption.maxVersion, + fullOption.option, + selectedJavaHome)) .map(fullOption -> fullOption.option) .collect(toList());