From 7b69a10ee71e82f94ffb15140dd7940118afa80e Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 05 Sep 2012 09:58:26 +0000
Subject: [PATCH] Fix OPENDJ-515: Upgrade OpenDJ SDK to Grizzly 2.2.x

---
 opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java      |    6 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPServerFilter.java               |   34 +---
 opendj-sdk/opendj3/opendj-ldap-sdk/src/site/xdoc/index.xml.vm                                                  |    4 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java      |  257 ++++++++++++++++--------------------
 opendj-sdk/opendj3/pom.xml                                                                                     |    1 
 opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml                                                                     |    2 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/ConnectionSecurityLayerFilter.java  |   10 
 opendj-sdk/opendj3/src/main/docbkx/dev-guide/chap-get-sdk.xml                                                  |   17 -
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java                 |   33 +---
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPClientFilter.java               |    6 
 opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/AuthenticatedConnectionFactory.java |    2 
 11 files changed, 152 insertions(+), 220 deletions(-)

diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml b/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml
index 8b8366c..a72b2e3 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/pom.xml
@@ -46,7 +46,7 @@
     <dependency>
       <groupId>org.glassfish.grizzly</groupId>
       <artifactId>grizzly-framework</artifactId>
-      <version>2.1.9</version>
+      <version>${grizzlyFrameworkVersion}</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/ConnectionSecurityLayerFilter.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/ConnectionSecurityLayerFilter.java
index 9c71d58..645a3c3 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/ConnectionSecurityLayerFilter.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/ConnectionSecurityLayerFilter.java
@@ -49,11 +49,10 @@
         private static final int BUFFER_SIZE = 4096;
         private final byte[] buffer = new byte[BUFFER_SIZE];
         private final ConnectionSecurityLayer layer;
