Skip to content

Commit e49df5b

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

3 files changed

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

289315
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);
316+
correctJDK
317+
= jdkVersion.getVendor()
318+
.map(v -> v.contains(vendorOrVM.get()))
319+
.orElse(false)
320+
|| jdkVersion.getVM()
321+
.map(vm -> vm.contains(vendorOrVM.get()))
322+
.orElse(false);
292323
}
324+
293325
if (correctJDK && minVersion.isPresent()) {
294326
correctJDK = jdkVersion.ge(minVersion.get());
295327
}
328+
296329
if (correctJDK && maxVersion.isPresent()) {
297330
correctJDK = jdkVersion.le(maxVersion.get());
298331
}
332+
299333
return correctJDK;
300334
}
301335

336+
@Deprecated
302337
public static boolean isCorrectJDK(Optional<JDKVersion> minVersion, Optional<JDKVersion> maxVersion) {
303338
return isCorrectJDK(IDE_JDK_VERSION, Optional.empty(), minVersion, maxVersion);
304339
}
305340

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

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,18 @@ 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+
-> javaVersion.isOptionSupported(
170+
fullOption,
171+
selectedJavaHome))
165172
.map(fullOption -> fullOption.option)
166173
.collect(toList());
167174

0 commit comments

Comments
 (0)