001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.util;
028
029
030
031 import org.opends.server.config.ConfigException;
032 import org.opends.server.core.DirectoryServer;
033 import org.opends.server.types.DirectoryEnvironmentConfig;
034 import org.opends.server.types.InitializationException;
035
036 import static org.opends.messages.UtilityMessages.*;
037 import org.opends.messages.Message;
038 import static org.opends.server.util.ServerConstants.*;
039
040
041
042 /**
043 * This class provides a number of utility methods for using OpenDS in an
044 * embedded manner (i.e., running within the same JVM as another application and
045 * controlled by that application).
046 */
047 @org.opends.server.types.PublicAPI(
048 stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
049 mayInstantiate=false,
050 mayExtend=false,
051 mayInvoke=true)
052 public final class EmbeddedUtils
053 {
054 /**
055 * Indicates whether the Directory Server is currently running.
056 *
057 * @return {@code true} if the server is currently running, or {@code false}
058 * if not.
059 */
060 public static boolean isRunning()
061 {
062 return DirectoryServer.isRunning();
063 }
064
065
066
067 /**
068 * Attempts to start the Directory Server.
069 *
070 * @param config The environment configuration to use for the server.
071 *
072 * @throws ConfigException If a configuration problem is detected during
073 * the server initialization or startup process.
074 *
075 * @throws InitializationException If the Directory Server is already
076 * running, or if an error occurs during
077 * server initialization or startup.
078 */
079 public static void startServer(DirectoryEnvironmentConfig config)
080 throws ConfigException, InitializationException
081 {
082 if (DirectoryServer.isRunning())
083 {
084 throw new InitializationException(
085 ERR_EMBEDUTILS_SERVER_ALREADY_RUNNING.get());
086 }
087
088 DirectoryServer directoryServer = DirectoryServer.reinitialize(config);
089 directoryServer.startServer();
090 }
091
092
093
094 /**
095 * Attempts to stop the Directory Server.
096 *
097 * @param className The name of the class that initiated the shutdown.
098 * @param reason A message explaining the reason for the shutdown.
099 */
100 public static void stopServer(String className, Message reason)
101 {
102 DirectoryServer.shutDown(className, reason);
103 }
104
105
106
107 /**
108 * Attempts to restart the Directory Server. This will perform an in-core
109 * restart in which the existing server instance will be shut down, a new
110 * instance will be created, and it will be reinitialized and restarted.
111 *
112 * @param className The name of the class that initiated the restart.
113 * @param reason A message explaining the reason for the retart.
114 * @param config The environment configuration to use for the new server
115 * instance.
116 */
117 public static void restartServer(String className, Message reason,
118 DirectoryEnvironmentConfig config)
119 {
120 DirectoryServer.restart(className, reason, config);
121 }
122
123
124
125 /**
126 * Sets up a number of internal server data structures to ensure that they are
127 * properly initialized for use. This is necessary if server libraries are
128 * going to be used without the server running (e.g., to facilitate use in an
129 * LDAP client API, for DN processing, etc.). This will have no effect if the
130 * server has already been initialized for client use.
131 */
132 public static void initializeForClientUse()
133 {
134 DirectoryServer directoryServer = DirectoryServer.getInstance();
135 directoryServer.bootstrapClient();
136 }
137 }
138