From 4f03d1c6b9b340f55a817b0dcb5b6a1cffdb87a1 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Mon, 22 Oct 2007 15:48:15 +0000
Subject: [PATCH] Fix for issue 2483: Bad management of lib/set-java-home when java path changed
---
opends/src/server/org/opends/server/util/SetupUtils.java | 103 +++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 90 insertions(+), 13 deletions(-)
diff --git a/opends/src/server/org/opends/server/util/SetupUtils.java b/opends/src/server/org/opends/server/util/SetupUtils.java
index 8351fb5..963d434 100644
--- a/opends/src/server/org/opends/server/util/SetupUtils.java
+++ b/opends/src/server/org/opends/server/util/SetupUtils.java
@@ -28,8 +28,10 @@
+import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
+import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.net.InetSocketAddress;
@@ -78,6 +80,14 @@
"org.opends.quicksetup.zipfilename";
/**
+ * The relative path where all the libraries (jar files) are.
+ */
+ public static final String LIBRARIES_PATH_RELATIVE = "lib";
+
+ private static final String SET_JAVA_HOME_UNIX = "set-java-home";
+ private static final String SET_JAVA_HOME_WINDOWS = "set-java-home.bat";
+
+ /**
* Creates a MakeLDIF template file using the provided information.
*
* @param baseDN The base DN for the data in the template file.
@@ -239,54 +249,78 @@
* @param serverRoot The path to the root of the Directory Server instance
* for which the file will be written.
*
+ * @param overWrite when the set-java-home file exists whether to overwrite it
+ * or not.
* @return A handle to the {@code File} object that has been written.
*
* @throws IOException If a problem occurs while creating or writing to the
* specified file.
*/
- public static File writeSetOpenDSJavaHome(String serverRoot)
- throws IOException
+ public static File writeSetOpenDSJavaHome(String serverRoot,
+ boolean overWrite) throws IOException
{
- String javaHome = System.getenv("OPENDS_JAVA_HOME");
+ String javaHome = System.getenv(OPENDS_JAVA_HOME);
if ((javaHome == null) || (javaHome.length() == 0))
{
javaHome = System.getProperty("java.home");
}
- File libDirectory = new File(serverRoot, "lib");
+ File libDirectory = new File(serverRoot, LIBRARIES_PATH_RELATIVE);
File setJavaHomeFile;
if (isWindows())
{
- setJavaHomeFile = new File(libDirectory, "set-java-home.bat");
+ setJavaHomeFile = new File(libDirectory, SET_JAVA_HOME_WINDOWS);
if (setJavaHomeFile.exists())
{
- return setJavaHomeFile;
+ if (!overWrite)
+ {
+ return setJavaHomeFile;
+ }
+ else
+ {
+ File f1 = new File(javaHome);
+ File f2 = new File(getOpenDSJavaHome(serverRoot));
+ if (f1.equals(f2))
+ {
+ return setJavaHomeFile;
+ }
+ }
}
-
BufferedWriter writer =
new BufferedWriter(new FileWriter(setJavaHomeFile));
- writer.write("set OPENDS_JAVA_HOME=" + javaHome);
+ writer.write("set "+OPENDS_JAVA_HOME+"=" + javaHome);
writer.newLine();
writer.close();
}
else
{
- setJavaHomeFile = new File(libDirectory, "set-java-home");
+ setJavaHomeFile = new File(libDirectory, SET_JAVA_HOME_UNIX);
if (setJavaHomeFile.exists())
{
- return setJavaHomeFile;
+ if (!overWrite)
+ {
+ return setJavaHomeFile;
+ }
+ else
+ {
+ File f1 = new File(javaHome);
+ File f2 = new File(getOpenDSJavaHome(serverRoot));
+ if (f1.equals(f2))
+ {
+ return setJavaHomeFile;
+ }
+ }
}
-
BufferedWriter writer =
new BufferedWriter(new FileWriter(setJavaHomeFile));
writer.write("#!/bin/sh");
writer.newLine();
writer.newLine();
- writer.write("OPENDS_JAVA_HOME=" + javaHome);
+ writer.write(OPENDS_JAVA_HOME+"=" + javaHome);
writer.newLine();
- writer.write("export OPENDS_JAVA_HOME");
+ writer.write("export "+OPENDS_JAVA_HOME);
writer.newLine();
writer.close();
}
@@ -295,6 +329,49 @@
}
/**
+ * Returns the java home value as it is specified in the set-java-home file.
+ * It returns <CODE>null</CODE> if the contents of the file are not valid, the
+ * file could not be read or if the file does not exist.
+ * @param serverRoot The path to the root of the Directory Server instance
+ * in which the set-java-home file is located.
+ * @return the java home value as it is specified in the set-java-home file.
+ * @throws IOException If a problem occurs while reading the file.
+ */
+ public static String getOpenDSJavaHome(String serverRoot) throws IOException
+ {
+ String javaHome = null;
+
+ File libDirectory = new File(serverRoot, LIBRARIES_PATH_RELATIVE);
+
+ File setJavaHomeFile;
+ if (isWindows())
+ {
+ setJavaHomeFile = new File(libDirectory, SET_JAVA_HOME_WINDOWS);
+ }
+ else
+ {
+ setJavaHomeFile = new File(libDirectory, SET_JAVA_HOME_UNIX);
+ }
+ if (setJavaHomeFile.exists())
+ {
+ BufferedReader reader =
+ new BufferedReader(new FileReader(setJavaHomeFile));
+ String line = reader.readLine();
+ String tag = OPENDS_JAVA_HOME+"=";
+ while ((line != null) && (javaHome == null))
+ {
+ int index = line.indexOf(tag);
+ if (index != -1)
+ {
+ javaHome = line.substring(index + tag.length());
+ }
+ line = reader.readLine();
+ }
+ }
+ return javaHome;
+ }
+
+ /**
* Returns {@code true} if the provided port is free and we can use it,
* {@code false} otherwise.
* @param hostname the host name we are analyzing.
--
Gitblit v1.10.0