From c9676adac645c042119fa267bc98179f53f80169 Mon Sep 17 00:00:00 2001
From: Duarte Meneses <duarte.meneses@sonarsource.com>
Date: Thu, 22 Jul 2021 11:40:59 -0500
Subject: SONAR-15230 Fix JVM startup args for Hazelcast

---
 .../src/main/java/org/sonar/application/command/CeJvmOptions.java | 8 ++++++++
 .../main/java/org/sonar/application/command/WebJvmOptions.java    | 8 ++++++++
 .../test/java/org/sonar/application/command/CeJvmOptionsTest.java | 8 +++++++-
 .../java/org/sonar/application/command/WebJvmOptionsTest.java     | 7 ++++++-
 sonar-application/src/main/assembly/conf/wrapper.conf             | 8 ++++++++
 5 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/server/sonar-main/src/main/java/org/sonar/application/command/CeJvmOptions.java b/server/sonar-main/src/main/java/org/sonar/application/command/CeJvmOptions.java
index 9896319fe15..57b367fe9cc 100644
--- a/server/sonar-main/src/main/java/org/sonar/application/command/CeJvmOptions.java
+++ b/server/sonar-main/src/main/java/org/sonar/application/command/CeJvmOptions.java
@@ -37,6 +37,14 @@ public class CeJvmOptions extends JvmOptions<CeJvmOptions> {
     res.put("-XX:-OmitStackTraceInFastThrow", "");
     // avoid illegal reflective access operations done by MyBatis
     res.put("--add-opens=java.base/java.util=ALL-UNNAMED", "");
+
+    // avoid illegal reflective access operations done by Hazelcast
+    res.put("--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED", "");
+    res.put("--add-opens=java.base/java.lang=ALL-UNNAMED", "");
+    res.put("--add-opens=java.base/java.nio=ALL-UNNAMED", "");
+    res.put("--add-opens=java.base/sun.nio.ch=ALL-UNNAMED", "");
+    res.put("--add-opens=java.management/sun.management=ALL-UNNAMED", "");
+    res.put("--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED", "");
     return res;
   }
 }
diff --git a/server/sonar-main/src/main/java/org/sonar/application/command/WebJvmOptions.java b/server/sonar-main/src/main/java/org/sonar/application/command/WebJvmOptions.java
index e5a7ea1afed..b4eb48796c6 100644
--- a/server/sonar-main/src/main/java/org/sonar/application/command/WebJvmOptions.java
+++ b/server/sonar-main/src/main/java/org/sonar/application/command/WebJvmOptions.java
@@ -42,6 +42,14 @@ public class WebJvmOptions extends JvmOptions<WebJvmOptions> {
     res.put("--add-opens=java.base/java.lang=ALL-UNNAMED", "");
     res.put("--add-opens=java.base/java.io=ALL-UNNAMED", "");
     res.put("--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED", "");
+
+    // avoid illegal reflective access operations done by Hazelcast
+    res.put("--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED", "");
+    res.put("--add-opens=java.base/java.nio=ALL-UNNAMED", "");
+    res.put("--add-opens=java.base/sun.nio.ch=ALL-UNNAMED", "");
+    res.put("--add-opens=java.management/sun.management=ALL-UNNAMED", "");
+    res.put("--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED", "");
+
     return res;
   }
 }
diff --git a/server/sonar-main/src/test/java/org/sonar/application/command/CeJvmOptionsTest.java b/server/sonar-main/src/test/java/org/sonar/application/command/CeJvmOptionsTest.java
index db4bb86ef15..20171b98e4c 100644
--- a/server/sonar-main/src/test/java/org/sonar/application/command/CeJvmOptionsTest.java
+++ b/server/sonar-main/src/test/java/org/sonar/application/command/CeJvmOptionsTest.java
@@ -45,6 +45,12 @@ public class CeJvmOptionsTest {
     underTest = new CeJvmOptions(tmpDir);
     assertThat(underTest.getAll()).containsExactly(
       "-Djava.awt.headless=true", "-Dfile.encoding=UTF-8", "-Djava.io.tmpdir=" + tmpDir.getAbsolutePath(), "-XX:-OmitStackTraceInFastThrow",
-      "--add-opens=java.base/java.util=ALL-UNNAMED");
+      "--add-opens=java.base/java.util=ALL-UNNAMED",
+      "--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED",
+      "--add-opens=java.base/java.lang=ALL-UNNAMED",
+      "--add-opens=java.base/java.nio=ALL-UNNAMED",
+      "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED",
+      "--add-opens=java.management/sun.management=ALL-UNNAMED",
+      "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED");
   }
 }
diff --git a/server/sonar-main/src/test/java/org/sonar/application/command/WebJvmOptionsTest.java b/server/sonar-main/src/test/java/org/sonar/application/command/WebJvmOptionsTest.java
index e4f9da4b96f..3134c2f1ef6 100644
--- a/server/sonar-main/src/test/java/org/sonar/application/command/WebJvmOptionsTest.java
+++ b/server/sonar-main/src/test/java/org/sonar/application/command/WebJvmOptionsTest.java
@@ -49,7 +49,12 @@ public class WebJvmOptionsTest {
       "--add-opens=java.base/java.util=ALL-UNNAMED",
       "--add-opens=java.base/java.lang=ALL-UNNAMED",
       "--add-opens=java.base/java.io=ALL-UNNAMED",
-      "--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED");
+      "--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED",
+      "--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED",
+      "--add-opens=java.base/java.nio=ALL-UNNAMED",
+      "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED",
+      "--add-opens=java.management/sun.management=ALL-UNNAMED",
+      "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED");
   }
 
 }
diff --git a/sonar-application/src/main/assembly/conf/wrapper.conf b/sonar-application/src/main/assembly/conf/wrapper.conf
index 360026d398d..c403dbd5b0d 100644
--- a/sonar-application/src/main/assembly/conf/wrapper.conf
+++ b/sonar-application/src/main/assembly/conf/wrapper.conf
@@ -14,6 +14,14 @@ wrapper.java.command=java
 #********************************************************************
 wrapper.java.additional.1=-Dsonar.wrapped=true
 wrapper.java.additional.2=-Djava.awt.headless=true
+# extra args needed by hazelcast
+wrapper.java.additional.3=--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
+wrapper.java.additional.4=--add-opens=java.base/java.lang=ALL-UNNAMED
+wrapper.java.additional.5=--add-opens=java.base/java.nio=ALL-UNNAMED
+wrapper.java.additional.6=--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
+wrapper.java.additional.7=--add-opens=java.management/sun.management=ALL-UNNAMED
+wrapper.java.additional.8=--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
+
 wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
 wrapper.java.classpath.1=../../lib/sonar-application-@sqversion@.jar
 wrapper.java.classpath.2=../../lib/jsw/wrapper-3.2.3.jar
-- 
cgit v1.2.3