From 508d3949e86d0fd27885d1b825889a80d7a46ee7 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 17 May 2013 13:58:41 +0000
Subject: [PATCH] OPENDJ-842 (CR-1699) On Windows, the setup command hangs when the length of the install path is too long
---
opends/build.xml | 18 +++
opends/src/server/org/opends/server/tools/upgrade/Installation.java | 9 -
opends/resource/bin/_script-util.sh | 5
opends/src/quicksetup/org/opends/quicksetup/util/Utils.java | 48 ++++-----
opends/src/quicksetup/org/opends/quicksetup/Installation.java | 19 +--
opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java | 92 ++++++++----------
opends/resource/bin/_script-util.bat | 2
opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java | 59 +++++------
8 files changed, 119 insertions(+), 133 deletions(-)
diff --git a/opends/build.xml b/opends/build.xml
index a0af7c2..d862db4 100644
--- a/opends/build.xml
+++ b/opends/build.xml
@@ -1136,7 +1136,23 @@
</copy>
<antcall target="package-snmp" />
-
+
+ <!-- Build the bootstrap jar that avoids getting the error message "The input line is too long" on Windows -->
+ <manifestclasspath property="manifest.classpath"
+ jarfile="${pdir}/lib/bootstrap.jar">
+ <classpath>
+ <fileset dir="${pdir}/lib">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </manifestclasspath>
+ <jar jarfile="${pdir}/lib/bootstrap.jar">
+ <manifest>
+ <attribute name="Built-By" value="${user.name}" />
+ <attribute name="Class-Path" value="${manifest.classpath}" />
+ </manifest>
+ </jar>
+
<!-- Create buildinfo files -->
<echo message="${MAJOR_VERSION}.${MINOR_VERSION}.${POINT_VERSION}.${REVISION_NUMBER}"
file="${pdir}/template/config/buildinfo" />
diff --git a/opends/resource/bin/_script-util.bat b/opends/resource/bin/_script-util.bat
index 7c03b5e..15f426a 100644
--- a/opends/resource/bin/_script-util.bat
+++ b/opends/resource/bin/_script-util.bat
@@ -61,7 +61,7 @@
rem it also helps comparing the two paths
FOR /F %%i IN ("%INSTALL_ROOT%") DO set INSTALL_ROOT=%%~dpnxi
FOR /F %%i IN ("%INSTANCE_ROOT%") DO set INSTANCE_ROOT=%%~dpnxi
-FOR %%x in ("%INSTALL_ROOT%\lib\*.jar") DO call "%INSTALL_ROOT%\lib\setcp.bat" %%x
+call "%INSTALL_ROOT%\lib\setcp.bat" "%INSTALL_ROOT%\lib\bootstrap.jar"
FOR %%x in ("%INSTALL_ROOT%\resources\*.jar") DO call "%INSTALL_ROOT%\lib\setcp.bat" %%x
set CLASSPATH=%INSTANCE_ROOT%\classes;%CLASSPATH%
if "%INSTALL_ROOT%" == "%INSTANCE_ROOT%" goto setClassPathDone
diff --git a/opends/resource/bin/_script-util.sh b/opends/resource/bin/_script-util.sh
index 6d33056..1c314e6 100644
--- a/opends/resource/bin/_script-util.sh
+++ b/opends/resource/bin/_script-util.sh
@@ -258,10 +258,7 @@
do
CLASSPATH=${CLASSPATH}:${JAR}
done
- for JAR in "${INSTALL_ROOT}/lib/"*.jar
- do
- CLASSPATH=${CLASSPATH}:${JAR}
- done
+ CLASSPATH="${CLASSPATH}:${INSTALL_ROOT}/lib/bootstrap.jar"
if [ "${INSTALL_ROOT}" != "${INSTANCE_ROOT}" ]
then
for JAR in "${INSTANCE_ROOT}/lib/"*.jar
diff --git a/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java b/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
index 3eb91c1..c3f493b 100644
--- a/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opends/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
@@ -113,6 +113,7 @@
import org.opends.guitools.controlpanel.ui.renderer.
AccessibleTableHeaderRenderer;
import org.opends.messages.Message;
+import org.opends.quicksetup.Installation;
import org.opends.quicksetup.ui.UIFactory;
import org.opends.quicksetup.util.Utils;
import org.opends.server.api.AttributeSyntax;
@@ -1115,19 +1116,15 @@
inTag = false;
String tag = s.substring(lastOpenTag, i+1);
lastOpenTag = -1;
+ lastLine.append(c);
if (isLineBreakTag(tag))
{
- lastLine.append(c);
sb.append(lastLine);
lastLine.delete(0, lastLine.length());
lastLineLength = 0;
lastSpace = -1;
lastLineLengthInLastSpace = 0;
}
- else
- {
- lastLine.append(c);
- }
}
else
{
@@ -1142,8 +1139,8 @@
{
if (s.length() >= i + HTML_SPACE.length())
{
- if (s.substring(i, i + HTML_SPACE.length()).equalsIgnoreCase(
- HTML_SPACE))
+ if (HTML_SPACE.equalsIgnoreCase(s.substring(i, i
+ + HTML_SPACE.length())))
{
if (lastLineLength < nCols)
{
@@ -1243,11 +1240,11 @@
private static boolean isLineBreakTag(String tag)
{
- return tag.equalsIgnoreCase("<br>") ||
- tag.equalsIgnoreCase("</br>") ||
- tag.equalsIgnoreCase("</div>") ||
- tag.equalsIgnoreCase("<p>") ||
- tag.equalsIgnoreCase("</p>");
+ return "<br>".equalsIgnoreCase(tag) ||
+ "</br>".equalsIgnoreCase(tag) ||
+ "</div>".equalsIgnoreCase(tag) ||
+ "<p>".equalsIgnoreCase(tag) ||
+ "</p>".equalsIgnoreCase(tag);
}
/**
@@ -1340,7 +1337,7 @@
Component parent = comp;
while (parent != null)
{
- if ((parent instanceof JDialog) || (parent instanceof JFrame))
+ if (parent instanceof JDialog || parent instanceof JFrame)
{
return (Window)parent;
}
@@ -1750,7 +1747,7 @@
buf.append("<br><br>")
.append(applyFont(details.toString(), detailsFont));
}
- return "<form>"+buf.toString()+"</form>";
+ return "<form>" + buf + "</form>";
}
@@ -1954,21 +1951,7 @@
/* Get the install path from the Class Path */
String sep = System.getProperty("path.separator");
String[] classPaths = System.getProperty("java.class.path").split(sep);
- String path = null;
- for (int i = 0; i < classPaths.length && (path == null); i++)
- {
- for (int j = 0; j < org.opends.quicksetup.Installation.
- OPEN_DS_JAR_RELATIVE_PATHS.length &&
- (path == null); j++)
- {
- String normPath = classPaths[i].replace(File.separatorChar, '/');
- if (normPath.endsWith(
- org.opends.quicksetup.Installation.OPEN_DS_JAR_RELATIVE_PATHS[j]))
- {
- path = classPaths[i];
- }
- }
- }
+ String path = getInstallPath(classPaths);
if (path != null) {
File f = new File(path).getAbsoluteFile();
File librariesDir = f.getParentFile();
@@ -1990,6 +1973,19 @@
return installPath;
}
+ private static String getInstallPath(String[] classPaths)
+ {
+ for (String classPath : classPaths)
+ {
+ String normPath = classPath.replace(File.separatorChar, '/');
+ if (normPath.endsWith(Installation.OPENDJ_BOOTSTRAP_JAR_RELATIVE_PATH))
+ {
+ return classPath;
+ }
+ }
+ return null;
+ }
+
/**
* Returns <CODE>true</CODE> if the server located in the provided path
* is running and <CODE>false</CODE> otherwise.
@@ -2002,8 +1998,7 @@
boolean isServerRunning;
String lockFileName = ServerConstants.SERVER_LOCK_FILE_NAME +
ServerConstants.LOCK_FILE_SUFFIX;
- String lockPathRelative =
- org.opends.quicksetup.Installation.LOCKS_PATH_RELATIVE;
+ String lockPathRelative = Installation.LOCKS_PATH_RELATIVE;
File locksPath = new File(serverRootDirectory, lockPathRelative);
String lockFile = new File(locksPath, lockFileName).getAbsolutePath();
StringBuilder failureReason = new StringBuilder();
@@ -2266,7 +2261,7 @@
{
boolean hasImageSyntax = false;
attrName = Utilities.getAttributeNameWithoutOptions(attrName).toLowerCase();
- if (attrName.equals("photo"))
+ if ("photo".equals(attrName))
{
hasImageSyntax = true;
}
diff --git a/opends/src/quicksetup/org/opends/quicksetup/Installation.java b/opends/src/quicksetup/org/opends/quicksetup/Installation.java
index 465f509..5ee97f5 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/Installation.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/Installation.java
@@ -25,22 +25,19 @@
* Copyright 2006-2010 Sun Microsystems, Inc.
* Portions Copyright 2011-2013 ForgeRock AS
*/
-
package org.opends.quicksetup;
-
-
-import org.opends.messages.Message;
import static org.opends.messages.QuickSetupMessages.*;
import java.io.*;
import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.concurrent.FutureTask;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.opends.messages.Message;
import org.opends.quicksetup.util.Utils;
import org.opends.server.util.SetupUtils;
@@ -54,11 +51,9 @@
public final class Installation
{
- /**
- * Relative path to OpenDJ jar files.
- */
- public static final String[] OPEN_DS_JAR_RELATIVE_PATHS = {
- "lib/quicksetup.jar", "lib/OpenDJ.jar", "lib/je.jar" };
+ /** Relative path to bootstrap OpenDJ jar file. */
+ public static final String OPENDJ_BOOTSTRAP_JAR_RELATIVE_PATH =
+ "lib/bootstrap.jar";
/**
* The relative path where all the Windows binaries (batch files) are.
diff --git a/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
index 2228310..1efbf14 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/util/Utils.java
@@ -27,7 +27,6 @@
*/
package org.opends.quicksetup.util;
-import org.opends.messages.Message;
import static org.opends.messages.QuickSetupMessages.*;
import java.io.BufferedOutputStream;
@@ -68,16 +67,16 @@
import org.opends.admin.ads.SuffixDescriptor;
import org.opends.admin.ads.TopologyCacheException;
import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
+import org.opends.messages.MessageDescriptor;
import org.opends.quicksetup.*;
import org.opends.quicksetup.installer.AuthenticationData;
import org.opends.quicksetup.installer.DataReplicationOptions;
import org.opends.quicksetup.installer.NewSuffixOptions;
import org.opends.quicksetup.installer.SuffixesToReplicateOptions;
import org.opends.quicksetup.ui.UIFactory;
-
import org.opends.server.util.SetupUtils;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.MessageDescriptor;
/**
@@ -197,6 +196,7 @@
// in the logger and then kill the process.
Thread t = new Thread(new Runnable()
{
+ @Override
public void run()
{
try
@@ -1107,19 +1107,7 @@
/* Get the install path from the Class Path */
String sep = System.getProperty("path.separator");
String[] classPaths = System.getProperty("java.class.path").split(sep);
- String path = null;
- for (int i = 0; i < classPaths.length && (path == null); i++)
- {
- for (int j = 0; j < Installation.OPEN_DS_JAR_RELATIVE_PATHS.length &&
- (path == null); j++)
- {
- String normPath = classPaths[i].replace(File.separatorChar, '/');
- if (normPath.endsWith(Installation.OPEN_DS_JAR_RELATIVE_PATHS[j]))
- {
- path = classPaths[i];
- }
- }
- }
+ String path = getInstallPath(classPaths);
if (path != null) {
File f = new File(path).getAbsoluteFile();
File librariesDir = f.getParentFile();
@@ -1141,6 +1129,19 @@
return installPath;
}
+ private static String getInstallPath(final String[] classPaths)
+ {
+ for (String classPath : classPaths)
+ {
+ final String normPath = classPath.replace(File.separatorChar, '/');
+ if (normPath.endsWith(Installation.OPENDJ_BOOTSTRAP_JAR_RELATIVE_PATH))
+ {
+ return classPath;
+ }
+ }
+ return null;
+ }
+
/**
* Returns the path of the installation of the directory server. Note that
* this method assumes that this code is being run locally.
@@ -1455,9 +1456,7 @@
* @return true if the string contains HTML
*/
static public boolean containsHtml(String text) {
- return (text != null &&
- text.indexOf('<') != -1 &&
- text.indexOf('>') != -1);
+ return text != null && text.indexOf('<') != -1 && text.indexOf('>') != -1;
}
private static EmptyPrintStream emptyStream = new EmptyPrintStream();
@@ -1941,13 +1940,9 @@
builder.append(formatter.getFormattedProgress(Message.raw(cmd.get(0))));
int initialIndex = 1;
StringBuilder sbSeparator = new StringBuilder();
- if (Utils.isWindows())
+ sbSeparator.append(formatter.getSpace());
+ if (!Utils.isWindows())
{
- sbSeparator.append(formatter.getSpace());
- }
- else
- {
- sbSeparator.append(formatter.getSpace());
sbSeparator.append("\\");
sbSeparator.append(formatter.getLineBreak());
for (int i=0 ; i < 10 ; i++)
@@ -2576,6 +2571,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public void println(String msg)
{
LOG.log(Level.INFO, "EmptyStream msg: "+msg);
diff --git a/opends/src/server/org/opends/server/tools/upgrade/Installation.java b/opends/src/server/org/opends/server/tools/upgrade/Installation.java
index 35f7914..91c0f17 100644
--- a/opends/src/server/org/opends/server/tools/upgrade/Installation.java
+++ b/opends/src/server/org/opends/server/tools/upgrade/Installation.java
@@ -25,7 +25,6 @@
* Copyright 2006-2010 Sun Microsystems, Inc.
* Portions Copyright 2011-2013 ForgeRock AS
*/
-
package org.opends.server.tools.upgrade;
/**
@@ -36,11 +35,9 @@
public final class Installation
{
- /**
- * Relative path to OpenDJ jar files.
- */
- public static final String[] OPEN_DS_JAR_RELATIVE_PATHS = {
- "lib/quicksetup.jar", "lib/OpenDJ.jar", "lib/je.jar" };
+ /** Relative path to bootstrap OpenDJ jar file. */
+ public static final String OPENDJ_BOOTSTRAP_JAR_RELATIVE_PATH =
+ "lib/bootstrap.jar";
/**
* The relative path where all the Windows binaries (batch files) are.
diff --git a/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java b/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java
index 9d9d21e..04cd22f 100644
--- a/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java
+++ b/opends/src/server/org/opends/server/tools/upgrade/UpgradeUtils.java
@@ -24,15 +24,13 @@
*
* Copyright 2013 ForgeRock AS
*/
-
package org.opends.server.tools.upgrade;
+import static org.opends.messages.ConfigMessages.*;
import static org.opends.messages.ToolMessages.*;
-import static org.opends.messages.ConfigMessages.INFO_CONFIG_FILE_HEADER;
-import static org.opends.server.tools.upgrade.FileManager.deleteRecursively;
-import static org.opends.server.tools.upgrade.FileManager.rename;
+import static org.opends.server.tools.upgrade.FileManager.*;
import static org.opends.server.tools.upgrade.Installation.*;
-import static org.opends.server.util.ServerConstants.EOL;
+import static org.opends.server.util.ServerConstants.*;
import java.io.BufferedReader;
import java.io.File;
@@ -82,21 +80,21 @@
private final static Logger LOG = Logger
.getLogger(UpgradeCli.class.getName());
- // The config folder of the current installation.
+ /** The config folder of the current installation. */
static final File configDirectory = new File(getInstallationPath(),
Installation.CONFIG_PATH_RELATIVE);
- // The config/schema folder of the current installation.
+ /** The config/schema folder of the current installation. */
static final File configSchemaDirectory = new File(getInstallationPath(),
Installation.CONFIG_PATH_RELATIVE + File.separator
+ Installation.SCHEMA_PATH_RELATIVE);
- // The template folder of the current installation.
+ /** The template folder of the current installation. */
static final File templateDirectory = new File(getInstallationPath(),
Installation.CONFIG_PATH_RELATIVE + File.separator
+ Installation.TEMPLATE_RELATIVE_PATH);
- // The template/config/schema folder of the current installation.
+ /** The template/config/schema folder of the current installation. */
static final File templateConfigSchemaDirectory = new File(
getInstallationPath(), Installation.TEMPLATE_RELATIVE_PATH
+ File.separator + Installation.CONFIG_PATH_RELATIVE + File.separator
@@ -120,19 +118,7 @@
final String sep = System.getProperty("path.separator");
final String[] classPaths =
System.getProperty("java.class.path").split(sep);
- String path = null;
- for (int i = 0; i < classPaths.length && (path == null); i++)
- {
- for (int j = 0; j < Installation.OPEN_DS_JAR_RELATIVE_PATHS.length
- && (path == null); j++)
- {
- final String normPath = classPaths[i].replace(File.separatorChar, '/');
- if (normPath.endsWith(Installation.OPEN_DS_JAR_RELATIVE_PATHS[j]))
- {
- path = classPaths[i];
- }
- }
- }
+ String path = getInstallPath(classPaths);
if (path != null)
{
final File f = new File(path).getAbsoluteFile();
@@ -155,6 +141,19 @@
return installPath;
}
+ private static String getInstallPath(final String[] classPaths)
+ {
+ for (String classPath : classPaths)
+ {
+ final String normPath = classPath.replace(File.separatorChar, '/');
+ if (normPath.endsWith(Installation.OPENDJ_BOOTSTRAP_JAR_RELATIVE_PATH))
+ {
+ return classPath;
+ }
+ }
+ return null;
+ }
+
/**
* Returns the path of the installation of the directory server. Note that
* this method assumes that this code is being run locally.
@@ -505,15 +504,12 @@
LOG.log(Level.SEVERE, ex.getMessage());
}
}
- if (filter == null && changeType == PersistentSearchChangeType.ADD)
+ if (filter == null && changeType == PersistentSearchChangeType.ADD
+ && (entry.getName() + "dn: ").equals(lines[0]))
{
- if (new StringBuilder("dn: ").append(entry.getName().toString())
- .toString().equals(lines[0]))
- {
- LOG.log(Level.INFO, String.format("Entry %s found", entry.getName()
- .toString()));
- alreadyExist = true;
- }
+ LOG.log(Level.INFO, String.format("Entry %s found", entry.getName()
+ .toString()));
+ alreadyExist = true;
}
writer.writeEntry(entry);
}
@@ -589,7 +585,7 @@
{
reader = new LDIFEntryReader(new FileInputStream(templateFile));
- LinkedList<String> definitionsList = new LinkedList<String>();
+ final LinkedList<String> definitionsList = new LinkedList<String>();
final Entry schemaEntry = reader.readEntry();
Schema schema = null;
@@ -604,8 +600,7 @@
try
{
final String definition =
- new StringBuilder("attributeTypes: ").append(
- schema.getAttributeType(att).toString()).toString();
+ schema.getAttributeType(att) + "attributeTypes: ";
definitionsList.add(definition);
LOG.log(Level.INFO, String.format("Added : %s", definition));
}
@@ -623,8 +618,8 @@
{
try
{
- final String definition = new StringBuilder("objectClasses: ")
- .append(schema.getObjectClass(oc).toString()).toString();
+ final String definition =
+ schema.getObjectClass(oc) + "objectClasses: ";
definitionsList.add(definition);
LOG.log(Level.INFO, String.format("Added : %s", definition));
}
@@ -640,23 +635,19 @@
br = new BufferedReader(new FileReader(destination));
fw = new FileWriter(copy);
- String line = null;
- if (definitionsList != null)
+ String line = br.readLine();
+ while (line != null && !"".equals(line))
{
+ fw.write(line + EOL);
line = br.readLine();
- while (line != null && !line.equals(""))
- {
- fw.write(line + EOL);
- line = br.readLine();
- }
- for (final String definition : definitionsList)
- {
- writeLine(fw, definition, 80);
- changeCount++;
- }
- // Must be ended with a blank line
- fw.write(EOL);
}
+ for (final String definition : definitionsList)
+ {
+ writeLine(fw, definition, 80);
+ changeCount++;
+ }
+ // Must be ended with a blank line
+ fw.write(EOL);
}
finally
{
@@ -759,8 +750,7 @@
int index = 0;
if (changeType == PersistentSearchChangeType.MODIFY)
{
- modifiedLines[0] =
- new StringBuilder("dn: ").append(dn.toString()).toString();
+ modifiedLines[0] = dn + "dn: ";
modifiedLines[1] = "changetype: modify";
index = 2;
}
--
Gitblit v1.10.0