This is an automated email from the ASF dual-hosted git repository.

ivandasch pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 040ca42779a IGNITE-20698 Fix compatibility tests on JDK 11 and 17 
(#11006)
040ca42779a is described below

commit 040ca42779a7ecd5c9810d3b67d6a984d0055eeb
Author: Ivan Daschinskiy <[email protected]>
AuthorDate: Thu Oct 26 17:34:22 2023 +0300

    IGNITE-20698 Fix compatibility tests on JDK 11 and 17 (#11006)
---
 bin/include/jvmdefaults.bat                        |  2 +
 bin/include/jvmdefaults.sh                         |  2 +
 .../ignite/jdbc/thin/JdbcThinErrorsSelfTest.java   |  2 +-
 .../apache/ignite/jdbc/thin/JdbcThinTcpIoTest.java |  4 +-
 .../compatibility/IgniteReleasedVersion.java       | 18 +++++
 .../clients/JavaThinCompatibilityTest.java         | 12 ++++
 .../clients/JdbcThinCompatibilityTest.java         | 14 ++++
 .../CompoundIndexCompatibilityTest.java            |  2 +
 .../persistence/FoldersReuseCompatibilityTest.java |  2 +
 .../IgnitePKIndexesMigrationToUnwrapPkTest.java    |  2 +
 .../persistence/IndexTypesCompatibilityTest.java   | 11 +++
 .../InlineJavaObjectCompatibilityTest.java         | 11 +++
 .../persistence/MetaStorageCompatibilityTest.java  |  2 +
 ...gratingToWalV2SerializerWithCompactionTest.java |  2 +
 .../MoveBinaryMetadataCompatibility.java           |  2 +
 .../PersistenceBasicCompatibilityTest.java         | 16 +++++
 .../junits/IgniteCompatibilityAbstractTest.java    |  9 ++-
 .../testframework/junits/SkipTestIfIsJdkNewer.java | 33 +++++++++
 .../junits/SkipTestIfJdkNewerRule.java             | 43 ++++++++++++
 .../util/CompatibilityTestsUtils.java              | 18 ++---
 .../ignite/internal/util/FeatureChecker.java       |  3 +
 .../internal/client/thin/ReliableChannelTest.java  |  7 +-
 ...GridManagerMxBeanIllegalArgumentHandleTest.java | 82 ++++++----------------
 .../apache/ignite/testframework/GridTestUtils.java |  9 +++
 modules/platforms/cpp/core/src/ignition.cpp        |  2 +
 .../Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs   |  2 +
 modules/tools/pom.xml                              |  6 ++
 parent/pom.xml                                     | 23 +++++-
 28 files changed, 268 insertions(+), 73 deletions(-)

diff --git a/bin/include/jvmdefaults.bat b/bin/include/jvmdefaults.bat
index 13ebc69dfc7..896814ffa81 100644
--- a/bin/include/jvmdefaults.bat
+++ b/bin/include/jvmdefaults.bat
@@ -73,12 +73,14 @@ if %java_version% GEQ 15 (
     --add-opens=java.base/jdk.internal.access=ALL-UNNAMED ^
     --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED ^
     --add-opens=java.base/sun.nio.ch=ALL-UNNAMED ^
+    --add-opens=java.base/sun.util.calendar=ALL-UNNAME ^
     --add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED ^
     --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED ^
     --add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED ^
     --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED ^
     --add-opens=java.base/java.io=ALL-UNNAMED ^
     --add-opens=java.base/java.nio=ALL-UNNAMED ^
+    --add-opens=java.base/java.net=ALL-UNNAMED ^
     --add-opens=java.base/java.util=ALL-UNNAMED ^
     --add-opens=java.base/java.util.concurrent=ALL-UNNAMED ^
     --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED ^
diff --git a/bin/include/jvmdefaults.sh b/bin/include/jvmdefaults.sh
index 962b10e4695..810b208e662 100644
--- a/bin/include/jvmdefaults.sh
+++ b/bin/include/jvmdefaults.sh
@@ -69,12 +69,14 @@ getJavaSpecificOpts() {
           --add-opens=java.base/jdk.internal.access=ALL-UNNAMED \
           --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED \
           --add-opens=java.base/sun.nio.ch=ALL-UNNAMED \
+          --add-opens=java.base/sun.util.calendar=ALL-UNNAME \
           --add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED \
           --add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED \
           
--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
           --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED \
           --add-opens=java.base/java.io=ALL-UNNAMED \
           --add-opens=java.base/java.nio=ALL-UNNAMED \
+          --add-opens=java.base/java.net=ALL-UNNAMED \
           --add-opens=java.base/java.util=ALL-UNNAMED \
           --add-opens=java.base/java.util.concurrent=ALL-UNNAMED \
           --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED \
diff --git 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinErrorsSelfTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinErrorsSelfTest.java
index c1677ddc4e9..89d2baa674e 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinErrorsSelfTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinErrorsSelfTest.java
@@ -50,7 +50,7 @@ public class JdbcThinErrorsSelfTest extends 
JdbcErrorsAbstractSelfTest {
 
                 return null;
             }
-        }, "08001", "Failed to connect to server [host=unknown.host");
+        }, "08001", "Failed to connect to");
     }
 
     /**
diff --git 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinTcpIoTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinTcpIoTest.java
index f521c1fa8f1..b22842957a0 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinTcpIoTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinTcpIoTest.java
@@ -71,6 +71,8 @@ public class JdbcThinTcpIoTest extends GridCommonAbstractTest 
{
 
         assertEquals(java.net.SocketTimeoutException.class, 
throwable.getCause().getClass());
 
-        assertTrue(throwable.getCause().getMessage().contains("connect timed 
out"));
+        String message = throwable.getCause().getMessage();
+
+        assertTrue(message.matches(".*[Cc]onnect timed out.*"));
     }
 }
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/IgniteReleasedVersion.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/IgniteReleasedVersion.java
index a8aa8c91062..b3573b28b13 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/IgniteReleasedVersion.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/IgniteReleasedVersion.java
@@ -17,9 +17,13 @@
 
 package org.apache.ignite.compatibility;
 
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.Optional;
+import org.apache.ignite.IgniteException;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteProductVersion;
+import org.jetbrains.annotations.NotNull;
 
 /** Released Ignite versions. */
 @SuppressWarnings("unused")
