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..1768d8ba4ad4 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,8 @@ 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 boolean isOptionSupported(org.netbeans.modules.payara.tooling.server.parser.JvmConfigReader.JvmOption,java.lang.String) +meth public boolean isCRaCSupported(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..e52e8fbb28a3 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 @@ -19,6 +19,7 @@ package org.netbeans.modules.payara.tooling.data; import java.util.Optional; +import org.netbeans.modules.payara.tooling.server.parser.JvmConfigReader; public final class JDKVersion { @@ -283,24 +284,52 @@ public static JDKVersion getDefaultPlatformVersion() { return IDE_JDK_VERSION; } - public static boolean isCorrectJDK(JDKVersion jdkVersion, Optional vendorOrVM, Optional minVersion, Optional maxVersion) { + public boolean isOptionSupported( + JvmConfigReader.JvmOption 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); + if (jvmOption.vendorOrVM.isPresent()) { + correctJDK + = this.getVendor() + .map(v -> v.contains(jvmOption.vendorOrVM.get())) + .orElse(false) + || this.getVM() + .map(vm -> vm.contains(jvmOption.vendorOrVM.get())) + .orElse(false); } - if (correctJDK && minVersion.isPresent()) { - correctJDK = jdkVersion.ge(minVersion.get()); + + if (correctJDK && jvmOption.minVersion.isPresent()) { + correctJDK = this.ge(jvmOption.minVersion.get()); } - if (correctJDK && maxVersion.isPresent()) { - correctJDK = jdkVersion.le(maxVersion.get()); + + if (correctJDK && jvmOption.maxVersion.isPresent()) { + correctJDK = this.le(jvmOption.maxVersion.get()); + } + + if (correctJDK + && jvmOption.option != null + && jvmOption.option.matches("^-XX:[+-]?CRaC.*")) { + + correctJDK = isCRaCSupported(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 boolean isCRaCSupported(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..828afe5b75af 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,18 @@ 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 + -> javaVersion.isOptionSupported( + fullOption, + selectedJavaHome)) .map(fullOption -> fullOption.option) .collect(toList());