From 86f898b050a24dac35c3a7c0e4276e25e888e09c Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Wed, 21 Sep 2016 15:15:44 +0000
Subject: [PATCH] OPENDJ-2413 Add a new maven module opendj-embedded-server-examples that contains exemples for an embeddded directory server
---
opendj-embedded-server-examples/src/main/javadoc/overview.html | 23 ++
opendj-embedded-server-examples/src/site/xdoc/index.xml.vm | 76 ++++++
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java | 17 +
opendj-embedded-server-examples/src/site/site.xml | 33 +++
opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/package-info.java | 21 +
opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java | 75 ++++++
opendj-embedded-server-examples/src/main/assembly/examples.xml | 39 +++
pom.xml | 1
opendj-embedded-server-examples/README | 22 ++
opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java | 104 +++++++++
opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java | 5
opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java | 103 +++++++++
opendj-embedded-server-examples/src/license/THIRD-PARTY.properties | 20 +
opendj-embedded-server-examples/pom.xml | 99 +++++++++
14 files changed, 633 insertions(+), 5 deletions(-)
diff --git a/opendj-embedded-server-examples/README b/opendj-embedded-server-examples/README
new file mode 100644
index 0000000..f25349a
--- /dev/null
+++ b/opendj-embedded-server-examples/README
@@ -0,0 +1,22 @@
+To run the examples in this module:
+
+# Build the whole opendj project
+> maven clean install
+
+# Go to the opendj-embedded-server-examples directory
+> cd opendj-embedded-server-examples
+
+# define the class patch to use
+export CLASSPATH=target/opendj-embedded-server-examples-4.0.0-SNAPSHOT.jar:../opendj-server-legacy/target/package/opendj/lib/opendj-slf4j-adapter.jar
+
+# Setup a server from the OpenDJ archive resulting from the build
+# /path/to/opendj will be the root directory
+java -cp $CLASSPATH org.forgerock.opendj.examples.SetupServer ../opendj-server-legacy/target/package/opendj-4.0.0-SNAPSHOT.zip /path/to/opendj
+
+# Then you can run any of the example using the installed server
+
+# Start and stop the server
+java -cp $CLASSPATH /path/to/opendj
+
+# Read and update the configuration of the server
+java -cp $CLASSPATH /path/to/opendj "dc=example,dc=com"
\ No newline at end of file
diff --git a/opendj-embedded-server-examples/pom.xml b/opendj-embedded-server-examples/pom.xml
new file mode 100644
index 0000000..076953f
--- /dev/null
+++ b/opendj-embedded-server-examples/pom.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ The contents of this file are subject to the terms of the Common Development and
+ Distribution License (the License). You may not use this file except in compliance with the
+ License.
+
+ You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ specific language governing permission and limitations under the License.
+
+ When distributing Covered Software, include this CDDL Header Notice in each file and include
+ the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ Header, with the fields enclosed by brackets [] replaced by your own identifying
+ information: "Portions Copyright [year] [name of copyright owner]".
+
+ Copyright 2016 ForgeRock AS.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <artifactId>opendj-parent</artifactId>
+ <groupId>org.forgerock.opendj</groupId>
+ <version>4.0.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>opendj-embedded-server-examples</artifactId>
+ <name>OpenDJ embedded server examples</name>
+ <description>Examples illustrating usage of the OpenDJ embedded server API</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.forgerock.opendj</groupId>
+ <artifactId>opendj-server-legacy</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ </dependencies>
+
+ <distributionManagement>
+ <site>
+ <id>forgerock.org</id>
+ <name>OpenDJ Community</name>
+ <url>scp://forgerock.org/var/www/vhosts/opendj.forgerock.org/httpdocs/opendj-embedded-server-examples</url>
+ </site>
+ </distributionManagement>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <configuration>
+ <createDependencyReducedPom>false</createDependencyReducedPom>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://commons.forgerock.org/i18n-framework/i18n-core/apidocs</link>
+ </links>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <version>2.2</version>
+ <reportSets>
+ <reportSet>
+ <reports>
+ <report>jxr</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/opendj-embedded-server-examples/src/license/THIRD-PARTY.properties b/opendj-embedded-server-examples/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..f982865
--- /dev/null
+++ b/opendj-embedded-server-examples/src/license/THIRD-PARTY.properties
@@ -0,0 +1,20 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache Software License, Version 2.0
+# - BSD
+# - Common Development and Distribution License 1.0
+# - Common Development and Distribution License 1.1
+# - Dual licensed (CDDL and GPL)
+# - Dual licensed (CDDL and GPLv2+CE)
+# - The GNU Lesser General Public License, version 2.0 with Classpath Exception
+# - The GNU Lesser General Public License, version 2.1
+# - The GNU Lesser General Public License, version 3.0
+# - The MIT License
+# - The Sleepycat License
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Mon Sep 12 13:43:47 CEST 2016
+com.sleepycat--je--5.0.104=The Sleepycat License
diff --git a/opendj-embedded-server-examples/src/main/assembly/examples.xml b/opendj-embedded-server-examples/src/main/assembly/examples.xml
new file mode 100644
index 0000000..7690580
--- /dev/null
+++ b/opendj-embedded-server-examples/src/main/assembly/examples.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!--
+ The contents of this file are subject to the terms of the Common Development and
+ Distribution License (the License). You may not use this file except in compliance with the
+ License.
+
+ You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ specific language governing permission and limitations under the License.
+
+ When distributing Covered Software, include this CDDL Header Notice in each file and include
+ the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ Header, with the fields enclosed by brackets [] replaced by your own identifying
+ information: "Portions Copyright [year] [name of copyright owner]".
+
+ Copyright 2016 ForgeRock AS.
+ -->
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
+ http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <id>examples</id>
+
+ <includeBaseDirectory>false</includeBaseDirectory>
+
+ <fileSets>
+ <fileSet>
+ <outputDirectory>resources</outputDirectory>
+ <directory>src/main/java</directory>
+ </fileSet>
+ <fileSet>
+ <outputDirectory>resources</outputDirectory>
+ <directory>src/main/javadoc</directory>
+ </fileSet>
+ </fileSets>
+
+ <formats>
+ <format>jar</format>
+ </formats>
+</assembly>
diff --git a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java
new file mode 100644
index 0000000..2a679d6
--- /dev/null
+++ b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/ConfigureServer.java
@@ -0,0 +1,104 @@
+/*
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
+ *
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
+ *
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions Copyright [year] [name of copyright owner]".
+ *
+ * Copyright 2016 ForgeRock AS.
+ */
+
+package org.forgerock.opendj.examples;
+
+import static java.util.Arrays.asList;
+import static org.opends.server.util.embedded.ConfigParameters.configParams;
+import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+
+import java.io.File;
+import java.util.SortedSet;
+
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.server.config.client.BackendCfgClient;
+import org.forgerock.opendj.server.config.client.RootCfgClient;
+import org.opends.server.util.embedded.EmbeddedDirectoryServer;
+import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigReader;
+import org.opends.server.util.embedded.EmbeddedDirectoryServer.DirectoryConfigUpdater;
+import org.opends.server.util.embedded.EmbeddedDirectoryServerException;
+
+/**
+ * Provides an example of read and update of the configuration of a server that
+ * is already installed.
+ * <p>
+ * The server may be running or not.
+ */
+public final class ConfigureServer {
+
+ /**
+ * Main method.
+ * <p>
+ * Read the current base Dn of user backend and then change it
+ * to the one provided as argument.
+ *
+ * @param args
+ * The command line arguments: serverRootDir newBaseDn [ldapPort]
+ * @throws EmbeddedDirectoryServerException
+ * If an error occurs
+ */
+ public static void main(final String[] args) throws EmbeddedDirectoryServerException {
+ if (args.length != 2 && args.length != 3) {
+ System.err.println("Usage: serverRootDir newBaseDn [ldapPort]");
+ System.exit(1);
+ }
+ final String serverRootDir = args[0];
+ final String newBaseDn = args[1];
+ final int ldapPort = args.length > 2 ? Integer.parseInt(args[2]) : 1500;
+
+ EmbeddedDirectoryServer server =
+ defineServer(
+ configParams()
+ .serverRootDirectory(serverRootDir)
+ .configurationFile(serverRootDir + File.separator + "config/config.ldif")
+ .build(),
+ connectionParams()
+ .hostName("localhost")
+ .ldapPort(ldapPort)
+ .bindDn("cn=Directory Manager")
+ .bindPassword("password")
+ .build(),
+ System.out,
+ System.err);
+
+ // read the current base DN(s) of user backend
+ SortedSet<DN> baseDns = server.readConfiguration(new DirectoryConfigReader<SortedSet<DN>>() {
+ @Override
+ public SortedSet<DN> read(RootCfgClient rootConfig) throws Exception {
+ BackendCfgClient userRoot = rootConfig.getBackend("userRoot");
+ return userRoot.getBaseDN();
+ }
+ });
+ System.out.println("The current base Dn(s) of the user backend are: " + baseDns);
+
+ // modify the base DN of the user backend
+ server.updateConfiguration(new DirectoryConfigUpdater() {
+ @Override
+ public void update(RootCfgClient rootConfig) throws Exception {
+ BackendCfgClient userRoot = rootConfig.getBackend("userRoot");
+ userRoot.setBaseDN(asList(DN.valueOf(newBaseDn)));
+ userRoot.commit();
+ }
+ });
+ System.out.println("The base Dn of the user backend has been set to: " + newBaseDn);
+
+ }
+
+ private ConfigureServer() {
+ // Not used.
+ }
+}
diff --git a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java
new file mode 100644
index 0000000..09bec93
--- /dev/null
+++ b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/SetupServer.java
@@ -0,0 +1,103 @@
+/*
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
+ *
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
+ *
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions Copyright [year] [name of copyright owner]".
+ *
+ * Copyright 2016 ForgeRock AS.
+ */
+
+package org.forgerock.opendj.examples;
+
+import static org.opends.server.util.embedded.ConfigParameters.configParams;
+import static org.opends.server.util.embedded.ConnectionParameters.connectionParams;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServer;
+import static org.opends.server.util.embedded.SetupParameters.setupParams;
+
+import java.io.File;
+
+import org.opends.server.util.embedded.EmbeddedDirectoryServer;
+import org.opends.server.util.embedded.EmbeddedDirectoryServerException;
+
+/**
+ * Setup a server from a OpenDJ archive using the EmbeddedDirectoryServer class.
+ */
+public final class SetupServer {
+
+ /**
+ * Main method.
+ * <p>
+ * The OpenDJ archive is the zip archive that is resulting from a maven build.
+ *
+ * The server root directory is the directory where OpenDJ will be installed. Because
+ * the archive contains the "opendj" directory, it is mandatory to provide a server root
+ * directory that is named "opendj" (the archive will be automatically extracted in the
+ * parent directory of the provided server root directory).
+ *
+ * Other parameters are usual parameters to setup a server.
+ *
+ * @param args
+ * The command line arguments: openDJArchive, serverRootDir
+ * and optionally: baseDn, backendType, ldapPort, adminPort, jmxPort
+ * @throws EmbeddedDirectoryServerException
+ * If an error occurs
+ */
+ public static void main(final String[] args) throws EmbeddedDirectoryServerException {
+ if (args.length != 2 && args.length != 4 && args.length != 7) {
+ System.err.println("Usage: openDJArchive serverRootDir "
+ + "[baseDn backendType [ldapPort adminPort jmxPort]]");
+ System.exit(1);
+ }
+
+ int i = 0;
+ final String openDJArchive = args[i++];
+ final String serverRootDir = args[i++];
+ final String baseDn = (args.length > i) ? args[i++] : "o=example";
+ final String backendType = (args.length > i) ? args[i++] : "pdb";
+ final int ldapPort = (args.length > i) ? Integer.parseInt(args[i++]) : 1500;
+ final int adminPort = (args.length > i) ? Integer.parseInt(args[i++]) : 4500;
+ final int jmxPort = (args.length > i) ? Integer.parseInt(args[i++]) : 1600;
+
+ performSetup(openDJArchive, serverRootDir, baseDn, backendType, ldapPort, adminPort, jmxPort);
+ }
+
+ /** Performs the setup with provided parameters. */
+ static void performSetup(final String openDJArchive, final String serverRootDir, final String baseDn,
+ final String backendType, final int ldapPort, final int adminPort, final int jmxPort)
+ throws EmbeddedDirectoryServerException {
+ EmbeddedDirectoryServer server =
+ defineServer(
+ configParams()
+ .serverRootDirectory(serverRootDir)
+ .configurationFile(serverRootDir + File.separator + "config/config.ldif")
+ .build(),
+ connectionParams()
+ .hostName("localhost")
+ .ldapPort(ldapPort)
+ .bindDn("cn=Directory Manager")
+ .bindPassword("password")
+ .adminPort(adminPort)
+ .build(),
+ System.out,
+ System.err);
+
+ server.setupFromArchive(
+ new File(openDJArchive),
+ setupParams()
+ .baseDn(baseDn)
+ .backendType(backendType)
+ .jmxPort(jmxPort)
+ .build());
+ }
+
+ private SetupServer() {
+ // Not used.
+ }
+}
diff --git a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java
new file mode 100644
index 0000000..34e953f
--- /dev/null
+++ b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/StartStopServer.java
@@ -0,0 +1,75 @@
+/*
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
+ *
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
+ *
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions Copyright [year] [name of copyright owner]".
+ *
+ * Copyright 2016 ForgeRock AS.
+ */
+
+package org.forgerock.opendj.examples;
+
+import static org.opends.server.util.embedded.ConfigParameters.configParams;
+import static org.opends.server.util.embedded.EmbeddedDirectoryServer.defineServerForStartStopOperations;
+
+import java.io.File;
+import org.forgerock.i18n.LocalizableMessage;
+import org.opends.server.util.embedded.EmbeddedDirectoryServer;
+import org.opends.server.util.embedded.EmbeddedDirectoryServerException;
+
+/**
+ * Start and stop a server that is already installed.
+ */
+public final class StartStopServer {
+
+ /**
+ * Main method.
+ * <p>
+ * The server is started, and this program waits for a Control-C on the terminal to stop the server.
+ *
+ * @param args
+ * The command line arguments: serverRootDir
+ * @throws EmbeddedDirectoryServerException
+ * If an error occurs
+ */
+ public static void main(final String[] args) throws EmbeddedDirectoryServerException {
+ if (args.length != 1) {
+ System.err.println("Usage: serverRootDir");
+ System.exit(1);
+ }
+ final String serverRootDir = args[0];
+
+ final EmbeddedDirectoryServer server =
+ defineServerForStartStopOperations(
+ configParams()
+ .serverRootDirectory(serverRootDir)
+ .configurationFile(serverRootDir + File.separator + "config/config.ldif")
+ .build(),
+ System.out,
+ System.err);
+
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ System.out.println("Shutting down ...");
+ server.stop(StartStopServer.class.getName(),
+ LocalizableMessage.raw("Stopped after receiving Control-C"));
+ }
+ });
+
+ System.out.println("Starting the server...");
+ server.start();
+ System.out.println("Type Ctrl-C to stop the server");
+ }
+
+ private StartStopServer() {
+ // Not used.
+ }
+}
diff --git a/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/package-info.java b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/package-info.java
new file mode 100644
index 0000000..b28a9a7
--- /dev/null
+++ b/opendj-embedded-server-examples/src/main/java/org/forgerock/opendj/examples/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
+ *
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
+ *
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions Copyright [year] [name of copyright owner]".
+ *
+ * Copyright 2016 ForgeRock AS.
+ */
+
+/**
+ * Classes providing examples of usage of Embedded Server API.
+ */
+package org.forgerock.opendj.examples;
+
diff --git a/opendj-embedded-server-examples/src/main/javadoc/overview.html b/opendj-embedded-server-examples/src/main/javadoc/overview.html
new file mode 100644
index 0000000..68bc6eb
--- /dev/null
+++ b/opendj-embedded-server-examples/src/main/javadoc/overview.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+ The contents of this file are subject to the terms of the Common Development and
+ Distribution License (the License). You may not use this file except in compliance with the
+ License.
+
+ You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ specific language governing permission and limitations under the License.
+
+ When distributing Covered Software, include this CDDL Header Notice in each file and include
+ the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ Header, with the fields enclosed by brackets [] replaced by your own identifying
+ information: "Portions Copyright [year] [name of copyright owner]".
+
+ Copyright 2016 ForgeRock AS.
+ -->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<body>
+ The OpenDJ Embedded Server Examples contains various examples illustrating
+ usage of the Embedded Server API.
+</body>
+</html>
diff --git a/opendj-embedded-server-examples/src/site/site.xml b/opendj-embedded-server-examples/src/site/site.xml
new file mode 100644
index 0000000..474c753
--- /dev/null
+++ b/opendj-embedded-server-examples/src/site/site.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ The contents of this file are subject to the terms of the Common Development and
+ Distribution License (the License). You may not use this file except in compliance with the
+ License.
+
+ You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ specific language governing permission and limitations under the License.
+
+ When distributing Covered Software, include this CDDL Header Notice in each file and include
+ the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ Header, with the fields enclosed by brackets [] replaced by your own identifying
+ information: "Portions Copyright [year] [name of copyright owner]".
+
+ Copyright 2016 ForgeRock AS.
+-->
+<project name="${project.name}"
+ xmlns="http://maven.apache.org/DECORATION/1.0.1"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.1
+ http://maven.apache.org/xsd/decoration-1.0.1.xsd">
+
+ <!--
+ Use https://github.com/andriusvelykis/blank-maven-skin, which is Apache 2.0.
+ Pages are rendered in vanilla HTML referencing an empty ./css/site.css stylesheet.
+ -->
+ <skin>
+ <groupId>lt.velykis.maven.skins</groupId>
+ <artifactId>blank-maven-skin</artifactId>
+ <version>1.0.0</version>
+ </skin>
+ <body />
+</project>
diff --git a/opendj-embedded-server-examples/src/site/xdoc/index.xml.vm b/opendj-embedded-server-examples/src/site/xdoc/index.xml.vm
new file mode 100644
index 0000000..2f1c062
--- /dev/null
+++ b/opendj-embedded-server-examples/src/site/xdoc/index.xml.vm
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ The contents of this file are subject to the terms of the Common Development and
+ Distribution License (the License). You may not use this file except in compliance with the
+ License.
+
+ You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ specific language governing permission and limitations under the License.
+
+ When distributing Covered Software, include this CDDL Header Notice in each file and include
+ the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ Header, with the fields enclosed by brackets [] replaced by your own identifying
+ information: "Portions Copyright [year] [name of copyright owner]".
+
+ Copyright 2016 ForgeRock AS.
+-->
+<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+ <properties>
+ <title>About ${project.name}</title>
+ <author email="opendj-dev@forgerock.org">${project.organization.name}</author>
+ </properties>
+ <body>
+ <section name="About ${project.name}">
+
+ <p>
+ The following examples use the OpenDJ Embedded Server API:
+ </p>
+
+ <ul>
+ <li>
+ <a href="xref/org/forgerock/opendj/examples/SetupServer.html">Server Setup</a>
+ - illustrates how to setup a server from the OpenDJ archive using the Embedded Server API
+ </li>
+ <li>
+ <a href="xref/org/forgerock/opendj/examples/StartStop.html">Server Start and Stop</a>
+ - illustrates how to start and stop an installed server using the Embedded Server API
+ </li>
+ <li>
+ <a href="xref/org/forgerock/opendj/examples/ConfigureServer.html">Server Configuration</a>
+ - illustrates how to read and update configuration of an installed server using the Embedded Server API
+ </li>
+ </ul>
+
+ </section>
+<!--
+ <section name="Documentation for ${project.name}">
+ <p>
+ Javadoc for this module can be found <a href="apidocs/index.html">here</a>.
+ </p>
+ </section>
+ <section name="Get ${project.name}">
+ <p>
+ You can get ${project.name} using any of the following methods:
+ </p>
+ <subsection name="Download">
+ <p>
+ Pre-built binaries can be downloaded directly from the ForgeRock Maven
+ repository:
+ </p>
+ <ul>
+ <li><a href="${mavenRepoReleases}/org/forgerock/opendj/${project.artifactId}">Stable releases</a></li>
+ <li><a href="${mavenRepoSnapshots}/org/forgerock/opendj/${project.artifactId}/${project.version}">Latest development snapshot</a></li>
+ </ul>
+ </subsection>
+ <subsection name="Build">
+ <p>
+ For the DIY enthusiasts you can build it yourself by checking out the
+ latest code using <a href="source-repository.html">Subversion</a> and
+ building it with Maven 3.
+ </p>
+ </subsection>
+ </section>
+-->
+ </body>
+</document>
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
index 40fb33f..4bc1d8b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/ConfigParameters.java
@@ -15,6 +15,8 @@
*/
package org.opends.server.util.embedded;
+import org.forgerock.util.Reject;
+
/**
* Parameters to configure a directory server.
*/
@@ -45,9 +47,9 @@
return serverRootDirectory;
}
+ /** This value may be {@code null}, it must always be checked. */
String getServerInstanceDirectory()
{
- // provides the expected default value if not set
return serverInstanceDirectory;
}
@@ -83,6 +85,7 @@
public ConfigParameters toParams()
{
ConfigParameters p = params;
+ Reject.ifNull(p.serverRootDirectory, p.configurationFile);
this.params = new ConfigParameters();
return p;
}
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
index 9071b5e..708295b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/util/embedded/EmbeddedDirectoryServer.java
@@ -15,6 +15,7 @@
*/
package org.opends.server.util.embedded;
+import static org.opends.server.util.ServerConstants.*;
import static org.forgerock.opendj.config.client.ldap.LDAPManagementContext.newManagementContext;
import static org.forgerock.opendj.config.client.ldap.LDAPManagementContext.newLDIFManagementContext;
import static org.opends.messages.UtilityMessages.*;
@@ -36,7 +37,6 @@
import org.forgerock.opendj.server.config.client.RootCfgClient;
import org.forgerock.util.Options;
import org.forgerock.util.Pair;
-import org.forgerock.util.Reject;
import org.opends.quicksetup.TempLogFile;
import org.opends.server.core.DirectoryServer;
import org.opends.server.protocols.internal.InternalClientConnection;
@@ -48,7 +48,6 @@
import org.opends.server.types.DirectoryEnvironmentConfig;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.InitializationException;
-import org.opends.server.util.ServerConstants;
import org.opends.server.util.StaticUtils;
/**
@@ -357,6 +356,9 @@
/**
* Setups this server from the root directory.
+ * <p>
+ * As a pre-requisite, the OpenDJ archive must have been previously extracted to some
+ * directory. To perform a setup directly from an archive, see {@code setupFromArchive()}.
*
* @param parameters
* The setup parameters.
@@ -366,8 +368,15 @@
public void setup(SetupParameters parameters) throws EmbeddedDirectoryServerException
{
checkConnectionParameters();
+
+ System.setProperty(PROPERTY_SERVER_ROOT, configParams.getServerRootDirectory());
System.setProperty(QUICKSETUP_ROOT_PROPERTY, configParams.getServerRootDirectory());
- System.setProperty(QUICKSETUP_INSTANCE_PROPERTY, configParams.getServerInstanceDirectory());
+ String instanceDir = configParams.getServerInstanceDirectory() != null ?
+ configParams.getServerInstanceDirectory() :
+ configParams.getServerRootDirectory();
+ System.setProperty(QUICKSETUP_INSTANCE_PROPERTY, instanceDir);
+ System.setProperty(PROPERTY_INSTANCE_ROOT, instanceDir);
+
int returnCode = InstallDS.mainCLI(parameters.toCommandLineArguments(connectionParams), outStream, errStream,
TempLogFile.newTempLogFile(EMBEDDED_OPEN_DJ_PREFIX));
@@ -382,7 +391,7 @@
* Setups this server from the provided archive.
* <p>
* As the DJ archive includes the "opendj" directory, it is mandatory to have
- * the root directory named "opendj".
+ * the root directory named "opendj" when using this method.
*
* @param openDJZipFile
* The OpenDJ server archive.
diff --git a/pom.xml b/pom.xml
index ac30411..a29fbcc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -230,6 +230,7 @@
<module>opendj-legacy</module>
<module>opendj-server-legacy</module>
<module>opendj-dsml-servlet</module>
+ <module>opendj-embedded-server-examples</module>
<module>opendj-openidm-account-change-notification-handler</module>
<module>opendj-doc-generated-ref</module>
</modules>
--
Gitblit v1.10.0