Skip to content

Commit 45bf2d8

Browse files
committed
FISH-12969 Payara Server Startup Fails in Apache NetBeans IDE Due to the CRaCCheckpointTo Option
1 parent daeca8d commit 45bf2d8

3 files changed

Lines changed: 66 additions & 5 deletions

File tree

enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,10 @@ meth public java.util.Optional<java.lang.String> getVM()
12491249
meth public java.util.Optional<java.lang.String> getVendor()
12501250
meth public short getMajor()
12511251
meth public static boolean isCorrectJDK(java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>)
1252+
anno 0 java.lang.Deprecated()
12521253
meth public static boolean isCorrectJDK(org.netbeans.modules.payara.tooling.data.JDKVersion,java.util.Optional<java.lang.String>,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>,java.util.Optional<org.netbeans.modules.payara.tooling.data.JDKVersion>)
1254+
anno 0 java.lang.Deprecated()
1255+
meth public boolean isOptionSupported(org.netbeans.modules.payara.tooling.server.parser.JvmConfigReader.JvmOption,java.lang.String)
12531256
meth public static org.netbeans.modules.payara.tooling.data.JDKVersion getDefaultPlatformVersion()
12541257
meth public static org.netbeans.modules.payara.tooling.data.JDKVersion toValue(java.lang.String)
12551258
meth public static org.netbeans.modules.payara.tooling.data.JDKVersion toValue(java.lang.String,java.lang.String)

enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/data/JDKVersion.java

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.netbeans.modules.payara.tooling.data;
2020

2121
import java.util.Optional;
22+
import org.netbeans.modules.payara.tooling.server.parser.JvmConfigReader;
2223

2324
public final class JDKVersion {
2425

@@ -283,26 +284,75 @@ public static JDKVersion getDefaultPlatformVersion() {
283284
return IDE_JDK_VERSION;
284285
}
285286

286-
public static boolean isCorrectJDK(JDKVersion jdkVersion, Optional<String> vendorOrVM, Optional<JDKVersion> minVersion, Optional<JDKVersion> maxVersion) {
287+
public static boolean isOptionSupported(
288+
JDKVersion jdkVersion,
289+
JvmConfigReader.JvmOption jvmOption,
290+
String javaHome) {
291+
292+
boolean correctJDK = isCorrectJDK(
293+
jdkVersion,
294+
jvmOption.vendorOrVM,
295+
jvmOption.minVersion,
296+
jvmOption.maxVersion);
297+
298+
if (correctJDK
299+
&& jvmOption.option != null
300+
&& jvmOption.option.matches("^-XX:[+-]?CRaC.*")) {
301+
302+
correctJDK = jdkVersion.isCRaCSupported(javaHome);
303+
}
304+
return correctJDK;
305+
}
306+
307+
@Deprecated
308+
public static boolean isCorrectJDK(
309+
JDKVersion jdkVersion,
310+
Optional<String> vendorOrVM,
311+
Optional<JDKVersion> minVersion,
312+
Optional<JDKVersion> maxVersion) {
313+
287314
boolean correctJDK = true;
288315

289316
if (vendorOrVM.isPresent()) {
290-
correctJDK = jdkVersion.getVendor().map(vendor -> vendor.contains(vendorOrVM.get())).orElse(false)
291-
|| jdkVersion.getVM().map(vm -> vm.contains(vendorOrVM.get())).orElse(false);
317+
correctJDK
318+
= jdkVersion.getVendor()
319+
.map(v -> v.contains(vendorOrVM.get()))
320+
.orElse(false)
321+
|| jdkVersion.getVM()
322+
.map(vm -> vm.contains(vendorOrVM.get()))
323+
.orElse(false);
292324
}
325+
293326
if (correctJDK && minVersion.isPresent()) {
294327
correctJDK = jdkVersion.ge(minVersion.get());
295328
}
329+
296330
if (correctJDK && maxVersion.isPresent()) {
297331
correctJDK = jdkVersion.le(maxVersion.get());
298332
}
333+
299334
return correctJDK;
300335
}
301336

337+
@Deprecated
302338
public static boolean isCorrectJDK(Optional<JDKVersion> minVersion, Optional<JDKVersion> maxVersion) {
303339
return isCorrectJDK(IDE_JDK_VERSION, Optional.empty(), minVersion, maxVersion);
304340
}
305341

342+
/**
343+
* Checks whether the given JDK installation supports CRaC by verifying the
344+
* presence of the lib/criu directory.
345+
*
346+
* @param javaHome Java home directory to check
347+
* @return true if CRaC-enabled JDK
348+
*/
349+
private boolean isCRaCSupported(String javaHome) {
350+
return Optional.ofNullable(javaHome)
351+
.map(home -> new java.io.File(home, "lib/criu"))
352+
.map(java.io.File::exists)
353+
.orElse(false);
354+
}
355+
306356
static {
307357
initialize();
308358
}

enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/ServerTasks.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,19 @@ public static ResultProcess startServer(PayaraServer server,
157157
}
158158
}
159159

160-
JDKVersion javaVersion = args.getJavaVersion() == null ? JDKVersion.getDefaultPlatformVersion() : args.getJavaVersion() ;
160+
JDKVersion javaVersion = args.getJavaVersion() == null ? JDKVersion.getDefaultPlatformVersion() : args.getJavaVersion();
161+
String selectedJavaHome
162+
= args.getJavaHome() != null
163+
? args.getJavaHome()
164+
: System.getProperty("java.home");
161165
List<String> optList
162166
= jvmConfigReader.getJvmOptions()
163167
.stream()
164-
.filter(fullOption -> JDKVersion.isCorrectJDK(javaVersion, fullOption.vendorOrVM, fullOption.minVersion, fullOption.maxVersion))
168+
.filter(fullOption
169+
-> JDKVersion.isOptionSupported(
170+
javaVersion,
171+
fullOption,
172+
selectedJavaHome))
165173
.map(fullOption -> fullOption.option)
166174
.collect(toList());
167175

0 commit comments

Comments
 (0)