-        private final MemoryManager<?> memoryManager;
 
         public Decoder(final ConnectionSecurityLayer layer, final MemoryManager<?> memoryManager) {
             this.layer = layer;
-            this.memoryManager = memoryManager;
+            setMemoryManager(memoryManager);
         }
 
         public String getName() {
@@ -67,7 +66,7 @@
         @Override
         public TransformationResult<Buffer, Buffer> transformImpl(final AttributeStorage storage,
                 final Buffer input) {
-
+            final MemoryManager<?> memoryManager = obtainMemoryManager(storage);
             final int len = Math.min(buffer.length, input.remaining());
             input.get(buffer, 0, len);
 
@@ -89,11 +88,10 @@
         private static final int BUFFER_SIZE = 4096;
         private final byte[] buffer = new byte[BUFFER_SIZE];
         private final ConnectionSecurityLayer layer;
-        private final MemoryManager<?> memoryManager;
 
         private Encoder(final ConnectionSecurityLayer layer, final MemoryManager<?> memoryManager) {
             this.layer = layer;
-            this.memoryManager = memoryManager;
+            setMemoryManager(memoryManager);
         }
 
         public String getName() {
@@ -107,7 +105,7 @@
         @Override
         public TransformationResult<Buffer, Buffer> transformImpl(final AttributeStorage storage,
                 final Buffer input) {
-
+            final MemoryManager<?> memoryManager = obtainMemoryManager(storage);
             final int len = Math.min(buffer.length, input.remaining());
             input.get(buffer, 0, len);
 
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPClientFilter.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPClientFilter.java
index 70b3d49..97e8229 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPClientFilter.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPClientFilter.java
@@ -157,8 +157,7 @@
                                             bindClient.getConnectionSecurityLayer();
                                     if (l != null) {
                                         // The connection needs to be secured by
-                                        // the SASL
-                                        // mechanism.
+                                        // the SASL mechanism.
                                         ldapConnection
                                                 .installFilter(new ConnectionSecurityLayerFilter(l,
                                                         ctx.getConnection().getTransport()
@@ -451,8 +450,7 @@
         final Connection<?> connection = ctx.getConnection();
         if (!connection.isOpen()) {
             // Grizzly doens't not deregister the read interest from the
-            // selector so closing the connection results in an
-            // EOFException.
+            // selector so closing the connection results in an EOFException.
             // Just ignore errors on closed connections.
             return;
         }
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java
index 3659b85..5cbe12c 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnection.java
@@ -139,10 +139,8 @@
 
         if (pendingRequest == null) {
             // There has never been a request with the specified message ID or
-            // the
-            // response has already been received and handled. We can ignore
-            // this
-            // abandon request.
+            // the response has already been received and handled. We can ignore
+            // this abandon request.
 
             // Message ID will be -1 since no request was sent.
             return new CompletedFutureResult<Void>((Void) null);
@@ -280,8 +278,7 @@
             final ASN1BufferWriter asn1Writer = ASN1BufferWriter.getWriter();
             try {
                 // Use the bind client to get the initial request instead of
-                // using the
-                // bind request passed to this method.
+                // using the bind request passed to this method.
                 final GenericBindRequest initialRequest = context.nextBindRequest();
                 ldapWriter.bindRequest(asn1Writer, messageID, 3, initialRequest);
                 connection.write(asn1Writer.getBuffer(), null);
@@ -723,15 +720,11 @@
                 connectionInvalidReason = reason;
             } else {
                 // Connection termination was triggered remotely. We don't want
-                // to
-                // blindly pass on the result code to requests since it could be
-                // confused for a genuine response. For example, if the
-                // disconnect
-                // contained the invalidCredentials result code then this could
-                // be
-                // misinterpreted as a genuine authentication failure for
-                // subsequent
-                // bind requests.
+                // to blindly pass on the result code to requests since it could
+                // be confused for a genuine response. For example, if the
+                // disconnect contained the invalidCredentials result code then
+                // this could be misinterpreted as a genuine authentication
+                // failure for subsequent bind requests.
                 connectionInvalidReason =
                         Responses.newResult(ResultCode.CLIENT_SIDE_SERVER_DOWN)
                                 .setDiagnosticMessage("Connection closed by server");
@@ -762,12 +755,7 @@
                 // Underlying channel prob blown up. Just ignore.
             }
         }
-
-        try {
-            connection.close();
-        } catch (final IOException e) {
-            // Ignore.
-        }
+        connection.closeSilently();
 
         // Notify listeners.
         if (notifyClose) {
@@ -817,8 +805,7 @@
             int filterIndex = oldFilterChain.size() - 1;
             if (filter instanceof SSLFilter) {
                 // Beneath any ConnectionSecurityLayerFilters if present,
-                // otherwise
-                // beneath the LDAP filter.
+                // otherwise beneath the LDAP filter.
                 for (int i = oldFilterChain.size() - 2; i >= 0; i--) {
                     if (!(oldFilterChain.get(i) instanceof ConnectionSecurityLayerFilter)) {
                         filterIndex = i + 1;
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
index 3563302..81c91b2 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPConnectionFactoryImpl.java
@@ -45,7 +45,6 @@
 import org.forgerock.opendj.ldap.requests.Requests;
 import org.forgerock.opendj.ldap.requests.StartTLSExtendedRequest;
 import org.forgerock.opendj.ldap.responses.ExtendedResult;
-import org.forgerock.opendj.ldap.responses.Result;
 import org.glassfish.grizzly.CompletionHandler;
 import org.glassfish.grizzly.EmptyCompletionHandler;
 import org.glassfish.grizzly.filterchain.FilterChain;
@@ -53,144 +52,142 @@
 import org.glassfish.grizzly.filterchain.TransportFilter;
 import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 
-import com.forgerock.opendj.util.CompletedFutureResult;
-import com.forgerock.opendj.util.FutureResultTransformer;
-import com.forgerock.opendj.util.RecursiveFutureResult;
+import com.forgerock.opendj.util.AsynchronousFutureResult;
 
 /**
  * LDAP connection factory implementation.
  */
 public final class LDAPConnectionFactoryImpl implements ConnectionFactory {
-
+    /**
+     * Adapts a Grizzly connection completion handler to an LDAP connection
+     * asynchronous future result.
+     */
     @SuppressWarnings("rawtypes")
-    private final class ConnectionCompletionHandler implements
+    private final class CompletionHandlerAdapter implements
             CompletionHandler<org.glassfish.grizzly.Connection> {
-        private final FutureResultTransformer<Result, Connection> startTLSFutureResult;
-        private final RecursiveFutureResult<LDAPConnection, ExtendedResult> connectionFutureResult;
-        private LDAPConnection connection;
 
-        private ConnectionCompletionHandler(final ResultHandler<? super Connection> handler) {
-            this.startTLSFutureResult = new FutureResultTransformer<Result, Connection>(handler) {
+        private final AsynchronousFutureResult<? super Connection> future;
 
-                @Override
-                protected ErrorResultException transformErrorResult(
-                        final ErrorResultException errorResult) {
-                    // Ensure that the connection is closed.
-                    try {
-                        if (connection != null) {
-                            connection.close();
-                        }
-                    } catch (final Exception e) {
-                        // Ignore.
-                    }
-                    return errorResult;
-                }
-
-                @Override
-                protected LDAPConnection transformResult(final Result result)
-                        throws ErrorResultException {
-                    return connection;
-                }
-
-            };
-
-            this.connectionFutureResult =
-                    new RecursiveFutureResult<LDAPConnection, ExtendedResult>(startTLSFutureResult) {
-
-                        @Override
-                        protected FutureResult<? extends ExtendedResult> chainResult(
-                                final LDAPConnection innerResult,
-                                final ResultHandler<? super ExtendedResult> handler)
-                                throws ErrorResultException {
-                            connection = innerResult;
-
-                            if (options.getSSLContext() != null && options.useStartTLS()) {
-                                // Chain StartTLS extended request.
-                                final StartTLSExtendedRequest startTLS =
-                                        Requests.newStartTLSExtendedRequest(options.getSSLContext());
-                                startTLS.addEnabledCipherSuite(options
-                                        .getEnabledCipherSuites()
-                                        .toArray(
-                                                new String[options.getEnabledCipherSuites().size()]));
-                                startTLS.addEnabledProtocol(options.getEnabledProtocols().toArray(
-                                        new String[options.getEnabledProtocols().size()]));
-                                return connection.extendedRequestAsync(startTLS, null, handler);
-                            } else if (options.getSSLContext() != null) {
-                                // Install SSL/TLS layer.
-                                try {
-                                    connection.startTLS(options.getSSLContext(), options
-                                            .getEnabledProtocols(), options
-                                            .getEnabledCipherSuites(),
-                                            new EmptyCompletionHandler<SSLEngine>() {
-                                                @Override
-                                                public void completed(final SSLEngine result) {
-                                                    handler.handleResult(null);
-                                                }
-
-                                                @Override
-                                                public void failed(final Throwable throwable) {
-                                                    handler.handleErrorResult(newErrorResult(
-                                                            ResultCode.CLIENT_SIDE_CONNECT_ERROR,
-                                                            throwable.getMessage(), throwable));
-                                                }
-                                            });
-                                    return null;
-                                } catch (final IOException ioe) {
-                                    throw newErrorResult(ResultCode.CLIENT_SIDE_CONNECT_ERROR, ioe
-                                            .getMessage(), ioe);
-                                }
-                            } else {
-                                // Plain connection.
-                                handler.handleResult(null);
-                                return new CompletedFutureResult<ExtendedResult>(
-                                        (ExtendedResult) null);
-                            }
-                        }
-
-                    };
-
-            startTLSFutureResult.setFutureResult(connectionFutureResult);
+        private CompletionHandlerAdapter(final AsynchronousFutureResult<? super Connection> future) {
+            this.future = future;
         }
 
-        /**
-         * {@inheritDoc}
-         */
-        @Override
         public void cancelled() {
             // Ignore this.
         }
 
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public void completed(final org.glassfish.grizzly.Connection connection) {
-            connectionFutureResult.handleResult(adaptConnection(connection));
+        public void completed(final org.glassfish.grizzly.Connection result) {
+            // Adapt the connection.
+            final LDAPConnection connection = adaptConnection(result);
+
+            // Plain connection.
+            if (options.getSSLContext() == null) {
+                onSuccess(connection);
+                return;
+            }
+
+            // Start TLS or install SSL layer asynchronously.
+
+            // Give up immediately if the future has been cancelled.
+            if (future.isCancelled()) {
+                connection.close();
+                return;
+            }
+
+            if (options.useStartTLS()) {
+                // Chain StartTLS extended request.
+                final StartTLSExtendedRequest startTLS =
+                        Requests.newStartTLSExtendedRequest(options.getSSLContext());
+                startTLS.addEnabledCipherSuite(options.getEnabledCipherSuites().toArray(
+                        new String[options.getEnabledCipherSuites().size()]));
+                startTLS.addEnabledProtocol(options.getEnabledProtocols().toArray(
+                        new String[options.getEnabledProtocols().size()]));
+                final ResultHandler<ExtendedResult> handler = new ResultHandler<ExtendedResult>() {
+                    public void handleErrorResult(final ErrorResultException error) {
+                        onFailure(connection, error);
+                    }
+
+                    public void handleResult(final ExtendedResult result) {
+                        onSuccess(connection);
+                    }
+                };
+                connection.extendedRequestAsync(startTLS, null, handler);
+            } else {
+                // Install SSL/TLS layer.
+                try {
+                    connection.startTLS(options.getSSLContext(), options.getEnabledProtocols(),
+                            options.getEnabledCipherSuites(),
+                            new EmptyCompletionHandler<SSLEngine>() {
+                                @Override
+                                public void completed(final SSLEngine result) {
+                                    onSuccess(connection);
+                                }
+
+                                @Override
+                                public void failed(final Throwable throwable) {
+                                    onFailure(connection, throwable);
+                                }
+
+                            });
+                } catch (final IOException e) {
+                    onFailure(connection, e);
+                }
+            }
         }
 
-        /**
-         * {@inheritDoc}
-         */
-        @Override
         public void failed(final Throwable throwable) {
-            connectionFutureResult.handleErrorResult(adaptConnectionException(throwable));
+            // Adapt and forward.
+            future.handleErrorResult(adaptConnectionException(throwable));
         }
 
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public void updated(final org.glassfish.grizzly.Connection connection) {
+        public void updated(final org.glassfish.grizzly.Connection result) {
             // Ignore this.
         }
 
-    }
+        private LDAPConnection adaptConnection(final org.glassfish.grizzly.Connection<?> connection) {
+            // Test shows that its much faster with non block writes but risk
+            // running out of memory if the server is slow.
+            connection.configureBlocking(true);
+            connection.setProcessor(defaultFilterChain);
 
+            final LDAPConnection ldapConnection = new LDAPConnection(connection, options);
+            clientFilter.registerConnection(connection, ldapConnection);
+            return ldapConnection;
+        }
+
+        private ErrorResultException adaptConnectionException(Throwable t) {
+            if (t instanceof ExecutionException) {
+                t = t.getCause();
+            }
+
+            if (t instanceof ErrorResultException) {
+                return (ErrorResultException) t;
+            } else {
+                return newErrorResult(ResultCode.CLIENT_SIDE_CONNECT_ERROR, t.getMessage(), t);
+            }
+        }
+
+        private void onFailure(final LDAPConnection connection, final Throwable t) {
+            // Abort connection attempt due to error.
+            connection.close();
+            future.handleErrorResult(adaptConnectionException(t));
+        }
+
+        private void onSuccess(final LDAPConnection connection) {
+            future.handleResult(connection);
+
+            // Close the connection if the future was cancelled.
+            if (future.isCancelled()) {
+                connection.close();
+            }
+        }
+    };
+
+    private final LDAPClientFilter clientFilter;
+    private final FilterChain defaultFilterChain;
+    private final LDAPOptions options;
     private final SocketAddress socketAddress;
     private final TCPNIOTransport transport;
-    private final FilterChain defaultFilterChain;
-    private final LDAPClientFilter clientFilter;
-    private final LDAPOptions options;
 
     /**
      * Creates a new LDAP connection factory implementation which can be used to
@@ -223,7 +220,7 @@
     public Connection getConnection() throws ErrorResultException {
         try {
             return getConnectionAsync(null).get();
-        } catch (InterruptedException e) {
+        } catch (final InterruptedException e) {
             throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED, e);
         }
     }
@@ -234,14 +231,11 @@
     @Override
     public FutureResult<Connection> getConnectionAsync(
             final ResultHandler<? super Connection> handler) {
-        final ConnectionCompletionHandler ch = new ConnectionCompletionHandler(handler);
-        try {
-            ch.connectionFutureResult.setFutureResult(transport.connect(socketAddress, ch));
-            return ch.startTLSFutureResult;
-        } catch (final IOException e) {
-            final ErrorResultException result = adaptConnectionException(e);
-            return new CompletedFutureResult<Connection>(result);
-        }
+        final AsynchronousFutureResult<Connection> future =
+                new AsynchronousFutureResult<Connection>(handler);
+        final CompletionHandlerAdapter cha = new CompletionHandlerAdapter(future);
+        transport.connect(socketAddress, cha);
+        return future;
     }
 
     /**
@@ -264,23 +258,4 @@
         builder.append(')');
         return builder.toString();
     }
-
-    private LDAPConnection adaptConnection(final org.glassfish.grizzly.Connection<?> connection) {
-        // Test shows that its much faster with non block writes but risk
-        // running out of memory if the server is slow.
-        connection.configureBlocking(true);
-        connection.setProcessor(defaultFilterChain);
-
-        final LDAPConnection ldapConnection = new LDAPConnection(connection, options);
-        clientFilter.registerConnection(connection, ldapConnection);
-        return ldapConnection;
-    }
-
-    private ErrorResultException adaptConnectionException(Throwable t) {
-        if (t instanceof ExecutionException) {
-            t = t.getCause();
-        }
-
-        return newErrorResult(ResultCode.CLIENT_SIDE_CONNECT_ERROR, t.getMessage(), t);
-    }
 }
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPServerFilter.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPServerFilter.java
index b561b06..a6ec1d7 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPServerFilter.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/com/forgerock/opendj/ldap/LDAPServerFilter.java
@@ -80,7 +80,6 @@
 import org.glassfish.grizzly.ssl.SSLFilter;
 import org.glassfish.grizzly.ssl.SSLUtils;
 
-import com.forgerock.opendj.util.StaticUtils;
 import com.forgerock.opendj.util.Validator;
 
 /**
@@ -589,28 +588,21 @@
             clientContext.close();
 
             // Notify the server connection: it may be null if disconnect is
-            // invoked
-            // during accept.
+            // invoked during accept.
             final ServerConnection<Integer> serverConnection = clientContext.getServerConnection();
             if (serverConnection != null) {
                 serverConnection.handleConnectionClosed(messageID, unbindRequest);
             }
 
             // If this close was a result of an unbind request then the
-            // connection
-            // won't actually be closed yet. To avoid TIME_WAIT TCP state, let
-            // the
-            // client disconnect.
+            // connection won't actually be closed yet. To avoid TIME_WAIT TCP
+            // state, let the client disconnect.
             if (unbindRequest != null) {
                 return;
             }
 
             // Close the connection.
-            try {
-                connection.close();
-            } catch (final IOException e) {
-                StaticUtils.DEBUG_LOG.warning("Error closing connection: " + e);
-            }
+            connection.closeSilently();
         }
     }
 
@@ -622,19 +614,14 @@
             clientContext.close();
 
             // Notify the server connection: it may be null if disconnect is
-            // invoked
-            // during accept.
+            // invoked during accept.
             final ServerConnection<Integer> serverConnection = clientContext.getServerConnection();
             if (serverConnection != null) {
                 serverConnection.handleConnectionDisconnected(resultCode, message);
             }
 
             // Close the connection.
-            try {
-                connection.close();
-            } catch (final IOException e) {
-                StaticUtils.DEBUG_LOG.warning("Error closing connection: " + e);
-            }
+            connection.closeSilently();
         }
     }
 
@@ -646,19 +633,14 @@
             clientContext.close();
 
             // Notify the server connection: it may be null if disconnect is
-            // invoked
-            // during accept.
+            // invoked during accept.
             final ServerConnection<Integer> serverConnection = clientContext.getServerConnection();
             if (serverConnection != null) {
                 serverConnection.handleConnectionError(error);
             }
 
             // Close the connection.
-            try {
-                connection.close();
-            } catch (final IOException e) {
-                StaticUtils.DEBUG_LOG.warning("Error closing connection: " + e);
-            }
+            connection.closeSilently();
         }
     }
 
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/AuthenticatedConnectionFactory.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/AuthenticatedConnectionFactory.java
index eef6cd0..e90c986 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/AuthenticatedConnectionFactory.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/AuthenticatedConnectionFactory.java
@@ -208,6 +208,8 @@
         final StringBuilder builder = new StringBuilder();
         builder.append("AuthenticatedConnectionFactory(");
         builder.append(String.valueOf(parentFactory));
+        builder.append(", ");
+        builder.append(request);
         builder.append(')');
         return builder.toString();
     }
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/site/xdoc/index.xml.vm b/opendj-sdk/opendj3/opendj-ldap-sdk/src/site/xdoc/index.xml.vm
index a8df266..efb13fe 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/site/xdoc/index.xml.vm
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/site/xdoc/index.xml.vm
@@ -109,9 +109,7 @@
         <ul>
           <li><a href="http://builds.forgerock.org/view/OpenDJ/job/OpenDJ3/lastStableBuild/org.forgerock.opendj$opendj-ldap-sdk/artifact/org.forgerock.opendj/opendj-ldap-sdk/${currentSDKversion}/opendj-ldap-sdk-${currentSDKversion}.jar">opendj-ldap-sdk-${currentSDKversion}.jar</a> - OpenDJ LDAP SDK</li>
           <li><a href="http://maven.forgerock.org/repo/releases/org/forgerock/commons/i18n-core/${i18nFrameworkVersion}/i18n-core-${i18nFrameworkVersion}.jar">i18n-core-${i18nFrameworkVersion}.jar</a> - ForgeRock Commons I18N Framework</li>
-          <li><a href="http://search.maven.org/remotecontent?filepath=org/glassfish/grizzly/grizzly-framework/2.1.7/grizzly-framework-2.1.7.jar">grizzly-framework-2.1.7.jar</a> - Grizzly IO Framework</li>
-          <li><a href="http://search.maven.org/remotecontent?filepath=org/glassfish/gmbal/gmbal-api-only/3.0.0-b023/gmbal-api-only-3.0.0-b023.jar">gmbal-api-only-3.0.0-b023.jar</a> - Glassfish Management API</li>
-          <li><a href="http://search.maven.org/remotecontent?filepath=org/glassfish/external/management-api/3.0.0-b012/management-api-3.0.0-b012.jar">management-api-3.0.0-b012.jar</a> - Glassfish Common Management API</li>
+          <li><a href="http://search.maven.org/remotecontent?filepath=org/glassfish/grizzly/grizzly-framework/${grizzlyFrameworkVersion}/grizzly-framework-${grizzlyFrameworkVersion}.jar">grizzly-framework-${grizzlyFrameworkVersion}.jar</a> - Grizzly IO Framework</li>
         </ul>
       </subsection>
       <subsection name="Build">
diff --git a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java
index 180889c..d1a6467 100644
--- a/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java
+++ b/opendj-sdk/opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionFactoryTestCase.java
@@ -163,8 +163,7 @@
 
         // startTLS + SASL confidentiality
         // Use IP address here so that DIGEST-MD5 host verification works if
-        // local
-        // host name is not localhost (e.g. on some machines it might be
+        // local host name is not localhost (e.g. on some machines it might be
         // localhost.localdomain).
         factories[6][0] =
                 new AuthenticatedConnectionFactory(new LDAPConnectionFactory(new InetSocketAddress(
@@ -291,8 +290,7 @@
     @Test(enabled = false)
     public void testSchemaUsage() throws Exception {
         // Create a connection factory: this should always use the default
-        // schema,
-        // even if it is updated.
+        // schema, even if it is updated.
         final ConnectionFactory factory =
                 new LDAPConnectionFactory("localhost", TestCaseUtils.getLdapPort());
         final Schema defaultSchema = Schema.getDefaultSchema();
diff --git a/opendj-sdk/opendj3/pom.xml b/opendj-sdk/opendj3/pom.xml
index e70f1da..616b6f0 100644
--- a/opendj-sdk/opendj3/pom.xml
+++ b/opendj-sdk/opendj3/pom.xml
@@ -108,6 +108,7 @@
     <docTargetVersion>2.5.0</docTargetVersion>
     <siteDistributionURL>scp://forgerock.org/var/www/vhosts/opendj.forgerock.org/httpdocs</siteDistributionURL>
     <i18nFrameworkVersion>1.4.0</i18nFrameworkVersion>
+    <grizzlyFrameworkVersion>2.2.18</grizzlyFrameworkVersion>
     <gaId>UA-23412190-8</gaId>
     <!--
       Release date is specified only when building the documentation
diff --git a/opendj-sdk/opendj3/src/main/docbkx/dev-guide/chap-get-sdk.xml b/opendj-sdk/opendj3/src/main/docbkx/dev-guide/chap-get-sdk.xml
index 4a3fc23..226405b 100644
--- a/opendj-sdk/opendj3/src/main/docbkx/dev-guide/chap-get-sdk.xml
+++ b/opendj-sdk/opendj3/src/main/docbkx/dev-guide/chap-get-sdk.xml
@@ -158,21 +158,16 @@
     </step>
     <step>
      <para> Add the OpenDJ LDAP SDK for the APIs, the I18N core library,
-     Grizzly I/O framework for the transport, and GlassFish management APIs
-     to your CLASSPATH, typically found under
+     and Grizzly I/O framework for the transport to your CLASSPATH, typically found under
      <filename>opendj-ldap-toolkit-<?eval ${currentSDKversion}?>/lib/</filename>.</para>
      <screen>(UNIX)
-$ export CLASSPATH=/path/to/lib/gmbal-api-only-3.0.0-b023.jar:$CLASSPATH
-$ export CLASSPATH=/path/to/lib/grizzly-framework-2.1.9.jar:$CLASSPATH
+$ export CLASSPATH=/path/to/lib/grizzly-framework-<?eval ${grizzlyFrameworkVersion}?>.jar:$CLASSPATH
 $ export CLASSPATH=/path/to/lib/i18n-core-1.4.0.jar:$CLASSPATH
-$ export CLASSPATH=/path/to/lib/management-api-3.0.0-b012.jar:$CLASSPATH
 $ export CLASSPATH=/path/to/lib/opendj-ldap-sdk-<?eval ${currentSDKversion}?>.jar:$CLASSPATH
      </screen>
      <screen>(Windows)
-C:\>set CLASSPATH=\\path\to\lib\gmbal-api-only-3.0.0-b023.jar:%CLASSPATH%
-C:\>set CLASSPATH=\\path\to\lib\grizzly-framework-2.1.9.jar:%CLASSPATH%
+C:\>set CLASSPATH=\\path\to\lib\grizzly-framework-<?eval ${grizzlyFrameworkVersion}?>.jar:%CLASSPATH%
 C:\>set CLASSPATH=\\path\to\lib\i18n-core-1.4.0.jar:%CLASSPATH%
-C:\>set CLASSPATH=\\path\to\lib\management-api-3.0.0-b012.jar:%CLASSPATH%
 C:\>set CLASSPATH=\\path\to\lib\opendj-ldap-sdk-<?eval ${currentSDKversion}?>.jar:%CLASSPATH%</screen>
     </step>
   </procedure>
@@ -241,10 +236,8 @@
    <step>
     <para>Set your CLASSPATH to include the OpenDJ LDAP SDK library,
     <filename>opendj-ldap-sdk-<?eval ${currentSDKVersion}?>.jar</filename>, 
-    the I18N core library, <filename>i18n-core-1.4.0.jar</filename>, the Grizzly
-    framework, <filename>grizzly-framework-2.1.9.jar</filename>, and the
-    GlassFish management APIs, <filename>gmbal-api-only-3.0.0-b023.jar</filename>
-    &amp; <filename>management-api-3.0.0-b012.jar</filename>
+    the I18N core library, <filename>i18n-core-1.4.0.jar</filename>, and the Grizzly
+    framework, <filename>grizzly-framework-<?eval ${grizzlyFrameworkVersion}?>.jar</filename>
     under <filename>opendj-ldap-toolkit-<?eval ${currentSDKversion}?>/lib/</filename>.</para>
    </step>
   </procedure>

--
Gitblit v1.10.0