From fb92e5b8094578acedae48a662612cc73df9d652 Mon Sep 17 00:00:00 2001
From: Mark Craig <mark.craig@forgerock.com>
Date: Wed, 22 Oct 2014 12:39:22 +0000
Subject: [PATCH] CR-4930 OPENDJ-1538 Update dev guide for switch from Futures to Promises
---
/dev/null | 33 ----
opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/SearchAsync.java | 102 +++++++-----
src/main/docbkx/sdk-release-notes/chap-get-sdk.xml | 8
src/main/docbkx/dev-guide/chap-extended-ops.xml | 22 +-
src/main/docbkx/dev-guide/chap-using-the-sdk.xml | 136 +++++++---------
src/main/docbkx/sdk-release-notes/chap-whats-new.xml | 21 ++
src/main/docbkx/dev-guide/chap-get-sdk.xml | 61 ------
src/main/docbkx/shared/programlisting-get-sdk.xml | 67 ++++++++
opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/Proxy.java | 3
src/main/docbkx/dev-guide/chap-simple-proxy.xml | 27 ++-
10 files changed, 240 insertions(+), 240 deletions(-)
diff --git a/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/Proxy.java b/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/Proxy.java
index 69318f1..f2be0b8 100644
--- a/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/Proxy.java
+++ b/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/Proxy.java
@@ -122,7 +122,8 @@
final RequestHandlerFactory<LDAPClientContext, RequestContext> proxyFactory =
new RequestHandlerFactory<LDAPClientContext, RequestContext>() {
@Override
- public ProxyBackend handleAccept(LDAPClientContext clientContext) throws LdapException {
+ public ProxyBackend handleAccept(LDAPClientContext clientContext)
+ throws LdapException {
return new ProxyBackend(factory, bindFactory);
}
};
diff --git a/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/SearchAsync.java b/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/SearchAsync.java
index 24a010f..f40d8d8 100644
--- a/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/SearchAsync.java
+++ b/opendj-ldap-sdk-examples/src/main/java/org/forgerock/opendj/examples/SearchAsync.java
@@ -71,21 +71,26 @@
WRITER.writeEntry(entry);
++entryCount;
} else { // Cancel the search.
- CancelExtendedRequest request = Requests.newCancelExtendedRequest(requestID);
- connection.extendedRequestAsync(request).onSuccess(new SuccessHandler<ExtendedResult>() {
- @Override
- public void handleResult(ExtendedResult result) {
- System.err.println("Cancel request succeeded");
- CANCEL_LATCH.countDown();
- }
- }).onFailure(new FailureHandler<LdapException>() {
- @Override
- public void handleError(LdapException error) {
- System.err.println("Cancel request failed with result code: "
- + error.getResult().getResultCode().intValue());
- CANCEL_LATCH.countDown();
- }
- });
+ CancelExtendedRequest request =
+ Requests.newCancelExtendedRequest(requestID);
+ connection.extendedRequestAsync(request)
+ .onSuccess(new SuccessHandler<ExtendedResult>() {
+ @Override
+ public void handleResult(ExtendedResult result) {
+ System.err.println("Cancel request succeeded");
+ CANCEL_LATCH.countDown();
+ }
+ })
+ .onFailure(new FailureHandler<LdapException>() {
+ @Override
+ public void handleError(LdapException error) {
+ System.err.println("Cancel request failed: "
+ + error.getResult().getResultCode().intValue()
+ + " "
+ + error.getResult().getDiagnosticMessage());
+ CANCEL_LATCH.countDown();
+ }
+ });
return false;
}
} catch (final IOException e) {
@@ -112,7 +117,6 @@
}
}
-
// --- JCite search result handler ---
// --- JCite decl1 ---
@@ -176,37 +180,47 @@
return;
}
+ // --- Using Promises ---
// Initiate the asynchronous connect, bind, and search.
final LDAPConnectionFactory factory = new LDAPConnectionFactory(hostName, port);
- factory.getConnectionAsync().thenAsync(new AsyncFunction<Connection, BindResult, LdapException>() {
- @Override
- public Promise<BindResult, LdapException> apply(Connection connection) throws LdapException {
- SearchAsync.connection = connection;
- return connection.bindAsync(Requests.newSimpleBindRequest(userName, password.toCharArray()));
- }
- }).thenAsync(new AsyncFunction<BindResult, Result, LdapException>() {
- @Override
- public Promise<Result, LdapException> apply(BindResult result) throws LdapException {
- LdapPromise<Result> promise = connection.searchAsync(
- Requests.newSearchRequest(baseDN, scope, filter, attributes), new SearchResultHandlerImpl());
- requestID = promise.getRequestID();
- return promise;
- }
- }).onSuccess(new SuccessHandler<Result>() {
- @Override
- public void handleResult(Result result) {
- resultCode = result.getResultCode().intValue();
- COMPLETION_LATCH.countDown();
- }
- }).onFailure(new FailureHandler<LdapException>() {
- @Override
- public void handleError(LdapException error) {
- System.err.println(error.getMessage());
- resultCode = error.getResult().getResultCode().intValue();
- COMPLETION_LATCH.countDown();
- }
- });
+ factory.getConnectionAsync()
+ .thenAsync(new AsyncFunction<Connection, BindResult, LdapException>() {
+ @Override
+ public Promise<BindResult, LdapException> apply(Connection connection)
+ throws LdapException {
+ SearchAsync.connection = connection;
+ return connection.bindAsync(Requests
+ .newSimpleBindRequest(userName, password.toCharArray()));
+ }
+ })
+ .thenAsync(new AsyncFunction<BindResult, Result, LdapException>() {
+ @Override
+ public Promise<Result, LdapException> apply(BindResult result)
+ throws LdapException {
+ LdapPromise<Result> promise = connection.searchAsync(
+ Requests.newSearchRequest(baseDN, scope, filter, attributes),
+ new SearchResultHandlerImpl());
+ requestID = promise.getRequestID();
+ return promise;
+ }
+ })
+ .onSuccess(new SuccessHandler<Result>() {
+ @Override
+ public void handleResult(Result result) {
+ resultCode = result.getResultCode().intValue();
+ COMPLETION_LATCH.countDown();
+ }
+ })
+ .onFailure(new FailureHandler<LdapException>() {
+ @Override
+ public void handleError(LdapException error) {
+ System.err.println(error.getMessage());
+ resultCode = error.getResult().getResultCode().intValue();
+ COMPLETION_LATCH.countDown();
+ }
+ });
+ // --- Using Promises ---
// Await completion.
try {
diff --git a/src/main/docbkx/dev-guide/chap-extended-ops.xml b/src/main/docbkx/dev-guide/chap-extended-ops.xml
index 6cba037..902c389 100644
--- a/src/main/docbkx/dev-guide/chap-extended-ops.xml
+++ b/src/main/docbkx/dev-guide/chap-extended-ops.xml
@@ -117,9 +117,17 @@
already finished processing the original request before it receives your
Cancel request.</para>
- <para>You can add a Cancel extended request for example to stop handling
- entries returned from a search if the directory server returns more entries
- than you want.</para>
+ <para>
+ You can add a Cancel extended request for example
+ to stop handling entries returned from a search
+ if the directory server returns more entries than you want.
+ In the following example, the search result handler implementation
+ is passed to a <literal>searchAsync()</literal> method on the connection.
+ When the entry count reaches 10, the example requests
+ that the directory server cancel the search.
+ Notice that the extended request is also asynchronous,
+ handled using promises to deal with both success and also error conditions.
+ </para>
<programlisting language="java"
>[jcp:org.forgerock.opendj.examples.SearchAsync:--- JCite decl1 ---]</programlisting>
@@ -130,14 +138,6 @@
<programlisting language="java"
>[jcp:org.forgerock.opendj.examples.SearchAsync:--- JCite search result handler ---]</programlisting>
- <!-- FixMe workaround pending OPENDJ-1538: Update dev guide for change from Futures to Promises
- <programlisting language="java"
- >jcp:org.forgerock.opendj.examples.SearchAsync:- - - JCite cancel result handler - - -]</programlisting>
- -->
- <programlisting>
- Coming soon... pending OPENDJ-1538: Update dev guide for change from Futures to Promises
- </programlisting>
-
<para>OpenDJ directory server supports the cancel operation. If OpenDJ
directory server manages to return all entries in
<filename>Example.ldif</filename> before it receives the Cancel extended
diff --git a/src/main/docbkx/dev-guide/chap-get-sdk.xml b/src/main/docbkx/dev-guide/chap-get-sdk.xml
index 8d14c63..c399f38 100644
--- a/src/main/docbkx/dev-guide/chap-get-sdk.xml
+++ b/src/main/docbkx/dev-guide/chap-get-sdk.xml
@@ -28,7 +28,8 @@
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://docbook.org/ns/docbook
http://docbook.org/xml/5.0/xsd/docbook.xsd'
- xmlns:xlink='http://www.w3.org/1999/xlink'>
+ xmlns:xlink='http://www.w3.org/1999/xlink'
+ xmlns:xinclude='http://www.w3.org/2001/XInclude'>
<title>Getting OpenDJ LDAP SDK</title>
<para>This chapter introduces OpenDJ LDAP SDK, demonstrating how to get the
@@ -96,43 +97,12 @@
<para>Let that expensive computer you bought do the work.</para>
<step>
- <para>Include the ForgeRock repository in your list, and include the SDK
- as a dependency.</para>
+ <para>
+ Include the ForgeRock repository in your list,
+ and include SDK and SLF4J dependencies.
+ </para>
- <programlisting language="xml"><repositories>
- <repository>
- <id>forgerock-staging-repository</id>
- <name>ForgeRock Release Repository</name>
- <url>${mavenRepoReleases}</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- <repository>
- <id>forgerock-snapshots-repository</id>
- <name>ForgeRock Snapshot Repository</name>
- <url>${mavenRepoSnapshots}</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- </repository>
-</repositories>
-
-...
-
-<dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>opendj-core</artifactId>
- <version><?eval ${docTargetVersion}?></version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>opendj-grizzly</artifactId>
- <version><?eval ${docTargetVersion}?></version>
- </dependency>
-</dependencies>
- </programlisting>
+ <xinclude:include href="../shared/programlisting-get-sdk.xml" />
</step>
</procedure>
@@ -195,23 +165,6 @@
<screen>
$ <userinput>cd opendj/</userinput>
$ <userinput>mvn install</userinput>
-<computeroutput>[INFO] Scanning for projects...
-[INFO] ------------------------------------------------------------------------
-[INFO] Reactor Build Order:
-[INFO]
-[INFO] OpenDJ Directory Services Project
-[INFO] OpenDJ Core APIs
-[INFO] OpenDJ Grizzly Transport Provider
-[INFO] OpenDJ SDK
-[INFO] OpenDJ SDK Toolkit
- ...
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 2:51.315s
-[INFO] Finished at: Wed Apr 10 14:28:36 CEST 2013
-[INFO] Final Memory: 37M/382M
-[INFO] ------------------------------------------------------------------------</computeroutput>
</screen>
</step>
<step>
diff --git a/src/main/docbkx/dev-guide/chap-simple-proxy.xml b/src/main/docbkx/dev-guide/chap-simple-proxy.xml
index cdc6c6e..aa5178e 100644
--- a/src/main/docbkx/dev-guide/chap-simple-proxy.xml
+++ b/src/main/docbkx/dev-guide/chap-simple-proxy.xml
@@ -160,20 +160,27 @@
<programlisting language="java"
>[jcp:org.forgerock.opendj.examples.Proxy:--- JCite listener ---]</programlisting>
- <para>You get a <literal>ServerConnectionFactory</literal> to handle requests
- coming from clients. The <literal>ServerConnectionFactory</literal> takes a
- request handler that deals with the incoming client requests. The request
- handler implements handlers for all supported operations. The Proxy example
- implements a <literal>ProxyBackend</literal> to handle requests. The
- <literal>ProxyBackend</literal> sends the requests on to the backend
- directory servers and routes the results returned back to client
- applications.</para>
+ <para>
+ The connection handler is a <literal>ServerConnectionFactory</literal>
+ to handle requests coming from clients.
+ The factory takes a request handler implementation
+ that deals with all supported incoming client requests.
+ The Proxy example uses a <literal>ProxyBackend</literal> to handle requests.
+ The <literal>ProxyBackend</literal> sends the requests on
+ to the backend directory servers
+ and routes the results returned back to client applications.
+ </para>
<programlisting language="java"
>[jcp:org.forgerock.opendj.examples.Proxy:--- JCite backend ---]</programlisting>
- <para>See the Proxy example code for details about the
- <literal>ProxyBackend</literal> implementation.</para>
+ <para>
+ For details about the <literal>ProxyBackend</literal> implementation, see
+ <link
+ xlink:href="http://opendj.forgerock.org/opendj-ldap-sdk-examples/xref/org/forgerock/opendj/examples/ProxyBackend.html"
+ xlink:show="new"
+ >ProxyBackend.java</link>.
+ </para>
</section>
<section xml:id="dn-attr-rewriting">
diff --git a/src/main/docbkx/dev-guide/chap-using-the-sdk.xml b/src/main/docbkx/dev-guide/chap-using-the-sdk.xml
index 5e9b092..0e06160 100644
--- a/src/main/docbkx/dev-guide/chap-using-the-sdk.xml
+++ b/src/main/docbkx/dev-guide/chap-using-the-sdk.xml
@@ -20,15 +20,15 @@
!
! CCPL HEADER END
!
- ! Copyright 2011-2013 ForgeRock AS
+ ! Copyright 2011-2014 ForgeRock AS
!
-->
<chapter xml:id='chap-using-the-sdk'
- xmlns='http://docbook.org/ns/docbook' version='5.0' xml:lang='en'
- xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
- xsi:schemaLocation='http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd'
- xmlns:xlink='http://www.w3.org/1999/xlink'
- xmlns:xinclude='http://www.w3.org/2001/XInclude'>
+ xmlns='http://docbook.org/ns/docbook' version='5.0' xml:lang='en'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xsi:schemaLocation='http://docbook.org/ns/docbook
+ http://docbook.org/xml/5.0/xsd/docbook.xsd'
+ xmlns:xlink='http://www.w3.org/1999/xlink'>
<title>Using the LDAP SDK</title>
<para>As LDAP relies on a connection from the client to the directory server,
@@ -54,25 +54,8 @@
the connection. When finished, your application closes the connection.</para>
<programlisting language="java">
-final LDAPConnectionFactory factory = new LDAPConnectionFactory(host, port);
-Connection connection = null;
-
-try {
- connection = factory.getConnection();
-
- // Perform operations on the connection, such as connection.bind(),
- // connection.search(), connection.modify(), etc.
-
- } catch (final ErrorResultException e) {
- System.err.println(e.getMessage());
- System.exit(e.getResult().getResultCode().intValue());
- return;
- } finally {
- if (connection != null) {
- connection.close();
- }
- }
-</programlisting>
+[jcp:org.forgerock.opendj.examples.Search:--- JCite ---]
+ </programlisting>
<para>For a complete example in context, see <link
xlink:href="http://opendj.forgerock.org/opendj-ldap-sdk-examples/xref/org/forgerock/opendj/examples/Search.html"
@@ -80,52 +63,38 @@
xlink:href="http://opendj.forgerock.org/opendj-ldap-sdk-examples/"
xlink:show="new">OpenDJ LDAP SDK examples</link>.</para>
- <para>For asynchronous operations, your application passes a result handler
- to <literal>LDAPConnectionFactory.getConnectionAsync()</literal> that
- implements the <literal>ResultHandler<Connection></literal>
- interface.</para>
+ <para>
+ For asynchronous operations,
+ your application obtains a connection with
+ <literal>LDAPConnectionFactory.getConnectionAsync()</literal>,
+ and then uses promises to handle the bind, the subsequent operations,
+ the results, and any errors in asynchronous fashion.
+ </para>
<programlisting language="java">
-private static final class ConnectResultHandlerImpl
- implements ResultHandler<Connection> {
- @Override
- public void handleErrorResult(final ErrorResultException error) {
- ...
- }
+[jcp:org.forgerock.opendj.examples.SearchAsync: --- Using Promises ---]
+ </programlisting>
- @Override
- public void handleResult(final Connection connection) {
- // Connect succeeded: save connection and initiate bind.
- SearchAsync.connection = connection;
+ <para>
+ When the factory gets a connection,
+ your application passes an <literal>AsyncFunction</literal>
+ to apply to the connection to handle the bind
+ by using the <literal>thenAsync()</literal> method in the fluent style.
+ Your application uses <literal>thenAsync()</literal> again
+ to pass another <literal>AsyncFunction</literal> to perform the operation.
+ In the sample shown here, the second call to <literal>thenAsync()</literal>
+ passes a function that performs a search, passing in a handler
+ to deal with the search results returned by the directory server.
+ The call to <literal>onSuccess()</literal> handles the final result,
+ with the call to <literal>onFailure()</literal> dealing with exceptions.
+ </para>
- final BindRequest request =
- Requests.newSimpleBindRequest(userName, password.toCharArray());
- connection.bindAsync(request, null, new BindResultHandlerImpl());
- }
-}
-
-// Main method initiates async operations by getting a connection...
-final LDAPConnectionFactory factory = new LDAPConnectionFactory(hostName, port);
-factory.getConnectionAsync(new ConnectResultHandlerImpl());
-
-...
-
-if (connection != null) {
- connection.close();
-}
-</programlisting>
-
- <para>When the connection result handler gets a connection, your application
- can pass result handlers for other operations using methods on the connection
- named <literal>*Async()</literal>. For most operations, your application
- implements <literal>ResultHandler</literal>. For searches, your application
- implements <literal>SearchResultHandler</literal>. The result handler is
- notified upon completion of the operation.</para>
-
- <para>Asynchronous methods are non-blocking, returning a
- <literal>FutureResult</literal> whose <literal>get()</literal> method lets
- you retrieve the result. Your application must coordinate concurrency when
- you use asynchronous operations.</para>
+ <para>
+ Asynchronous methods are non-blocking, returning a <literal>Promise</literal>,
+ so that you can chain methods in the fluent style.
+ Your application must coordinate concurrency
+ when you use asynchronous operations.
+ </para>
<para>For a complete example in context, see <link
xlink:href="http://opendj.forgerock.org/opendj-ldap-sdk-examples/xref/org/forgerock/opendj/examples/SearchAsync.html"
@@ -145,12 +114,14 @@
other than success. The <literal>ResultCode</literal> class encapsulates the
LDAP codes and additional client-side codes specific to the SDK.</para>
- <para>Your application deals with most non-success result codes when it
- catches one of the LDAP SDK exceptions corresponding to the operation you
- requested. <literal>ErrorResultException</literal> is a common way for the
- SDK to indicate a non-successful result. Your application can then take
- remedial action based on the result code, as in the following synchronous
- excerpt.</para>
+ <para>
+ Your application deals with most non-success result codes
+ by catching <literal>LdapException</literal> objects
+ or handling them when supplied to <literal>FailureHandler</literal> objects
+ passed to <literal>onFailure()</literal> methods.
+ Your application can then take remedial action based on the result code,
+ as in the following synchronous example.
+ </para>
<programlisting language="java">
final LDAPConnectionFactory factory = new LDAPConnectionFactory(host, port);
@@ -162,7 +133,7 @@
// Perform operations on the connection...
-} catch (final ErrorResultException e) {
+} catch (final LdapException e) {
// Take remedial action based on the result code...
// e.getResult().getResultCode() returns the code for you to interpret.
@@ -172,12 +143,19 @@
connection.close();
}
}
-</programlisting>
+ </programlisting>
- <para>Also notice the methods <literal>ResultCode.getName()</literal> that
- provides a short, human-readable version of the result code, and
- <literal>Result.getDiagnosticMessage()</literal> that can also help debug
- problems after the fact.</para>
+ <para>
+ Also notice the methods <literal>ResultCode.getName()</literal>
+ that provides a short, human-readable version of the result code,
+ and <literal>Result.getDiagnosticMessage()</literal>
+ that can help to debug problems after the fact.
+ </para>
+
+ <para>
+ When you have completely finished with a connection,
+ then use the <literal>close()</literal> method on it.
+ </para>
</section>
<!-- Pending https://bugster.forgerock.org/jira/browse/OPENDJ-178
diff --git a/src/main/docbkx/sdk-release-notes/chap-get-sdk.xml b/src/main/docbkx/sdk-release-notes/chap-get-sdk.xml
index 2c9b81f..14d569c 100644
--- a/src/main/docbkx/sdk-release-notes/chap-get-sdk.xml
+++ b/src/main/docbkx/sdk-release-notes/chap-get-sdk.xml
@@ -40,12 +40,8 @@
<para>
To include OpenDJ LDAP SDK as a Maven dependency,
include the ForgeRock repository in your list,
- and include the SDK as a dependency.
+ and include the required dependencies.
</para>
- <programlisting language="xml">
-<xinclude:include href="resources/maven-xml.txt" parse="text">
- <xinclude:fallback>Failed to include Maven POM sections</xinclude:fallback>
-</xinclude:include>
- </programlisting>
+ <xinclude:include href="../shared/programlisting-get-sdk.xml" />
</chapter>
diff --git a/src/main/docbkx/sdk-release-notes/chap-whats-new.xml b/src/main/docbkx/sdk-release-notes/chap-whats-new.xml
index d5b25c0..92a45d4 100644
--- a/src/main/docbkx/sdk-release-notes/chap-whats-new.xml
+++ b/src/main/docbkx/sdk-release-notes/chap-whats-new.xml
@@ -34,6 +34,23 @@
<para>
This release provides the following new features and enhancements.
</para>
-
- <para>TODO</para><!-- https://github.com/markcraig/release-notes-list-builder -->
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ TODO
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The SDK now supports Promises rather than Futures,
+ easing development of asynchronous client applications
+ (<link
+ xlink:href="https://bugster.forgerock.org/jira/browse/OPENDJ-1285"
+ xlink:show="new"
+ >OPENDJ-1285</link>).
+ </para>
+ </listitem>
+ </itemizedlist>
</chapter>
diff --git a/src/main/docbkx/sdk-release-notes/resources/maven-xml.txt b/src/main/docbkx/sdk-release-notes/resources/maven-xml.txt
deleted file mode 100644
index 2cbaed4..0000000
--- a/src/main/docbkx/sdk-release-notes/resources/maven-xml.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-<repositories>
- <repository>
- <id>forgerock-staging-repository</id>
- <name>ForgeRock Release Repository</name>
- <url>http://maven.forgerock.org/repo/releases</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- <repository>
- <id>forgerock-snapshots-repository</id>
- <name>ForgeRock Snapshot Repository</name>
- <url>http://maven.forgerock.org/repo/snapshots</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- </repository>
-</repositories>
-
-...
-
-<dependencies>
- <dependency>
- <groupId>org.forgerock.opendj</groupId>
- <artifactId>opendj-core</artifactId>
- <version>${sdkDocTargetVersion}</version>
- </dependency>
- <dependency>
- <groupId>org.forgerock.opendj</groupId>
- <artifactId>opendj-grizzly</artifactId>
- <version>${sdkDocTargetVersion}</version>
- </dependency>
-</dependencies>
\ No newline at end of file
diff --git a/src/main/docbkx/shared/programlisting-get-sdk.xml b/src/main/docbkx/shared/programlisting-get-sdk.xml
new file mode 100644
index 0000000..0988c38
--- /dev/null
+++ b/src/main/docbkx/shared/programlisting-get-sdk.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ! CCPL HEADER START
+ !
+ ! This work is licensed under the Creative Commons
+ ! Attribution-NonCommercial-NoDerivs 3.0 Unported License.
+ ! To view a copy of this license, visit
+ ! http://creativecommons.org/licenses/by-nc-nd/3.0/
+ ! or send a letter to Creative Commons, 444 Castro Street,
+ ! Suite 900, Mountain View, California, 94041, USA.
+ !
+ ! See the License for the specific language governing permissions
+ ! and limitations under the License.
+ !
+ ! If applicable, add the following below this CCPL HEADER, with the fields
+ ! enclosed by brackets "[]" replaced with your own identifying information:
+ ! Portions Copyright [yyyy] [name of copyright owner]
+ !
+ ! CCPL HEADER END
+ !
+ ! Copyright 2014 ForgeRock AS
+ !
+-->
+<programlisting language="xml"
+ xmlns='http://docbook.org/ns/docbook' version='5.0' xml:lang='en'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xsi:schemaLocation='http://docbook.org/ns/docbook
+ http://docbook.org/xml/5.0/xsd/docbook.xsd'>
+<![CDATA[
+<repositories>
+ <repository>
+ <id>forgerock-staging-repository</id>
+ <name>ForgeRock Release Repository</name>
+ <url>${mavenRepoReleases}</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>forgerock-snapshots-repository</id>
+ <name>ForgeRock Snapshot Repository</name>
+ <url>${mavenRepoSnapshots}</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+</repositories>
+
+<dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>opendj-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>opendj-grizzly</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>${slf4jVersion}</version>
+ </dependency>
+</dependencies>
+]]>
+</programlisting>
\ No newline at end of file
--
Gitblit v1.10.0