From 8d4a14b55a8f1b68a4a13c6b4920e3c267b130a8 Mon Sep 17 00:00:00 2001
From: Valera V.Harseko <vharseko@3a-systems.ru>
Date: Wed, 19 Feb 2020 14:01:56 +0000
Subject: [PATCH] Merge branch 'master' of https://github.com/OpenIdentityPlatform/OpenDJ.git

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java |   34 ++++++++++++++++++++++------------
 pom.xml                                                                                          |    1 +
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
index 3bfa144..2483cc6 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
@@ -2955,18 +2955,28 @@
       {
         Method tmpDirectBufferCleanerMethod = null;
         Method tmpDirectBufferCleanerCleanMethod = null;
-        boolean tmpCleanSupported;
-        try
-        {
-          tmpDirectBufferCleanerMethod = Class.forName("java.nio.DirectByteBuffer").getMethod("cleaner");
-          tmpDirectBufferCleanerMethod.setAccessible(true);
-          tmpDirectBufferCleanerCleanMethod = Class.forName("sun.misc.Cleaner").getMethod("clean");
-          tmpDirectBufferCleanerCleanMethod.setAccessible(true);
-          tmpCleanSupported = true;
-        }
-        catch (Exception e)
-        {
-          tmpCleanSupported = false;
+        boolean tmpCleanSupported = false;
+        // 
+        // We know that this will fail in Java 9+ since sun.misc.Cleaner was moved to jdk.internal.ref.Cleaner (see JDK-8148117)
+        // Also in Java9+, calling 'setAccessible(true)' to Java internal classes generates warnings:
+        // * WARNING: An illegal reflective access operation has occurred
+        // * WARNING: All illegal access operations will be denied in a future release
+        // unless the JVM is started with the 'add-opens=java.base/java.nio=ALL-UNNAMED' flag
+        // Since this is only an optimization, avoid it completely in Java 9+
+        // 
+        if (System.getProperty("java.version").startsWith("1.")) {
+          try
+          {
+            tmpDirectBufferCleanerMethod = Class.forName("java.nio.DirectByteBuffer").getMethod("cleaner");
+            tmpDirectBufferCleanerMethod.setAccessible(true);
+            tmpDirectBufferCleanerCleanMethod = Class.forName("sun.misc.Cleaner").getMethod("clean");
+            tmpDirectBufferCleanerCleanMethod.setAccessible(true);
+            tmpCleanSupported = true;
+          }
+          catch (Exception e)
+          {
+            tmpCleanSupported = false;
+          }
         }
         CLEAN_SUPPORTED = tmpCleanSupported;
         directBufferCleanerMethod = tmpDirectBufferCleanerMethod;
diff --git a/pom.xml b/pom.xml
index eac164d..bf9e830 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,6 +32,7 @@
         <product.name>OpenDJ</product.name>
         <product.name.lowercase>opendj</product.name.lowercase>
         <product.locales>ca_ES,es,de,fr,ja,ko,pl,zh_CN,zh_TW</product.locales>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <localized.jars.classifier>i18n</localized.jars.classifier>
         <freemarker.version>2.3.28</freemarker.version>
         <grizzly-framework.version>2.4.4</grizzly-framework.version>

--
Gitblit v1.10.0