DIRSERVER-2322: Move tmp directory into instance layout
diff --git a/core-api/src/main/java/org/apache/directory/server/core/api/InstanceLayout.java b/core-api/src/main/java/org/apache/directory/server/core/api/InstanceLayout.java
index d29f4bb..9116baa 100644
--- a/core-api/src/main/java/org/apache/directory/server/core/api/InstanceLayout.java
+++ b/core-api/src/main/java/org/apache/directory/server/core/api/InstanceLayout.java
@@ -89,6 +89,7 @@
     public static final String PARTITIONS_NAME = "partitions";
     private static final String REPL_NAME = "syncrepl-data";
     private static final String CACHE_NAME = "cache";
+    private static final String TMP_NAME = "tmp";
 
     /** Static file names */
     private static final String LOG4J_PROPERTIES = "log4j.properties";
@@ -114,6 +115,9 @@
     /** The cache directory */
     private File cacheDir;
 
+    /** The tmp directory */
+    private File tmpDir;
+
 
     /**
      * Creates a new instance of InstanceLayout.
@@ -152,7 +156,8 @@
                 getLogDirectory(),
                 getPartitionsDirectory(),
                 getRunDirectory(),
-                getCacheDirectory()
+                getCacheDirectory(),
+                getTmpDirectory()
         };
 
         setRequiredDirectories( requiredDirectories );
@@ -211,7 +216,7 @@
 
 
     /**
-     * @param cacheDir the confDir to set
+     * @param cacheDir the cacheDir to set
      */
     public void setCacheDir( File cacheDir )
     {
@@ -220,6 +225,31 @@
 
 
     /**
+     * Gets the 'tmp' directory ('<instance>/tmp').
+     *
+     * @return the 'tmp' directory
+     */
+    public File getTmpDirectory()
+    {
+        if ( tmpDir == null )
+        {
+            tmpDir = new File( getInstanceDirectory(), TMP_NAME );
+        }
+
+        return tmpDir;
+    }
+
+
+    /**
+     * @param tmpDir the tmpDir to set
+     */
+    public void setTmpDir( File tmpDir )
+    {
+        this.tmpDir = tmpDir;
+    }
+
+
+    /**
      * Gets the 'log' directory ('<instance>/log').
      *
      * @return the 'log' directory
@@ -407,6 +437,7 @@
             + "  Instance run dir              : " + getRunDirectory() + "\n"
             + "  Instance partitions dir       : " + getPartitionsDirectory() + "\n"
             + "  Instance replication data dir : " + getReplDirectory() + "\n"
-            + "  Instance cache dir            : " + getCacheDirectory() + "\n";
+            + "  Instance cache dir            : " + getCacheDirectory() + "\n"
+            + "  Instance tmp dir              : " + getTmpDirectory() + "\n";
     }
 }
diff --git a/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/bin/install.sh b/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/bin/install.sh
index fe682ea..8188b78 100644
--- a/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/bin/install.sh
+++ b/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/bin/install.sh
@@ -97,6 +97,8 @@
 verifyExitCode
 mkdir -p $DEFAULT_INSTANCE_HOME_DIRECTORY/run
 verifyExitCode
+mkdir -p $DEFAULT_INSTANCE_HOME_DIRECTORY/tmp
+verifyExitCode
 
 # Filtering default instance wrapper.conf file
 sed -e "s;@installation.directory@;${APACHEDS_HOME_DIRECTORY};" ../instance/wrapper-instance.conf > ../instance/wrapper-instance.conf.tmp
diff --git a/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/rpm/apacheds.spec b/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/rpm/apacheds.spec
index cad2aec..688bea5 100644
--- a/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/rpm/apacheds.spec
+++ b/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/rpm/apacheds.spec
@@ -48,6 +48,7 @@
 mkdir -p $RPM_BUILD_ROOT%{adsdata}/default/log
 mkdir -p $RPM_BUILD_ROOT%{adsdata}/default/partitions
 mkdir -p $RPM_BUILD_ROOT%{adsdata}/default/run
+mkdir -p $RPM_BUILD_ROOT%{adsdata}/default/tmp
 mkdir -p $RPM_BUILD_ROOT/etc/init.d
 
 # Server files
@@ -95,6 +96,7 @@
 %{adsdata}/default/log
 %{adsdata}/default/partitions
 %{adsdata}/default/run
+%{adsdata}/default/tmp
 %config %{adsdata}/default/conf/config.ldif
 %config %{adsdata}/default/conf/log4j.properties
 %config %{adsdata}/default/conf/wrapper-instance.conf
diff --git a/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/wrapper-installation.conf b/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/wrapper-installation.conf
index 51f3264..3c53ab5 100644
--- a/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/wrapper-installation.conf
+++ b/installers-maven-plugin/src/main/resources/org/apache/directory/server/installers/wrapper-installation.conf
@@ -35,6 +35,7 @@
 wrapper.java.additional.3=-Dapacheds.log.dir=${double.quote}%INSTANCE_DIRECTORY%/log${double.quote}
 wrapper.java.additional.4=-Dapacheds.run.dir=${double.quote}%INSTANCE_DIRECTORY%/run${double.quote}
 wrapper.java.additional.5=-Dapacheds.instance=${double.quote}%INSTANCE%${double.quote}
+wrapper.java.additional.6=-Djava.io.tmpdir=${double.quote}%INSTANCE_DIRECTORY%/tmp${double.quote}
 
 # Initial Java Heap Size (in MB)
 #wrapper.java.initmemory=1024
diff --git a/installers/src/test/docker/archive.test b/installers/src/test/docker/archive.test
index 52b611a..e0ff7cc 100644
--- a/installers/src/test/docker/archive.test
+++ b/installers/src/test/docker/archive.test
@@ -73,6 +73,7 @@
 # install required tools
 apt-get -qq update
 apt-get -qq -y install ldap-utils netcat
+java -version
 
 # start
 /opt/${DIRNAME}/bin/apacheds.sh start
diff --git a/installers/src/test/docker/bin-DIRSERVER-2173.test b/installers/src/test/docker/bin-DIRSERVER-2173.test
index c494e10..42ecd1d 100644
--- a/installers/src/test/docker/bin-DIRSERVER-2173.test
+++ b/installers/src/test/docker/bin-DIRSERVER-2173.test
@@ -67,6 +67,7 @@
 # set wrapper java path
 echo "" >> /var/lib/${DIRNAME}/default/conf/wrapper-instance.conf
 echo "wrapper.java.command=$JAVA_HOME/bin/java" >> /var/lib/${DIRNAME}/default/conf/wrapper-instance.conf
+java -version
 
 # start
 service ${SERVICE_NAME} start
diff --git a/installers/src/test/docker/bin.test b/installers/src/test/docker/bin.test
index 1ae9dbc..74fbbf6 100644
--- a/installers/src/test/docker/bin.test
+++ b/installers/src/test/docker/bin.test
@@ -66,6 +66,7 @@
 # set wrapper java path
 echo "" >> /var/lib/${DIRNAME}/default/conf/wrapper-instance.conf
 echo "wrapper.java.command=$JAVA_HOME/bin/java" >> /var/lib/${DIRNAME}/default/conf/wrapper-instance.conf
+java -version
 
 # start
 service ${SERVICE_NAME} start
diff --git a/installers/src/test/docker/deb.test b/installers/src/test/docker/deb.test
index 8fa99b8..7d2cc6a 100644
--- a/installers/src/test/docker/deb.test
+++ b/installers/src/test/docker/deb.test
@@ -39,6 +39,7 @@
 apt-get -qq update
 apt-get -qq -y install ldap-utils netcat procps
 command -v java >/dev/null 2>&1 || apt-get -qq -y install default-jre-headless
+java -version
 
 # assert no duplicate files (DIRSERVER-2197)
 test $(dpkg -c /apacheds.deb | sort | uniq -cd | wc -l) -eq 0
@@ -96,6 +97,9 @@
 # assert no error in log
 grep ".*ERROR.*" /var/lib/${DIRNAME}/default/log/apacheds.log && false
 
+# Handle OpenJ9 class sharing
+rm -rf /opt/${DIRNAME}/javasharedresources
+
 # uninstall
 dpkg -P apacheds
 
diff --git a/installers/src/test/docker/rpm.test b/installers/src/test/docker/rpm.test
index 7d8ccc6..e4885b9 100644
--- a/installers/src/test/docker/rpm.test
+++ b/installers/src/test/docker/rpm.test
@@ -40,7 +40,8 @@
 
 # install packages
 yum -y -q install openldap-clients nmap procps
-command -v java >/dev/null 2>&1 || yum -y -q install java-openjdk-headless
+command -v java >/dev/null 2>&1 || yum -y -q install java-latest-openjdk-headless || yum -y -q install java-openjdk-headless
+java -version
 
 # assert no duplicate files (DIRSERVER-2197)
 test $(rpm -qlp /apacheds.rpm | sort | uniq -cd | wc -l) -eq 0
diff --git a/installers/src/test/docker/run-archive-tests.sh b/installers/src/test/docker/run-archive-tests.sh
index 02f5141..063d8e9 100755
--- a/installers/src/test/docker/run-archive-tests.sh
+++ b/installers/src/test/docker/run-archive-tests.sh
@@ -28,7 +28,7 @@
 then
     echo
     echo
-    echo "Testing tar.gz archive (Debian 9, OpenJDK 8, 64bit)"
+    echo "Testing tar.gz archive (Debian 10, OpenJDK 8, 64bit)"
     docker run -i --rm -h myhostname \
       -v ${TGZ}:/apacheds.tar.gz \
       -v ${TEST_SCRIPTS_DIR}/archive.test:/archive.test \
@@ -42,7 +42,7 @@
 then
     echo
     echo
-    echo "Testing zip archive (Debian 9, OpenJDK 11, 64bit)"
+    echo "Testing zip archive (Debian 10, OpenJDK 11, 64bit)"
     docker run -i --rm -h myhostname \
       -v ${ZIP}:/apacheds.zip \
       -v ${TEST_SCRIPTS_DIR}/archive.test:/archive.test \
diff --git a/installers/src/test/docker/run-bin-tests.sh b/installers/src/test/docker/run-bin-tests.sh
index 36a491b..9a5ed0c 100755
--- a/installers/src/test/docker/run-bin-tests.sh
+++ b/installers/src/test/docker/run-bin-tests.sh
@@ -28,7 +28,7 @@
 then
     echo
     echo
-    echo "Testing bin installer (Debian 9, OpenJDK 8, 64bit)"
+    echo "Testing bin installer (Debian 10, OpenJDK 8, 64bit)"
     docker run -i --rm -h myhostname \
       -v ${BIN64}:/apacheds.bin \
       -v ${TEST_SCRIPTS_DIR}/bin.test:/bin.test \
@@ -36,7 +36,7 @@
 
     echo
     echo
-    echo "Testing bin installer (DIRSERVER-2173) (Debian 9, OpenJDK 8, 64bit)"
+    echo "Testing bin installer (DIRSERVER-2173) (Debian 10, OpenJDK 8, 64bit)"
     docker run -i --rm -h myhostname \
       -v ${BIN64}:/apacheds.bin \
       -v ${TEST_SCRIPTS_DIR}/bin-DIRSERVER-2173.test:/bin-DIRSERVER-2173.test \
diff --git a/installers/src/test/docker/run-deb-tests.sh b/installers/src/test/docker/run-deb-tests.sh
index 05076a4..61c4c4a 100755
--- a/installers/src/test/docker/run-deb-tests.sh
+++ b/installers/src/test/docker/run-deb-tests.sh
@@ -39,6 +39,6 @@
 
     echo
     echo
-    echo "Testing deb package (Ubuntu 18.04, OpenJ9 12, 64bit)"
-    $DOCKER_CMD adoptopenjdk/openjdk12-openj9:slim bash -c "ln -s /opt/java/openjdk/bin/java /usr/bin/java; bash /deb.test"
+    echo "Testing deb package (Ubuntu 20.04, OpenJ9 16, 64bit)"
+    $DOCKER_CMD adoptopenjdk/openjdk16-openj9:slim bash -c "ln -s /opt/java/openjdk/bin/java /usr/bin/java; bash /deb.test"
 fi
diff --git a/installers/src/test/docker/run-rpm-tests.sh b/installers/src/test/docker/run-rpm-tests.sh
index cb63ead..249d8d5 100755
--- a/installers/src/test/docker/run-rpm-tests.sh
+++ b/installers/src/test/docker/run-rpm-tests.sh
@@ -34,8 +34,8 @@
 
     echo
     echo
-    echo "Testing rpm package (Fedora 29, OpenJDK 12, 64bit)"
-    $DOCKER_CMD fedora:29 bash /rpm.test
+    echo "Testing rpm package (Fedora 34, OpenJDK latest (16+), 64bit)"
+    $DOCKER_CMD fedora:34 bash /rpm.test
 
     echo
     echo