From 92ce4633648268f705f2d0b439425bcf8d5ec40f Mon Sep 17 00:00:00 2001
From: kenneth_suter <kenneth_suter@localhost>
Date: Mon, 14 May 2007 15:21:19 +0000
Subject: [PATCH] This commit does the following:
---
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java | 50 ++--
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java | 107 +++++++++
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java | 9
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java | 94 +++++++-
opendj-sdk/opends/build.xml | 17 +
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java | 225 ++++++++++++++++++++
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java | 3
opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java | 108 +-------
8 files changed, 484 insertions(+), 129 deletions(-)
diff --git a/opendj-sdk/opends/build.xml b/opendj-sdk/opends/build.xml
index 7507f64..7d8ce6e 100644
--- a/opendj-sdk/opends/build.xml
+++ b/opendj-sdk/opends/build.xml
@@ -530,7 +530,24 @@
<include name="**/org/opends/server/util/CertificateManager.java"/>
<include name="**/org/opends/server/util/DynamicConstants.java"/>
<include name="**/org/opends/server/types/OperatingSystem.java"/>
+ <include name="**/org/opends/server/loggers/debug/TextDebugLogPublisher.java"/>
+ <include name="**/org/opends/server/loggers/debug/DebugLogger.java"/>
+ <include name="**/org/opends/server/loggers/TextErrorLogPublisher.java"/>
+ <include name="**/org/opends/server/loggers/TextWriter.java"/>
+ <include name="**/org/opends/server/loggers/ErrorLogger.java"/>
+ <include name="**/org/opends/server/loggers/TextAccessLogPublisher.java"/>
+ <include name="**/org/opends/server/loggers/AccessLogger.java"/>
+ <include name="**/org/opends/server/types/DN.java"/>
+ <include name="**/org/opends/server/api/DebugLogPublisher.java"/>
+ <include name="**/org/opends/server/api/ErrorLogPublisher.java"/>
+ <include name="**/org/opends/server/api/AccessLogPublisher.java"/>
<compilerarg value="-Xlint:all" />
+ <classpath>
+ <fileset dir="${lib.dir}">
+ <include name="*.jar" />
+ </fileset>
+ <pathelement path="${classes.dir}"/>
+ </classpath>
</javac>
<javac srcdir="${quicksetup.src.dir}" destdir="${quicksetup.classes.dir}"
debug="on" debuglevel="${build.debuglevel}" source="1.5"
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
index 7946edc..0869d69 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -49,6 +49,7 @@
import org.opends.admin.ads.SuffixDescriptor;
import org.opends.quicksetup.ui.*;
import org.opends.quicksetup.util.Utils;
+import org.opends.quicksetup.util.InProcessServerController;
import org.opends.quicksetup.*;
import org.opends.server.util.CertificateManager;
import org.opends.quicksetup.installer.ui.DataOptionsPanel;
@@ -1204,7 +1205,7 @@
}
if (startedServer)
{
- getServerController().stopServerInProcess();
+ new InProcessServerController(getInstallation()).stopServer();
}
}
}
@@ -1966,7 +1967,7 @@
* panel and update the UserInstallData object according to that content.
*
* @throws
- * UserInstallDataException if the data provided by the user is not
+ * UserDataException if the data provided by the user is not
* valid.
*
*/
@@ -2038,7 +2039,7 @@
* panel and update the UserInstallData object according to that content.
*
* @throws
- * UserInstallDataException if the data provided by the user is not
+ * UserDataException if the data provided by the user is not
* valid.
*
*/
@@ -2099,7 +2100,7 @@
* Validate the data provided by the user in the new suffix data options panel
* and update the UserInstallData object according to that content.
*
- * @throws UserInstallDataException if the data provided by the user is not
+ * @throws UserDataException if the data provided by the user is not
* valid.
*
*/
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
index 6050545..0bf42ce 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
@@ -29,6 +29,7 @@
import org.opends.quicksetup.*;
import org.opends.quicksetup.util.ServerController;
+import org.opends.quicksetup.util.InProcessServerController;
import org.opends.quicksetup.webstart.WebStartDownloader;
import javax.swing.*;
@@ -490,7 +491,7 @@
if (getInstallation().getStatus().isServerRunning()) {
control.stopServer();
}
- control.startServerInProcess(true);
+ new InProcessServerController(getInstallation()).startServer(true);
} catch (IOException e) {
String msg = "Failed to determine server state: " +
e.getLocalizedMessage();
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
index 75c1576..dd70c12 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/upgrader/Upgrader.java
@@ -31,11 +31,7 @@
import org.opends.quicksetup.upgrader.ui.WelcomePanel;
import org.opends.quicksetup.upgrader.ui.ChooseVersionPanel;
import org.opends.quicksetup.upgrader.ui.UpgraderReviewPanel;
-import org.opends.quicksetup.util.Utils;
-import org.opends.quicksetup.util.FileManager;
-import org.opends.quicksetup.util.ServerController;
-import org.opends.quicksetup.util.ZipExtractor;
-import org.opends.quicksetup.util.OperationOutput;
+import org.opends.quicksetup.util.*;
import org.opends.quicksetup.ui.*;
import java.awt.event.WindowEvent;
@@ -51,6 +47,7 @@
import static org.opends.quicksetup.Installation.*;
+
import javax.swing.*;
/**
@@ -209,7 +206,6 @@
static private final String SYS_PROP_NO_ABORT =
"org.opends.upgrader.Upgrader.NoAbort";
-
// Root files that will be ignored during backup
static private final String[] ROOT_FILES_TO_IGNORE_DURING_BACKUP = {
CHANGELOG_PATH_RELATIVE, // changelogDb
@@ -950,7 +946,7 @@
try {
LOG.log(Level.INFO, "stopping server");
- getServerController().stopServerInProcess();
+ new InProcessServerController(getInstallation()).stopServer();
LOG.log(Level.INFO, "server stopped");
} catch (Throwable t) {
LOG.log(Level.INFO, "Error stopping server", t);
@@ -1134,27 +1130,27 @@
*/
private void checkServerHealth() throws ApplicationException {
Installation installation = getInstallation();
- ServerController control = new ServerController(installation);
+ ServerHealthChecker healthChecker = new ServerHealthChecker(installation);
try {
- if (installation.getStatus().isServerRunning()) {
- control.stopServer();
- }
- OperationOutput op = control.startServer();
- List<String> errors = op.getErrors();
- if (errors != null) {
+ healthChecker.checkServer();
+ List<String> problems = healthChecker.getProblemMessages();
+ if (problems != null && problems.size() > 0) {
throw new ApplicationException(
ApplicationException.Type.APPLICATION,
- "The server currently starts with errors which must" +
- "be resolved before an upgrade can occur: " +
- Utils.listToString(errors, " "),
+ "The server currently starts with errors which must " +
+ "be resolved before an upgrade can occur: \n\n" +
+ Utils.listToString(problems, "\n\n"),
null);
}
- control.stopServer();
} catch (Exception e) {
- throw new ApplicationException(ApplicationException.Type.APPLICATION,
- "Server health check failed. Please resolve the following " +
- "before running the upgrade " +
- "tool: " + e.getLocalizedMessage(), e);
+ if (e instanceof ApplicationException) {
+ throw (ApplicationException)e;
+ } else {
+ throw new ApplicationException(ApplicationException.Type.APPLICATION,
+ "Server health check failed. Please resolve the following " +
+ "before running the upgrade " +
+ "tool: " + e.getLocalizedMessage(), e);
+ }
}
}
@@ -1224,13 +1220,15 @@
}
private void verifyUpgrade() throws ApplicationException {
- ServerController sc = new ServerController(getInstallation());
- OperationOutput op = sc.startServer();
- if (op.getErrors() != null) {
+ Installation installation = getInstallation();
+ ServerHealthChecker healthChecker = new ServerHealthChecker(installation);
+ healthChecker.checkServer();
+ List<String> errors = healthChecker.getProblemMessages();
+ if (errors != null && errors.size() > 0) {
throw new ApplicationException(ApplicationException.Type.APPLICATION,
"Upgraded server failed verification test by signaling " +
"errors during startup: " +
- Utils.listToString(op.getErrors(), " "), null);
+ Utils.listToString(errors, " "), null);
}
}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java
new file mode 100644
index 0000000..3c64fd3
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/InProcessServerController.java
@@ -0,0 +1,225 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup.util;
+
+import org.opends.quicksetup.*;
+import org.opends.server.loggers.debug.TextDebugLogPublisher;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.TextErrorLogPublisher;
+import org.opends.server.loggers.TextWriter;
+import org.opends.server.loggers.ErrorLogger;
+import org.opends.server.loggers.TextAccessLogPublisher;
+import org.opends.server.loggers.AccessLogger;
+import org.opends.server.types.DN;
+import org.opends.server.api.DebugLogPublisher;
+import org.opends.server.api.ErrorLogPublisher;
+import org.opends.server.api.AccessLogPublisher;
+
+import java.util.logging.Logger;
+import java.util.logging.Level;
+
+/**
+ * Class used to manipulate an OpenDS server in the same JVM process as
+ * the client class.
+ */
+public class InProcessServerController {
+
+ static private final Logger LOG =
+ Logger.getLogger(InProcessServerController.class.getName());
+
+ private Installation installation;
+
+ /**
+ * Creates a new instance that will operate on <code>application</code>'s
+ * installation.
+ * @param installation representing the server instance to control
+ */
+ public InProcessServerController(Installation installation) {
+ this.installation = installation;
+ }
+
+ /**
+ * Starts the directory server within this process.
+ * @param disableConnectionHandlers boolean that when true starts the
+ * the server mode that is otherwise up and running but will not accept any
+ * connections from external clients (i.e., does not create or initialize the
+ * connection handlers). This could be useful, for example, in an upgrade mode
+ * where it might be helpful to start the server but don't want it to appear
+ * externally as if the server is online without connection handlers
+ * listening.
+ * @return OperationOutput object containing output from the start server
+ * command invocation.
+ * @throws org.opends.server.config.ConfigException
+ * If there is a problem with the Directory Server
+ * configuration that prevents a critical component
+ * from being instantiated.
+ *
+ * @throws org.opends.server.types.InitializationException
+ * If some other problem occurs while
+ * attempting to initialize and start the
+ * Directory Server.
+ */
+ public OperationOutput startServer(boolean disableConnectionHandlers)
+ throws
+ org.opends.server.types.InitializationException,
+ org.opends.server.config.ConfigException {
+ LOG.log(Level.INFO, "Starting in process server with connection handlers " +
+ (disableConnectionHandlers ? "disabled" : "enabled"));
+ System.setProperty(
+ "org.opends.server.DisableConnectionHandlers",
+ disableConnectionHandlers ? "true" : null);
+ return startServer();
+ }
+
+ /**
+ * Stops a server that had been running 'in process'.
+ */
+ public void stopServer() {
+ LOG.log(Level.INFO, "Shutting down in process server");
+ org.opends.server.core.DirectoryServer.shutDown(
+ ServerController.class.getName(),
+ "quicksetup requests shutdown");
+ }
+
+ /**
+ * Starts the OpenDS server in this process.
+ * @return OperationOutput with the results of the operation.
+ * @throws org.opends.server.config.ConfigException
+ * If there is a problem with the Directory Server
+ * configuration that prevents a critical component
+ * from being instantiated.
+ *
+ * @throws org.opends.server.types.InitializationException
+ * If some other problem occurs while
+ * attempting to initialize and start the
+ * Directory Server.
+ */
+ public OperationOutput startServer()
+ throws
+ org.opends.server.types.InitializationException,
+ org.opends.server.config.ConfigException
+ {
+ OperationOutput output = new OperationOutput();
+
+ // Bootstrap and start the Directory Server.
+ LOG.log(Level.FINER, "Bootstrapping directory server");
+ org.opends.server.core.DirectoryServer directoryServer =
+ org.opends.server.core.DirectoryServer.getInstance();
+
+ directoryServer.bootstrapServer();
+ String configClass = "org.opends.server.extensions.ConfigFileHandler";
+ String configPath = Utils.getPath(
+ installation.getCurrentConfigurationFile());
+ directoryServer.initializeConfiguration(configClass, configPath);
+
+ try {
+
+ DebugLogPublisher startupDebugPublisher =
+ TextDebugLogPublisher.getStartupTextDebugPublisher(
+ new ServerControllerTextWriter(output) {
+ void storeRecord(String record, OperationOutput output)
+ {
+ output.addDebugMessage(record);
+ }
+ });
+ DebugLogger.removeAllDebugLogPublishers();
+ DebugLogger.addDebugLogPublisher(DN.NULL_DN,
+ startupDebugPublisher);
+
+ ErrorLogPublisher startupErrorPublisher =
+ TextErrorLogPublisher.getStartupTextErrorPublisher(
+ new ServerControllerTextWriter(output) {
+ void storeRecord(String record, OperationOutput output)
+ {
+ output.addErrorMessage(record);
+ }
+ });
+
+ ErrorLogger.removeAllErrorLogPublishers();
+ ErrorLogger.addErrorLogPublisher(DN.NULL_DN,
+ startupErrorPublisher);
+
+ AccessLogPublisher startupAccessPublisher =
+ TextAccessLogPublisher.getStartupTextAccessPublisher(
+ new ServerControllerTextWriter(output) {
+ void storeRecord(String record, OperationOutput output)
+ {
+ output.addAccessMessage(record);
+ }
+ });
+
+ AccessLogger.removeAllAccessLogPublishers();
+ AccessLogger.addAccessLogPublisher(DN.NULL_DN,
+ startupAccessPublisher);
+
+ } catch (Exception e) {
+ LOG.log(Level.INFO, "Error installing test log publishers: " +
+ e.toString());
+ }
+
+ LOG.log(Level.FINER, "Invoking start server");
+ directoryServer.startServer();
+
+ return output;
+ }
+
+ /**
+ * Pushes messages published by the server loggers into OperationOutput.
+ */
+ private abstract class ServerControllerTextWriter implements TextWriter {
+
+ private int bytesWritten = 0;
+ private OperationOutput output = null;
+
+ abstract void storeRecord(String record, OperationOutput output);
+
+ ServerControllerTextWriter(OperationOutput output) {
+ this.output = output;
+ }
+
+ public void writeRecord(String record) {
+ if (record != null) {
+ bytesWritten += bytesWritten;
+ storeRecord(record, output);
+ }
+ }
+
+ public void flush() {
+ // do nothing;
+ }
+
+ public void shutdown() {
+ // do nothing;
+ }
+
+ public long getBytesWritten() {
+ return bytesWritten;
+ }
+ }
+
+}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java
index 65c7d3e..8daec2d 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/OperationOutput.java
@@ -28,6 +28,8 @@
package org.opends.quicksetup.util;
import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
/**
* Contains information about an operation invoked by this class.
@@ -36,15 +38,52 @@
private Exception exception = null;
- private List<String> errors = null;
+ private List<String> errorMessages = new ArrayList<String>();
+ private List<String> debugMessages = new ArrayList<String>();
+ private List<String> accessMessages = new ArrayList<String>();
/**
- * Gets a list of string representing error messages obtained
- * by invoking the operation. Null if there were no errors.
- * @return List of Strings representing errors
+ * Gets a list of strings representing error messages obtained
+ * by invoking the operation that match <code>regex</code>.
+ * @param regex String used to find particular error messages
+ * @return List of Strings representing errorMessages that contain
+ * the provided <code>regex</code> string.
*/
- public List<String> getErrors() {
- return errors;
+ public List<String> getErrorMessages(String regex) {
+ List<String> errorMessagesSubset = new ArrayList<String>();
+ for (String msg : errorMessages) {
+ if (msg.matches(regex)) {
+ errorMessagesSubset.add(msg);
+ }
+ }
+ return Collections.unmodifiableList(errorMessagesSubset);
+ }
+
+ /**
+ * Gets a list of strings representing error messages obtained
+ * by invoking the operation.
+ * @return List of Strings representing errorMessages
+ */
+ public List<String> getErrorMessages() {
+ return Collections.unmodifiableList(errorMessages);
+ }
+
+ /**
+ * Gets a list of strings representing error messages obtained
+ * by invoking the operation.
+ * @return List of Strings representing errorMessages
+ */
+ public List<String> getDebugMessages() {
+ return Collections.unmodifiableList(debugMessages);
+ }
+
+ /**
+ * Gets a list of strings representing error messages obtained
+ * by invoking the operation.
+ * @return List of Strings representing errorMessages
+ */
+ public List<String> getAccessMessages() {
+ return Collections.unmodifiableList(accessMessages);
}
/**
@@ -66,11 +105,44 @@
}
/**
- * Sets the list of error messages that occurred during execution.
- * Can be null to indicate no errors were encountered.
- * @param errors List of Strings representing error messages
+ * Adds an error message.
+ * @param errorMessage an error message
*/
- void setErrors(List<String> errors) {
- this.errors = errors;
+ void addErrorMessage(String errorMessage) {
+ this.errorMessages.add(errorMessage);
}
+
+ /**
+ * Adds an access message.
+ * @param accessMessage an error message
+ */
+ void addAccessMessage(String accessMessage) {
+ this.accessMessages.add(accessMessage);
+ }
+
+ /**
+ * Adds an error message.
+ * @param debugMessage an error message
+ */
+ void addDebugMessage(String debugMessage) {
+ this.debugMessages.add(debugMessage);
+ }
+
+
+ /**
+ * Sets the list of error messages that occurred during execution.
+ * @param accessMessages List of Strings representing error messages
+ */
+ void setAccessMessages(List<String> accessMessages) {
+ this.accessMessages = accessMessages;
+ }
+
+ /**
+ * Sets the list of error messages that occurred during execution.
+ * @param debugMessages List of Strings representing error messages
+ */
+ void setDebugMessages(List<String> debugMessages) {
+ this.debugMessages = debugMessages;
+ }
+
}
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
index b6e4ab1..6b4689f 100644
--- a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerController.java
@@ -206,45 +206,6 @@
}
/**
- * Starts the directory server within this process.
- * @param disableConnectionHandlers boolean that when true starts the
- * the server mode that is otherwise up and running but will not accept any
- * connections from external clients (i.e., does not create or initialize the
- * connection handlers). This could be useful, for example, in an upgrade mode
- * where it might be helpful to start the server but don't want it to appear
- * externally as if the server is online without connection handlers
- * listening.
- *
- * @throws org.opends.server.config.ConfigException
- * If there is a problem with the Directory Server
- * configuration that prevents a critical component
- * from being instantiated.
- *
- * @throws org.opends.server.types.InitializationException
- * If some other problem occurs while
- * attempting to initialize and start the
- * Directory Server.
- */
- public void startServerInProcess(boolean disableConnectionHandlers)
- throws
- org.opends.server.types.InitializationException,
- org.opends.server.config.ConfigException {
- System.setProperty(
- "org.opends.server.DisableConnectionHandlers",
- disableConnectionHandlers ? "true" : null);
- startServerInProcess();
- }
-
- /**
- * Stops a server that had been running 'in process'.
- */
- public void stopServerInProcess() {
- org.opends.server.core.DirectoryServer.shutDown(
- ServerController.class.getName(),
- "quicksetup requests shutdown");
- }
-
- /**
* This methods starts the server.
* @return OperationOutput object containing output from the start server
* command invocation.
@@ -317,15 +278,25 @@
}
}
- // Collect any errors found in the output
- List<String> errors = errReader.getErrors();
- if (outputReader.getErrors() != null) {
- if (errors == null) {
- errors = new ArrayList<String>();
+ // Collect any messages found in the output
+ List<String> errors = errReader.getMessages();
+ if (errors != null) {
+ for(String error : errors) {
+ output.addErrorMessage(error);
}
- errors.addAll(outputReader.getErrors());
}
- output.setErrors(errors);
+ List<String> messages = outputReader.getMessages();
+ if (messages != null) {
+ for (String msg : messages) {
+
+ // NOTE: this may not be the best place to drop these.
+ // However upon startup the server seems to log all messages,
+ // regardless of whether or not they signal an error condition,
+ // to its error log.
+
+ output.addErrorMessage(msg);
+ }
+ }
// Check if something wrong occurred reading the starting of the server
ApplicationException ex = errReader.getException();
@@ -426,36 +397,6 @@
}
/**
- * Starts the OpenDS server in this process.
- *
- * @throws org.opends.server.config.ConfigException
- * If there is a problem with the Directory Server
- * configuration that prevents a critical component
- * from being instantiated.
- *
- * @throws org.opends.server.types.InitializationException
- * If some other problem occurs while
- * attempting to initialize and start the
- * Directory Server.
- */
- public void startServerInProcess()
- throws
- org.opends.server.types.InitializationException,
- org.opends.server.config.ConfigException
- {
- // Bootstrap and start the Directory Server.
- org.opends.server.core.DirectoryServer directoryServer =
- org.opends.server.core.DirectoryServer.getInstance();
-
- directoryServer.bootstrapServer();
- String configClass = "org.opends.server.extensions.ConfigFileHandler";
- String configPath = Utils.getPath(
- installation.getCurrentConfigurationFile());
- directoryServer.initializeConfiguration(configClass, configPath);
- directoryServer.startServer();
- }
-
- /**
* This class is used to read the standard error and standard output of the
* Stop process.
* <p/>
@@ -536,7 +477,7 @@
{
private ApplicationException ex;
- private List<String> errors;
+ private List<String> messages = new ArrayList<String>();
private boolean isFinished;
@@ -590,14 +531,7 @@
isFinished = true;
}
- // Collect lines that would seem to indicate all is
- // not well with the server
- if (line.indexOf("severity=SEVERE_ERROR") != -1) {
- if (errors == null) {
- errors = new ArrayList<String>();
- }
- errors.add(line);
- }
+ messages.add(line);
line = reader.readLine();
}
@@ -625,8 +559,8 @@
return ex;
}
- public List<String> getErrors() {
- return errors;
+ public List<String> getMessages() {
+ return messages;
}
/**
diff --git a/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java
new file mode 100644
index 0000000..082b66a
--- /dev/null
+++ b/opendj-sdk/opends/src/quicksetup/org/opends/quicksetup/util/ServerHealthChecker.java
@@ -0,0 +1,107 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.quicksetup.util;
+
+import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.ApplicationException;
+import org.opends.server.util.ServerConstants;
+
+import java.util.List;
+
+/**
+ * Checks a server health by starting a server and looking through its
+ * log messages for signs that things may not be well.
+ */
+public class ServerHealthChecker {
+
+ private Installation installation = null;
+
+ private List<String> errors = null;
+
+ /**
+ * Regular expression used to determine whether or not a server
+ * is healthy enough for upgrade by looking through its startup
+ * logs.
+ */
+ static private final String UNHEALTHY_SERVER_LOG_REGEX =
+ new StringBuilder()
+ .append(".*(")
+ .append(ServerConstants.ERROR_SEVERITY_FATAL)
+ .append("|")
+ .append(ServerConstants.ERROR_SEVERITY_SEVERE_ERROR)
+ .append(")+.*").toString();
+
+
+ /**
+ * Creates an instance.
+ * @param installation of the server to check
+ */
+ public ServerHealthChecker(Installation installation) {
+ this.installation = installation;
+ }
+
+ /**
+ * Diagnoses the server's health by stopping (if necessary) and starting
+ * the server in process and analyzing the resulting log messages.
+ * Following the call to this method the server is left in a stopped state.
+ * @throws ApplicationException if things go wrong
+ */
+ public void checkServer() throws ApplicationException {
+ InProcessServerController control =
+ new InProcessServerController(installation);
+ try {
+ if (installation.getStatus().isServerRunning()) {
+ new ServerController(installation).stopServer();
+ }
+ OperationOutput op = control.startServer(true);
+ errors = op.getErrorMessages(UNHEALTHY_SERVER_LOG_REGEX);
+ } catch (Exception e) {
+ if (e instanceof ApplicationException) {
+ throw (ApplicationException)e;
+ } else {
+ throw new ApplicationException(ApplicationException.Type.APPLICATION,
+ "Server health check failed. Please resolve the following " +
+ "before running the upgrade " +
+ "tool: " + e.getLocalizedMessage(), e);
+ }
+ } finally {
+ control.stopServer();
+ }
+ }
+
+ /**
+ * Gets a list of Strings representing error messages that resulted
+ * from calling <code>checkServer</code>; null if <code>checkServer</code>
+ * has not been called.
+ * @return List of strings containing error messages
+ */
+ public List<String> getProblemMessages() {
+ return errors;
+ }
+
+}
--
Gitblit v1.10.0