@@ -100,6 +104,20 @@ public enum IgniteReleasedVersion {
             IgniteReleasedVersion::toString);
     }
 
+    /**
+     *
+     */
+    public static @NotNull IgniteReleasedVersion fromString(String ver) {
+        IgniteProductVersion productVer = IgniteProductVersion.fromString(ver);
+
+        Optional<IgniteReleasedVersion> res = 
Arrays.stream(values()).filter(el -> el.ver.equals(productVer)).findFirst();
+
+        if (!res.isPresent())
+            throw new IgniteException("Provided version has been never 
released [version=" + ver);
+
+        return res.get();
+    }
+
     /** @return String representation of three-part version number. */
     @Override public String toString() {
         return ver.major() + "." + ver.minor() + "." + ver.maintenance();
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JavaThinCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JavaThinCompatibilityTest.java
index 030257f9714..ba14f2eeb02 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JavaThinCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JavaThinCompatibilityTest.java
@@ -103,6 +103,18 @@ public class JavaThinCompatibilityTest extends 
AbstractClientCompatibilityTest {
         );
     }
 
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        super.beforeTest();
+
+        int majorJavaVersion = U.majorJavaVersion(U.jdkVersion());
+
+        if (majorJavaVersion > 11) {
+            Assume.assumeTrue("Skipped on jdk " + U.jdkVersion(),
+                    
VER_2_12_0.compareTo(IgniteProductVersion.fromString(verFormatted)) < 0);
+        }
+    }
+
     /** {@inheritDoc} */
     @Override protected void initNode(Ignite ignite) {
         ignite.services().deployNodeSingleton("test_service", new 
EchoService());
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JdbcThinCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JdbcThinCompatibilityTest.java
index 857df9f8a91..3c41d8180fb 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JdbcThinCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/clients/JdbcThinCompatibilityTest.java
@@ -24,7 +24,9 @@ import java.sql.Statement;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteProductVersion;
+import org.junit.Assume;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
@@ -47,6 +49,18 @@ public class JdbcThinCompatibilityTest extends 
AbstractClientCompatibilityTest {
         igniteEx.context().query().querySqlFields(new SqlFieldsQuery(sql), 
false).getAll();
     }
 
+    /** {@inheritDoc} */
+    @Override protected void beforeTest() throws Exception {
+        super.beforeTest();
+
+        int majorJavaVersion = U.majorJavaVersion(U.jdkVersion());
+
+        if (majorJavaVersion > 11) {
+            Assume.assumeTrue("Skipped on jdk " + U.jdkVersion(),
+                
VER_2_12_0.compareTo(IgniteProductVersion.fromString(verFormatted)) < 0);
+        }
+    }
+
     /** {@inheritDoc} */
     @Override protected void initNode(Ignite ignite) {
         IgniteEx igniteEx = (IgniteEx)ignite;
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/CompoundIndexCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/CompoundIndexCompatibilityTest.java
index 71d44135270..9bfd2e75740 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/CompoundIndexCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/CompoundIndexCompatibilityTest.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.cluster.ClusterState;
+import 
org.apache.ignite.compatibility.testframework.junits.SkipTestIfIsJdkNewer;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.cache.query.index.IndexName;
 import 
org.apache.ignite.internal.cache.query.index.sorted.inline.InlineIndexImpl;
@@ -36,6 +37,7 @@ import org.junit.Test;
 public class CompoundIndexCompatibilityTest extends 
IndexAbstractCompatibilityTest {
     /** */
     @Test
+    @SkipTestIfIsJdkNewer(11)
     public void testSecondaryIndexesMigration_2_7_6() throws Exception {
         // 2.7.6 - version before _KEY unwrapping.
         doTestStartupWithOldVersion("2.7.6", () -> {
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java
index a2bbe924d8b..6883c724df9 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/FoldersReuseCompatibilityTest.java
@@ -25,6 +25,7 @@ import java.util.TreeSet;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
+import 
org.apache.ignite.compatibility.testframework.junits.SkipTestIfIsJdkNewer;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.MemoryConfiguration;
@@ -44,6 +45,7 @@ import static 
org.apache.ignite.internal.processors.cache.persistence.filename.P
 /**
  * Test for new and old style persistent storage folders generation and 
compatible startup of current ignite version
  */
+@SkipTestIfIsJdkNewer(8)
 public class FoldersReuseCompatibilityTest extends 
IgnitePersistenceCompatibilityAbstractTest {
     /** Cache name for test. */
     private static final String CACHE_NAME = "dummy";
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePKIndexesMigrationToUnwrapPkTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePKIndexesMigrationToUnwrapPkTest.java
index 5393eb96f4c..fc8741c134e 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePKIndexesMigrationToUnwrapPkTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IgnitePKIndexesMigrationToUnwrapPkTest.java
@@ -21,6 +21,7 @@ package org.apache.ignite.compatibility.persistence;
 import java.util.List;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.cluster.ClusterState;
+import 
org.apache.ignite.compatibility.testframework.junits.SkipTestIfIsJdkNewer;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.junit.Test;
@@ -28,6 +29,7 @@ import org.junit.Test;
 /**
  * Test to check that starting node with PK index of the old format present 
doesn't break anything.
  */
+@SkipTestIfIsJdkNewer(11)
 public class IgnitePKIndexesMigrationToUnwrapPkTest extends 
IndexAbstractCompatibilityTest {
     /** */
     private static final String TABLE_NAME = "TEST_IDX_TABLE";
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IndexTypesCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IndexTypesCompatibilityTest.java
index b855c22fbac..2184d641edf 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IndexTypesCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/IndexTypesCompatibilityTest.java
@@ -36,13 +36,17 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.cluster.ClusterState;
+import org.apache.ignite.compatibility.IgniteReleasedVersion;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.IgniteEx;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteInClosure;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
+import static org.apache.ignite.compatibility.IgniteReleasedVersion.VER_2_12_0;
 import static org.apache.ignite.compatibility.IgniteReleasedVersion.VER_2_6_0;
 import static org.apache.ignite.compatibility.IgniteReleasedVersion.since;
 import static org.apache.ignite.testframework.GridTestUtils.cartesianProduct;
@@ -106,6 +110,13 @@ public class IndexTypesCompatibilityTest extends 
IndexAbstractCompatibilityTest
     /** */
     @Test
     public void testQueryOldIndex() throws Exception {
+        int majorJavaVersion = U.majorJavaVersion(U.jdkVersion());
+
+        if (majorJavaVersion > 11) {
+            Assume.assumeTrue("Skipped on jdk " + U.jdkVersion(),
+                    
VER_2_12_0.compareTo(IgniteReleasedVersion.fromString(igniteVer)) < 0);
+        }
+
         doTestStartupWithOldVersion(igniteVer, new PostStartupClosure());
     }
 
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/InlineJavaObjectCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/InlineJavaObjectCompatibilityTest.java
index 1becef246b9..e1b5aa60507 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/InlineJavaObjectCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/InlineJavaObjectCompatibilityTest.java
@@ -30,14 +30,18 @@ import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.cluster.ClusterState;
+import org.apache.ignite.compatibility.IgniteReleasedVersion;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteInClosure;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
+import static org.apache.ignite.compatibility.IgniteReleasedVersion.VER_2_12_0;
 import static org.apache.ignite.compatibility.IgniteReleasedVersion.VER_2_6_0;
 import static org.apache.ignite.compatibility.IgniteReleasedVersion.since;
 import static org.apache.ignite.testframework.GridTestUtils.cartesianProduct;
@@ -77,6 +81,13 @@ public class InlineJavaObjectCompatibilityTest extends 
IndexAbstractCompatibilit
     /** */
     @Test
     public void testQueryOldInlinedIndex() throws Exception {
+        int majorJavaVersion = U.majorJavaVersion(U.jdkVersion());
+
+        if (majorJavaVersion > 11) {
+            Assume.assumeTrue("Skipped on jdk " + U.jdkVersion(),
+                
VER_2_12_0.compareTo(IgniteReleasedVersion.fromString(igniteVer)) < 0);
+        }
+
         PostStartupClosure closure = cfgInlineSize ? new 
PostStartupClosureSized() : new PostStartupClosure();
         String idxName = cfgInlineSize ? INDEX_SIZED_NAME : INDEX_NAME;
 
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MetaStorageCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MetaStorageCompatibilityTest.java
index 846864bfb2a..fce9b8a8ad2 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MetaStorageCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MetaStorageCompatibilityTest.java
@@ -23,6 +23,7 @@ import java.nio.file.OpenOption;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
+import 
org.apache.ignite.compatibility.testframework.junits.SkipTestIfIsJdkNewer;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
@@ -48,6 +49,7 @@ import static org.apache.ignite.cluster.ClusterState.ACTIVE;
 /**
  * Tests migration of metastorage.
  */
+@SkipTestIfIsJdkNewer(11)
 public class MetaStorageCompatibilityTest extends 
IgnitePersistenceCompatibilityAbstractTest {
     /** Consistent id. */
     private static final String CONSISTENT_ID_1 = "node1";
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
index 99c80675cfd..27e80d3801f 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
@@ -24,6 +24,7 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
+import 
org.apache.ignite.compatibility.testframework.junits.SkipTestIfIsJdkNewer;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
@@ -39,6 +40,7 @@ import org.junit.Test;
 /**
  * Saves data using previous version of ignite and then load this data using 
actual version
  */
+@SkipTestIfIsJdkNewer(8)
 public class MigratingToWalV2SerializerWithCompactionTest extends 
IgnitePersistenceCompatibilityAbstractTest {
     /** */
     private static final String TEST_CACHE_NAME = 
MigratingToWalV2SerializerWithCompactionTest.class.getSimpleName();
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MoveBinaryMetadataCompatibility.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MoveBinaryMetadataCompatibility.java
index 69f327b1125..94fe6130a03 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MoveBinaryMetadataCompatibility.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MoveBinaryMetadataCompatibility.java
@@ -21,6 +21,7 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteBinary;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.binary.BinaryObject;
+import 
org.apache.ignite.compatibility.testframework.junits.SkipTestIfIsJdkNewer;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
@@ -30,6 +31,7 @@ import org.junit.Test;
 /**
  * Test for moving binary_meta and marshaller folders to PDS.
  */
+@SkipTestIfIsJdkNewer(11)
 public class MoveBinaryMetadataCompatibility extends 
IgnitePersistenceCompatibilityAbstractTest {
     /** Test Ignite version. */
     private static final String IGNITE_VERSION = "2.8.0";
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java
index f14580fce5c..b23e57b38e2 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/PersistenceBasicCompatibilityTest.java
@@ -29,6 +29,7 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
+import org.apache.ignite.compatibility.IgniteReleasedVersion;
 import org.apache.ignite.configuration.BinaryConfiguration;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.DataRegionConfiguration;
@@ -37,13 +38,17 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.PersistentStoreConfiguration;
 import org.apache.ignite.internal.IgniteEx;
 import 
org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.junit.Assume;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
+import static org.apache.ignite.compatibility.IgniteReleasedVersion.VER_2_12_0;
 import static org.apache.ignite.compatibility.IgniteReleasedVersion.VER_2_1_0;
+import static org.apache.ignite.compatibility.IgniteReleasedVersion.VER_2_3_0;
 import static org.apache.ignite.compatibility.IgniteReleasedVersion.since;
 import static org.apache.ignite.testframework.GridTestUtils.cartesianProduct;
 
@@ -97,6 +102,17 @@ public class PersistenceBasicCompatibilityTest extends 
IgnitePersistenceCompatib
      */
     @Test
     public void testNodeStartByOldVersionPersistenceData() throws Exception {
+        int majorJavaVersion = U.majorJavaVersion(U.jdkVersion());
+
+        if (majorJavaVersion > 11) {
+            Assume.assumeTrue("Skipped on jdk " + U.jdkVersion(),
+                
VER_2_12_0.compareTo(IgniteReleasedVersion.fromString(version)) < 0);
+        }
+        else if (majorJavaVersion > 8) {
+            Assume.assumeTrue("Skipped on jdk " + U.jdkVersion(),
+                VER_2_3_0.compareTo(IgniteReleasedVersion.fromString(version)) 
< 0);
+        }
+
         doTestStartupWithOldVersion(version);
     }
 
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java
index 384d17bde6f..49519e020bf 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/IgniteCompatibilityAbstractTest.java
@@ -40,6 +40,7 @@ import 
org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.testframework.junits.multijvm.IgniteProcessProxy;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
+import org.junit.Rule;
 
 import static 
org.apache.ignite.compatibility.testframework.junits.Dependency.APACHE_IGNITE_GROUP_ID;
 
@@ -57,6 +58,10 @@ public abstract class IgniteCompatibilityAbstractTest 
extends GridCommonAbstract
     /** Waiting milliseconds of the join of a node to topology. */
     protected static final int NODE_JOIN_TIMEOUT = 30_000;
 
+    /** */
+    @Rule
+    public SkipTestIfJdkNewerRule skipIfJdkNewerRule = new 
SkipTestIfJdkNewerRule();
+
     /** Local JVM Ignite node. */
     protected transient Ignite locJvmInstance = null;
 
@@ -197,7 +202,9 @@ public abstract class IgniteCompatibilityAbstractTest 
extends GridCommonAbstract
         filteredJvmArgs.add("-ea");
 
         for (String arg : U.jvmArgs()) {
-            if (arg.startsWith("-Xmx") || arg.startsWith("-Xms"))
+            if (arg.startsWith("-Xmx") || arg.startsWith("-Xms") || 
arg.startsWith("--add-opens")
+                || arg.startsWith("--add-exports") || 
arg.startsWith("--add-modules")
+                || arg.startsWith("--patch-module") || 
arg.startsWith("--add-reads"))
                 filteredJvmArgs.add(arg);
         }
 
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/SkipTestIfIsJdkNewer.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/SkipTestIfIsJdkNewer.java
new file mode 100644
index 00000000000..6528070c9a1
--- /dev/null
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/SkipTestIfIsJdkNewer.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ignite.compatibility.testframework.junits;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+
+/** */
+@Retention( RetentionPolicy.RUNTIME )
+@Target({ METHOD, TYPE, ANNOTATION_TYPE })
+public @interface SkipTestIfIsJdkNewer {
+    /** Maximum JDK major version allowed. */
+    int value();
+}
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/SkipTestIfJdkNewerRule.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/SkipTestIfJdkNewerRule.java
new file mode 100644
index 00000000000..004b09804b4
--- /dev/null
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/junits/SkipTestIfJdkNewerRule.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ignite.compatibility.testframework.junits;
+
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.junit.Assume;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+/** */
+public class SkipTestIfJdkNewerRule implements TestRule {
+    /** */
+    private static final String jdkVersion = U.jdkVersion();
+
+    /** {@inheritDoc} */
+    @Override public Statement apply(Statement base, Description desc) {
+        Statement res = base;
+
+        SkipTestIfIsJdkNewer ann = 
desc.getAnnotation(SkipTestIfIsJdkNewer.class);
+
+        if (ann == null)
+            ann = 
desc.getTestClass().getAnnotation(SkipTestIfIsJdkNewer.class);
+
+        Assume.assumeTrue("Skipping test", ann == null || 
U.majorJavaVersion(jdkVersion) <= ann.value());
+
+        return res;
+    }
+}
diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java
index 5e6be51acb0..15701ba4dd7 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testframework/util/CompatibilityTestsUtils.java
@@ -19,8 +19,10 @@ package org.apache.ignite.compatibility.testframework.util;
 
 import java.io.File;
 import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import org.apache.ignite.internal.util.typedef.internal.U;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -60,9 +62,11 @@ public class CompatibilityTestsUtils {
             return ((URLClassLoader)clsLdr).getURLs();
         else if (bltClsLdrCls != null && urlClsLdrField != null && 
bltClsLdrCls.isAssignableFrom(clsLdr.getClass())) {
             try {
-                return ((URLClassLoader)urlClsLdrField.get(clsLdr)).getURLs();
+                Object ucp = urlClsLdrField.get(clsLdr);
+
+                return 
(URL[])ucp.getClass().getDeclaredMethod("getURLs").invoke(ucp);
             }
-            catch (IllegalAccessException e) {
+            catch (IllegalAccessException | NoSuchMethodException | 
InvocationTargetException e) {
                 return EMPTY_URL_ARR;
             }
         }
@@ -82,14 +86,12 @@ public class CompatibilityTestsUtils {
 
     /** */
     @Nullable private static Field urlClassLoaderField() {
-        try {
-            Class cls = defaultClassLoaderClass();
+        Class cls = defaultClassLoaderClass();
 
-            return cls == null ? null : cls.getDeclaredField("ucp");
-        }
-        catch (NoSuchFieldException e) {
+        if (cls == null)
             return null;
-        }
+
+        return U.findField(cls, "ucp");
     }
 
     /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java
index b53e52c183e..5922f1de997 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/FeatureChecker.java
@@ -29,6 +29,7 @@ public class FeatureChecker {
         
"--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED\n" +
         "--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED\n" 
+
         "--add-opens=java.base/jdk.internal.access=ALL-UNNAMED\n" +
+        "--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED\n" +
         "--illegal-access=permit";
 
     /** Required Options to Run on Java 15 and higher. */
@@ -36,6 +37,7 @@ public class FeatureChecker {
         "--add-opens=java.base/jdk.internal.access=ALL-UNNAMED\n" +
         "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED\n" +
         "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED\n" +
+        "--add-opens=java.base/sun.util.calendar=ALL-UNNAMED\n" +
         "--add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED\n" +
         "--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED\n" +
         
"--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED\n" +
@@ -43,6 +45,7 @@ public class FeatureChecker {
         "--add-opens=java.base/java.io=ALL-UNNAMED\n" +
         "--add-opens=java.base/java.nio=ALL-UNNAMED\n" +
         "--add-opens=java.base/java.util=ALL-UNNAMED\n" +
+        "--add-opens=java.base/java.net=ALL-UNNAMED\"" +
         "--add-opens=java.base/java.util.concurrent=ALL-UNNAMED\n" +
         "--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED\n" +
         "--add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED\n" +
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ReliableChannelTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ReliableChannelTest.java
index 5b9c88e79d7..6bed312375a 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ReliableChannelTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/client/thin/ReliableChannelTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.client.thin;
 
+import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -119,7 +120,9 @@ public class ReliableChannelTest {
 
             rc.channelsInit();
 
-            
usedChannels.add(F.first(rc.getChannelHolders().get(rc.getCurrentChannelIndex()).getAddresses()).toString());
+            InetSocketAddress addr = 
F.first(rc.getChannelHolders().get(rc.getCurrentChannelIndex()).getAddresses());
+
+            usedChannels.add(addr.toString().replace("/<unresolved>", "")); // 
Remove unnecessary part on JDK 17.
         }
 
         return usedChannels;
@@ -144,7 +147,7 @@ public class ReliableChannelTest {
         ReliableChannel rc = new ReliableChannel(chFactory, ccfg, null);
 
         Supplier<List<String>> holderAddresses = () -> 
rc.getChannelHolders().stream()
-            .map(h -> F.first(h.getAddresses()).toString())
+            .map(h -> 
F.first(h.getAddresses()).toString().replace("/<unresolved>", "")) // Replace 
unnecessary part on JDK 17.
             .sorted()
             .collect(Collectors.toList());
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerMxBeanIllegalArgumentHandleTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerMxBeanIllegalArgumentHandleTest.java
index 10e6f2da66f..766c0437ba1 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerMxBeanIllegalArgumentHandleTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/GridManagerMxBeanIllegalArgumentHandleTest.java
@@ -20,14 +20,13 @@ package org.apache.ignite.internal.managers;
 import java.lang.management.MemoryMXBean;
 import java.lang.management.MemoryUsage;
 import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.processors.metric.GridMetricManager;
+import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.spi.metric.noop.NoopMetricExporterSpi;
 import org.jetbrains.annotations.NotNull;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -43,29 +42,30 @@ import static org.mockito.Mockito.when;
  * Test modifies static final field, used only for development
  */
 public class GridManagerMxBeanIllegalArgumentHandleTest {
-    /** Original value of {@link GridMetricManager#mem} to be restored after 
test */
-    private Object mxBeanToRestore;
-
-    /** Mem mx bean field in {@link GridMetricManager#mem}, already set 
accessible */
-    private Field memMxBeanField;
-
-    /** If we succeeded to set final field this flag is true, otherwise test 
assertions will not be performed */
-    private boolean correctSetupOfTestPerformed;
+    /** Patched {@code GridMetricManager}. */
+    private GridMetricManager mgr;
 
     /** Changes field to always failing mock. */
     @Before
     public void setUp() throws Exception {
-        try {
-            final MemoryMXBean memoryMXBean = createAlwaysFailingMxBean();
-            memMxBeanField = createAccessibleMemField();
-            mxBeanToRestore = memMxBeanField.get(null);
-            memMxBeanField.set(null, memoryMXBean);
+        IgniteConfiguration cfg = new IgniteConfiguration();
+        cfg.setMetricExporterSpi(new NoopMetricExporterSpi());
+
+        IgniteLogger log = Mockito.mock(IgniteLogger.class);
+
+        GridKernalContext ctx = Mockito.mock(GridKernalContext.class);
+        when(ctx.config()).thenReturn(cfg);
+        when(ctx.log(Mockito.anyString())).thenReturn(log);
+        when(ctx.log(Mockito.any(Class.class))).thenReturn(log);
+
+        mgr = new GridMetricManager(ctx);
 
-            correctSetupOfTestPerformed = memMxBeanField.get(null) == 
memoryMXBean;
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
+        MemoryMXBean memoryMXBean = createAlwaysFailingMxBean();
+        Field memField = GridMetricManager.class.getDeclaredField("mem");
+        Object memMxBeanFieldBase = GridUnsafe.staticFieldBase(memField);
+        long memMxBeanFieldOffset = GridUnsafe.staticFieldOffset(memField);
+
+        GridUnsafe.putObjectField(memMxBeanFieldBase, memMxBeanFieldOffset, 
memoryMXBean);
     }
 
     /** MX bean which is always failing to respond with metrics */
@@ -83,49 +83,13 @@ public class GridManagerMxBeanIllegalArgumentHandleTest {
         return memoryMXBean;
     }
 
-
-    /** Reflections {@link GridMetricManager#mem} field which was made 
accessible and mutable */
-    @NotNull private Field createAccessibleMemField() throws 
NoSuchFieldException, IllegalAccessException {
-        final Field memField = GridMetricManager.class.getDeclaredField("mem");
-        memField.setAccessible(true);
-
-        final Field modifiersField = Field.class.getDeclaredField("modifiers");
-        modifiersField.setAccessible(true);
-        modifiersField.setInt(memField, memField.getModifiers() & 
~Modifier.FINAL);
-        return memField;
-    }
-
-    /**
-     * Restores static field in {@link GridMetricManager#mem}
-     *
-     * @throws Exception if field set failed
-     */
-    @After
-    public void tearDown() throws Exception {
-        if (correctSetupOfTestPerformed)
-            memMxBeanField.set(null, mxBeanToRestore);
-    }
-
-    /** Creates minimal disco manager mock, checks illegal state is not 
propagated */
+    /** Checks illegal state is not propagated. */
     @Test
     public void testIllegalStateIsCatch() {
-        final IgniteConfiguration cfg = new IgniteConfiguration();
-        cfg.setMetricExporterSpi(new NoopMetricExporterSpi());
-
-        final IgniteLogger log = Mockito.mock(IgniteLogger.class);
-
-        final GridKernalContext ctx = Mockito.mock(GridKernalContext.class);
-        when(ctx.config()).thenReturn(cfg);
-        when(ctx.log(Mockito.anyString())).thenReturn(log);
-        when(ctx.log(Mockito.any(Class.class))).thenReturn(log);
-
-        final GridMetricManager mgr = new GridMetricManager(ctx);
         final long nHeapMax = mgr.nonHeapMemoryUsage().getMax();
-        if (correctSetupOfTestPerformed)
-            assertEquals(0, nHeapMax);
+        assertEquals(0, nHeapMax);
 
         final long heapMax = mgr.heapMemoryUsage().getMax();
-        if (correctSetupOfTestPerformed)
-            assertEquals(0, heapMax);
+        assertEquals(0, heapMax);
     }
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java 
b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
index 236aa0c8730..78bf347ec2e 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
@@ -104,6 +104,7 @@ import 
org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDataba
 import org.apache.ignite.internal.processors.odbc.ClientListenerProcessor;
 import org.apache.ignite.internal.processors.port.GridPortRecord;
 import org.apache.ignite.internal.util.GridBusyLock;
+import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
 import org.apache.ignite.internal.util.lang.GridAbsClosure;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
@@ -1799,6 +1800,14 @@ public final class GridTestUtils {
             if (isFinal && isStatic)
                 throw new IgniteException("Modification of static final field 
through reflection.");
 
+            if (isFinal && U.majorJavaVersion(U.jdkVersion()) >= 12) {
+                long fieldOffset = GridUnsafe.objectFieldOffset(field);
+
+                GridUnsafe.putObjectField(obj, fieldOffset, val);
+
+                return;
+            }
+
             if (isFinal) {
                 Field modifiersField = 
Field.class.getDeclaredField("modifiers");
 
diff --git a/modules/platforms/cpp/core/src/ignition.cpp 
b/modules/platforms/cpp/core/src/ignition.cpp
index ccc5c7dbf13..0172984cda2 100644
--- a/modules/platforms/cpp/core/src/ignition.cpp
+++ b/modules/platforms/cpp/core/src/ignition.cpp
@@ -156,11 +156,13 @@ namespace ignite
                 
opts.push_back(CopyChars("--add-opens=java.base/jdk.internal.access=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/sun.nio.ch=ALL-UNNAMED"));
+                
opts.push_back(CopyChars("--add-opens=java.base/sun.util.calendar=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/java.io=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/java.nio=ALL-UNNAMED"));
+                
opts.push_back(CopyChars("--add-opens=java.base/java.net=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/java.util=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/java.util.concurrent=ALL-UNNAMED"));
                 
opts.push_back(CopyChars("--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED"));
diff --git 
a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs 
b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs
index 30f3fc669e7..69bbef8cf56 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs
@@ -55,11 +55,13 @@ namespace Apache.Ignite.Core.Impl.Unmanaged.Jni
             "--add-opens=java.base/jdk.internal.access=ALL-UNNAMED",
             "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED",
             "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED",
+            "--add-opens=java.base/sun.util.calendar=ALL-UNNAMED",
             "--add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED",
             "--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED",
             
"--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED",
             "--add-opens=java.base/java.io=ALL-UNNAMED",
             "--add-opens=java.base/java.nio=ALL-UNNAMED",
+            "--add-opens=java.base/java.net=ALL-UNNAMED",
             "--add-opens=java.base/java.util=ALL-UNNAMED",
             "--add-opens=java.base/java.util.concurrent=ALL-UNNAMED",
             "--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED",
diff --git a/modules/tools/pom.xml b/modules/tools/pom.xml
index f333f9af0a7..c0db282de0a 100644
--- a/modules/tools/pom.xml
+++ b/modules/tools/pom.xml
@@ -179,6 +179,12 @@
             <groupId>org.apache.maven.surefire</groupId>
             <artifactId>maven-surefire-common</artifactId>
             <version>${surefire.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>asm</groupId>
+                    <artifactId>asm</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 
         <dependency>
diff --git a/parent/pom.xml b/parent/pom.xml
index 396759836d9..a53fb05a30b 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -918,7 +918,18 @@
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
                         <configuration>
-                            
<argLine>--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED 
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED 
--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED 
--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED 
--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED 
--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED 
--add-opens=java.base/jdk.internal.access=ALL-UNNAMED --illegal-access=permit</ 
[...]
+                            <argLine>
+                                
--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED
+                                --add-exports=java.base/sun.nio.ch=ALL-UNNAMED
+                                
--add-exports=java.base/jdk.internal.loader=ALL-UNNAMED
+                                
--add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED
+                                
--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED
+                                
--add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED
+                                
--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
+                                
--add-opens=java.base/jdk.internal.access=ALL-UNNAMED
+                                
--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED
+                                --illegal-access=permit
+                            </argLine>
                         </configuration>
                     </plugin>
 
@@ -986,8 +997,12 @@
                                 <arg>--add-exports</arg>
                                 
<arg>java.base/jdk.internal.misc=ALL-UNNAMED</arg>
                                 <arg>--add-exports</arg>
+                                
<arg>java.base/jdk.internal.loader=ALL-UNNAMED</arg>
+                                <arg>--add-exports</arg>
                                 <arg>java.base/sun.nio.ch=ALL-UNNAMED</arg>
                                 <arg>--add-exports</arg>
+                                <arg>java.base/sun.net.util=ALL-UNNAMED</arg>
+                                <arg>--add-exports</arg>
                                 
<arg>java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED</arg>
                                 <arg>--add-exports</arg>
                                 
<arg>jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED</arg>
@@ -1013,14 +1028,19 @@
                         <configuration>
                             <argLine>
                                 
--add-opens=java.base/jdk.internal.access=ALL-UNNAMED
+                                
--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED
                                 
--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED
+                                --add-opens=java.base/sun.net.util=ALL-UNNAMED
                                 --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
+                                --add-opens=java.base/sun.nio.fs=ALL-UNNAMED
+                                
--add-opens=java.base/sun.util.calendar=ALL-UNNAMED
                                 
--add-opens=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED
                                 
--add-opens=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED
                                 
--add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED
                                 
--add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
                                 --add-opens=java.base/java.io=ALL-UNNAMED
                                 --add-opens=java.base/java.nio=ALL-UNNAMED
+                                --add-opens=java.base/java.net=ALL-UNNAMED
                                 --add-opens=java.base/java.util=ALL-UNNAMED
                                 
--add-opens=java.base/java.util.concurrent=ALL-UNNAMED
                                 
--add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED
@@ -1032,6 +1052,7 @@
                                 
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
                                 --add-opens=java.base/java.time=ALL-UNNAMED
                                 --add-opens=java.base/java.text=ALL-UNNAMED
+                                --add-opens=java.base/java.security=ALL-UNNAMED
                                 
--add-opens=java.management/sun.management=ALL-UNNAMED
                                 --add-opens 
java.desktop/java.awt.font=ALL-UNNAMED
                             </argLine>

Reply via email to