From 97491bcdb796a35879477018ea768c1be2c989e4 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Fri, 22 Oct 2010 06:52:25 +0000
Subject: [PATCH] Sync commit by matthew_swift Expose Grizzly transport configuration in LDAPOptions and LDAPListenerOptions in order to allow better customization of transport.

---
 sdk/src/org/opends/sdk/LDAPOptions.java                        |   50 ++
 sdk/src/com/sun/opends/sdk/tools/ModRate.java                  |   16 
 sdk/src/com/sun/opends/sdk/tools/ArgumentParser.java           |   82 +---
 sdk/src/com/sun/opends/sdk/tools/LDAPSearch.java               |   16 
 sdk/src/com/sun/opends/sdk/ldap/LDAPConnectionFactoryImpl.java |   12 
 /dev/null                                                      |  116 -------
 sdk/src/com/sun/opends/sdk/tools/AuthRate.java                 |   59 +-
 sdk/src/com/sun/opends/sdk/tools/LDAPModify.java               |   16 
 sdk/src/com/sun/opends/sdk/tools/LDAPPasswordModify.java       |   16 
 sdk/src/com/sun/opends/sdk/ldap/LDAPListenerImpl.java          |   12 
 sdk/src/com/sun/opends/sdk/tools/LDAPCompare.java              |   16 
 sdk/src/com/sun/opends/sdk/tools/SearchRate.java               |   16 
 sdk/src/org/opends/sdk/ServerConnection.java                   |  215 ------------
 sdk/src/org/opends/sdk/RequestHandler.java                     |  245 +++++++++++++++
 sdk/src/com/sun/opends/sdk/messages/messages.properties        |    2 
 sdk/src/org/opends/sdk/LDAPListenerOptions.java                |   48 ++
 sdk/tests/unit-tests-testng/src/org/opends/sdk/LDAPServer.java |    3 
 17 files changed, 468 insertions(+), 472 deletions(-)

diff --git a/sdk/src/com/sun/opends/sdk/ldap/GrizzlyLDAPListenerOptions.java b/sdk/src/com/sun/opends/sdk/ldap/GrizzlyLDAPListenerOptions.java
deleted file mode 100644
index ed2de71..0000000
--- a/sdk/src/com/sun/opends/sdk/ldap/GrizzlyLDAPListenerOptions.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2010 Sun Microsystems, Inc.
- */
-
-package com.sun.opends.sdk.ldap;
-
-
-
-import org.opends.sdk.LDAPListenerOptions;
-
-import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
-
-
-
-/**
- * Common options for LDAP listeners, including the Grizzly TCP transport.
- */
-public final class GrizzlyLDAPListenerOptions extends LDAPListenerOptions
-{
-  private TCPNIOTransport transport = null;
-
-
-
-  /**
-   * Creates a new set of listener options with default settings. SSL will not
-   * be enabled, a default set of decode options will be used, and the
-   * {@link GlobalTransportFactory} should be used to obtain a TCP transport.
-   */
-  public GrizzlyLDAPListenerOptions()
-  {
-    // Nothing to do.
-  }
-
-
-
-  /**
-   * Creates a new set of listener options having the same initial set of
-   * options as the provided set of connection options.
-   *
-   * @param options
-   *          The set of connection options to be copied.
-   */
-  public GrizzlyLDAPListenerOptions(final LDAPListenerOptions options)
-  {
-    super(options);
-    if (options instanceof GrizzlyLDAPListenerOptions)
-    {
-      this.transport = ((GrizzlyLDAPListenerOptions) options)
-          .getTCPNIOTransport();
-    }
-  }
-
-
-
-  /**
-   * Returns the Grizzly TCP transport which will be used when initiating
-   * connections with the Directory Server. By default this method will return
-   * {@code null} indicating that the {@link GlobalTransportFactory} should be
-   * used to obtain a TCP transport.
-   *
-   * @return The Grizzly TCP transport which will be used when initiating
-   *         connections with the Directory Server, or {@code null} if the
-   *         {@link GlobalTransportFactory} should be used to obtain a TCP
-   *         transport.
-   */
-  public final TCPNIOTransport getTCPNIOTransport()
-  {
-    return transport;
-  }
-
-
-
-  /**
-   * Sets the Grizzly TCP transport which will be used when initiating
-   * connections with the Directory Server. By default this method will return
-   * {@code null} indicating that the {@link GlobalTransportFactory} should be
-   * used to obtain a TCP transport.
-   *
-   * @param transport
-   *          The Grizzly TCP transport which will be used when initiating
-   *          connections with the Directory Server, or {@code null} if the
-   *          {@link GlobalTransportFactory} should be used to obtain a TCP
-   *          transport.
-   * @return A reference to this connection options.
-   */
-  public final GrizzlyLDAPListenerOptions setTCPNIOTransport(
-      final TCPNIOTransport transport)
-  {
-    this.transport = transport;
-    return this;
-  }
-
-}
diff --git a/sdk/src/com/sun/opends/sdk/ldap/GrizzlyLDAPOptions.java b/sdk/src/com/sun/opends/sdk/ldap/GrizzlyLDAPOptions.java
deleted file mode 100644
index d6f76ec..0000000
--- a/sdk/src/com/sun/opends/sdk/ldap/GrizzlyLDAPOptions.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE
- * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2010 Sun Microsystems, Inc.
- */
-
-package com.sun.opends.sdk.ldap;
-
-
-
-import org.opends.sdk.LDAPOptions;
-
-import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
-
-
-
-/**
- * Common options for LDAP client connections, including the Grizzly TCP
- * transport.
- */
-public final class GrizzlyLDAPOptions extends LDAPOptions
-{
-  private TCPNIOTransport transport = null;
-
-
-
-  /**
-   * Creates a new set of connection options with default settings. SSL will not
-   * be enabled, a default set of decode options will be used, and the
-   * {@link GlobalTransportFactory} should be used to obtain a TCP transport.
-   */
-  public GrizzlyLDAPOptions()
-  {
-    // Nothing to do.
-  }
-
-
-
-  /**
-   * Creates a new set of connection options having the same initial set of
-   * options as the provided set of connection options.
-   *
-   * @param options
-   *          The set of connection options to be copied.
-   */
-  public GrizzlyLDAPOptions(final LDAPOptions options)
-  {
-    super(options);
-    if (options instanceof GrizzlyLDAPOptions)
-    {
-      this.transport = ((GrizzlyLDAPOptions) options).getTCPNIOTransport();
-    }
-  }
-
-
-
-  /**
-   * Returns the Grizzly TCP transport which will be used when initiating
-   * connections with the Directory Server. By default this method will return
-   * {@code null} indicating that the {@link GlobalTransportFactory} should be
-   * used to obtain a TCP transport.
-   *
-   * @return The Grizzly TCP transport which will be used when initiating
-   *         connections with the Directory Server, or {@code null} if the
-   *         {@link GlobalTransportFactory} should be used to obtain a TCP
-   *         transport.
-   */
-  public final TCPNIOTransport getTCPNIOTransport()
-  {
-    return transport;
-  }
-
-
-
-  /**
-   * Sets the Grizzly TCP transport which will be used when initiating
-   * connections with the Directory Server. By default this method will return
-   * {@code null} indicating that the {@link GlobalTransportFactory} should be
-   * used to obtain a TCP transport.
-   *
-   * @param transport
-   *          The Grizzly TCP transport which will be used when initiating
-   *          connections with the Directory Server, or {@code null} if the
-   *          {@link GlobalTransportFactory} should be used to obtain a TCP
-   *          transport.
-   * @return A reference to this connection options.
-   */
-  public final GrizzlyLDAPOptions setTCPNIOTransport(
-      final TCPNIOTransport transport)
-  {
-    this.transport = transport;
-    return this;
-  }
-
-}
diff --git a/sdk/src/com/sun/opends/sdk/ldap/LDAPConnectionFactoryImpl.java b/sdk/src/com/sun/opends/sdk/ldap/LDAPConnectionFactoryImpl.java
index 6610745..fc08a15 100644
--- a/sdk/src/com/sun/opends/sdk/ldap/LDAPConnectionFactoryImpl.java
+++ b/sdk/src/com/sun/opends/sdk/ldap/LDAPConnectionFactoryImpl.java
@@ -253,17 +253,15 @@
   public LDAPConnectionFactoryImpl(final SocketAddress address,
       final LDAPOptions options)
   {
-    TCPNIOTransport tmpTransport = null;
-    if (options instanceof GrizzlyLDAPOptions)
+    if (options.getTCPNIOTransport() == null)
     {
-      tmpTransport = ((GrizzlyLDAPOptions) options).getTCPNIOTransport();
+      this.transport = GlobalTransportFactory.getInstance()
+          .createTCPTransport();
     }
-    if (tmpTransport == null)
+    else
     {
-      tmpTransport = GlobalTransportFactory.getInstance().createTCPTransport();
+      this.transport = options.getTCPNIOTransport();
     }
-    this.transport = tmpTransport;
-
     this.socketAddress = address;
     this.options = new LDAPOptions(options);
     this.clientFilter = new LDAPClientFilter(new LDAPReader(
diff --git a/sdk/src/com/sun/opends/sdk/ldap/LDAPListenerImpl.java b/sdk/src/com/sun/opends/sdk/ldap/LDAPListenerImpl.java
index 90dd3a3..67833c4 100644
--- a/sdk/src/com/sun/opends/sdk/ldap/LDAPListenerImpl.java
+++ b/sdk/src/com/sun/opends/sdk/ldap/LDAPListenerImpl.java
@@ -83,17 +83,15 @@
       final ServerConnectionFactory<LDAPClientContext, Integer> factory,
       final LDAPListenerOptions options) throws IOException
   {
-    TCPNIOTransport tmpTransport = null;
-    if (options instanceof GrizzlyLDAPListenerOptions)
+    if (options.getTCPNIOTransport() == null)
     {
-      tmpTransport = ((GrizzlyLDAPListenerOptions) options)
-          .getTCPNIOTransport();
+      this.transport = GlobalTransportFactory.getInstance()
+          .createTCPTransport();
     }
-    if (tmpTransport == null)
+    else
     {
-      tmpTransport = GlobalTransportFactory.getInstance().createTCPTransport();
+      this.transport = options.getTCPNIOTransport();
     }
-    this.transport = tmpTransport;
     this.connectionFactory = factory;
     this.defaultFilterChain = new DefaultFilterChain();
     this.defaultFilterChain.add(new TransportFilter());
diff --git a/sdk/src/com/sun/opends/sdk/messages/messages.properties b/sdk/src/com/sun/opends/sdk/messages/messages.properties
index 1c85685..99aa95f 100755
--- a/sdk/src/com/sun/opends/sdk/messages/messages.properties
+++ b/sdk/src/com/sun/opends/sdk/messages/messages.properties
@@ -3041,7 +3041,7 @@
  be started because it is already running
 INFO_SUBCMDPARSER_OPTIONS={options}
 INFO_SUBCMDPARSER_SUBCMD_AND_OPTIONS={subcommand} {options}
-INFO_SUBCMDPARSER_WHERE_OPTIONS_INCLUDE=\        where {options} include:
+INFO_SUBCMDPARSER_WHERE_OPTIONS_INCLUDE=Where {options} include:
 INFO_EMAIL_TOOL_DESCRIPTION=Send an e-mail message via SMTP
 INFO_EMAIL_HOST_DESCRIPTION=The address of the SMTP server to use to send \
  the message
diff --git a/sdk/src/com/sun/opends/sdk/tools/ArgumentParser.java b/sdk/src/com/sun/opends/sdk/tools/ArgumentParser.java
index a6488ed..a96f75f 100644
--- a/sdk/src/com/sun/opends/sdk/tools/ArgumentParser.java
+++ b/sdk/src/com/sun/opends/sdk/tools/ArgumentParser.java
@@ -84,13 +84,11 @@
   private final ArrayList<String> trailingArguments;
 
   // Indicates whether this parser will allow additional unnamed
-  // arguments at
-  // the end of the list.
+  // arguments at the end of the list.
   private final boolean allowsTrailingArguments;
 
   // Indicates whether long arguments should be treated in a
-  // case-sensitive
-  // manner.
+  // case-sensitive manner.
   private final boolean longArgumentsCaseSensitive;
 
   // Indicates whether the usage or version information has been
@@ -127,18 +125,15 @@
   private OutputStream usageOutputStream;
 
   // The fully-qualified name of the Java class that should be invoked
-  // to launch
-  // the program with which this argument parser is associated.
+  // to launch the program with which this argument parser is associated.
   private final String mainClassName;
 
   // A human-readable description for the tool, which will be included
-  // when
-  // displaying usage information.
+  // when displaying usage information.
   private final LocalizableMessage toolDescription;
 
   // The display name that will be used for the trailing arguments in
-  // the usage
-  // information.
+  // the usage information.
   private final String trailingArgsDisplayName;
 
   // The raw set of command-line arguments that were provided.
@@ -855,6 +850,7 @@
       }
     }
     buffer.append(EOL);
+    buffer.append(EOL);
     buffer.append(INFO_SUBCMDPARSER_WHERE_OPTIONS_INCLUDE.get());
     buffer.append(EOL);
     buffer.append(EOL);
@@ -1021,17 +1017,14 @@
       if (arg.equals("--"))
       {
         // This is a special indicator that we have reached the end of
-        // the named
-        // arguments and that everything that follows after this should
-        // be
-        // considered trailing arguments.
+        // the named arguments and that everything that follows after this
+        // should be considered trailing arguments.
         inTrailingArgs = true;
       }
       else if (arg.startsWith("--"))
       {
         // This indicates that we are using the long name to reference
-        // the
-        // argument. It may be in any of the following forms:
+        // the argument. It may be in any of the following forms:
         // --name
         // --name value
         // --name=value
@@ -1088,8 +1081,7 @@
           else if (argName.equals(OPTION_LONG_PRODUCT_VERSION))
           {
             // "--version" will always be interpreted as requesting
-            // version
-            // information.
+            // version information.
             usageOrVersionDisplayed = true;
             versionPresent = true;
             try
@@ -1116,8 +1108,7 @@
           a.setPresent(true);
 
           // If this is the usage argument, then immediately stop and
-          // print
-          // usage information.
+          // print usage information.
           if ((usageArgument != null)
               && usageArgument.getName().equals(a.getName()))
           {
@@ -1134,8 +1125,7 @@
         }
 
         // See if the argument takes a value. If so, then make sure one
-        // was
-        // provided. If not, then make sure none was provided.
+        // was provided. If not, then make sure none was provided.
         if (a.needsValue())
         {
           if (argValue == null)
@@ -1182,8 +1172,7 @@
       else if (arg.startsWith("-"))
       {
         // This indicates that we are using the 1-character name to
-        // reference
-        // the argument. It may be in any of the following forms:
+        // reference the argument. It may be in any of the following forms:
         // -n
         // -nvalue
         // -n value
@@ -1228,8 +1217,7 @@
           {
             // "-V" will always be interpreted as requesting
             // version information except if it's already defined (e.g
-            // in
-            // ldap tools).
+            // in ldap tools).
             usageOrVersionDisplayed = true;
             versionPresent = true;
             try
@@ -1255,8 +1243,7 @@
           a.setPresent(true);
 
           // If this is the usage argument, then immediately stop and
-          // print
-          // usage information.
+          // print usage information.
           if ((usageArgument != null)
               && usageArgument.getName().equals(a.getName()))
           {
@@ -1273,8 +1260,7 @@
         }
 
         // See if the argument takes a value. If so, then make sure one
-        // was
-        // provided. If not, then make sure none was provided.
+        // was provided. If not, then make sure none was provided.
         if (a.needsValue())
         {
           if (argValue == null)
@@ -1313,15 +1299,11 @@
         {
           if (argValue != null)
           {
-            // If we've gotten here, then it means that we're in a
-            // scenario like
+            // If we've gotten here, then it means that we're in a scenario like
             // "-abc" where "a" is a valid argument that doesn't take a
-            // value.
-            // However, this could still be valid if all remaining
-            // characters in
-            // the value are also valid argument characters that don't
-            // take
-            // values.
+            // value. However, this could still be valid if all remaining
+            // characters in the value are also valid argument characters that
+            // don't take values.
             final int valueLength = argValue.length();
             for (int j = 0; j < valueLength; j++)
             {
@@ -1337,8 +1319,7 @@
               else if (b.needsValue())
               {
                 // This means we're in a scenario like "-abc" where b is
-                // a
-                // valid argument that takes a value. We don't support
+                // a valid argument that takes a value. We don't support
                 // that.
                 final LocalizableMessage message = ERR_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES
                     .get(String.valueOf(argCharacter), argValue, String
@@ -1350,8 +1331,7 @@
                 b.setPresent(true);
 
                 // If this is the usage argument, then immediately stop
-                // and
-                // print usage information.
+                // and print usage information.
                 if ((usageArgument != null)
                     && usageArgument.getName().equals(b.getName()))
                 {
@@ -1373,16 +1353,14 @@
       else if (allowsTrailingArguments)
       {
         // It doesn't start with a dash, so it must be a trailing
-        // argument if
-        // that is acceptable.
+        // argument if that is acceptable.
         inTrailingArgs = true;
         trailingArguments.add(arg);
       }
       else
       {
         // It doesn't start with a dash and we don't allow trailing
-        // arguments,
-        // so this is illegal.
+        // arguments, so this is illegal.
         final LocalizableMessage message = ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT
             .get(arg);
         throw new ArgumentException(message);
@@ -1390,8 +1368,7 @@
     }
 
     // If we allow trailing arguments and there is a minimum number,
-    // then make
-    // sure at least that many were provided.
+    // then make sure at least that many were provided.
     if (allowsTrailingArguments && (minTrailingArguments > 0))
     {
       if (trailingArguments.size() < minTrailingArguments)
@@ -1410,10 +1387,8 @@
     }
 
     // Iterate through all of the arguments. For any that were not
-    // provided on
-    // the command line, see if there is an alternate default that can
-    // be used.
-    // For cases where there is not, see that argument is required.
+    // provided on the command line, see if there is an alternate default that
+    // can be used. For cases where there is not, see that argument is required.
     for (final Argument a : argumentList)
     {
       if (!a.isPresent())
@@ -1453,8 +1428,7 @@
         }
 
         // If there is still no value and the argument is required, then
-        // that's
-        // a problem.
+        // that's a problem.
         if ((!a.hasValue()) && a.isRequired())
         {
           final LocalizableMessage message = ERR_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG
diff --git a/sdk/src/com/sun/opends/sdk/tools/AuthRate.java b/sdk/src/com/sun/opends/sdk/tools/AuthRate.java
index 7965437..e6a4890 100644
--- a/sdk/src/com/sun/opends/sdk/tools/AuthRate.java
+++ b/sdk/src/com/sun/opends/sdk/tools/AuthRate.java
@@ -65,10 +65,11 @@
 
 
 
-      private BindStatsThread()
+      private BindStatsThread(boolean extraFieldRequired)
       {
-        super(new String[] { "bind time %" });
-        extraColumn = new String[1];
+        super(extraFieldRequired ? new String[] { "bind time %" }
+            : new String[0]);
+        extraColumn = new String[extraFieldRequired ? 1 : 0];
       }
 
 
@@ -77,9 +78,12 @@
       String[] getAdditionalColumns()
       {
         invalidCredRecentCount.set(0);
-        final long searchWaitTime = searchWaitRecentTime.getAndSet(0);
-        extraColumn[0] = String.format("%.1f",
-            ((float)(waitTime - searchWaitTime) / waitTime) * 100.0);
+        if (extraColumn.length != 0)
+        {
+          final long searchWaitTime = searchWaitRecentTime.getAndSet(0);
+          extraColumn[0] = String.format("%.1f",
+              ((float) (waitTime - searchWaitTime) / waitTime) * 100.0);
+        }
         return extraColumn;
       }
     }
@@ -183,7 +187,7 @@
         else
         {
           return performBind(connection, data,
-              new UpdateStatsResultHandler<BindResult>(startTime));
+              new BindUpdateStatsResultHandler(startTime));
         }
       }
 
@@ -383,11 +387,7 @@
     @Override
     StatsThread newStatsThread()
     {
-      if(filter != null && baseDN != null)
-      {
-        return new BindStatsThread();
-      }
-      return new StatsThread(new String[0]);
+      return new BindStatsThread(filter != null && baseDN != null);
     }
 
 
@@ -400,7 +400,7 @@
     }
   }
   /**
-   * The main method for SearchRate tool.
+   * The main method for AuthRate tool.
    *
    * @param args
    *          The command-line arguments provided to this program.
@@ -408,7 +408,7 @@
 
   public static void main(final String[] args)
   {
-    final int retCode = mainSearchRate(args, System.in, System.out, System.err);
+    final int retCode = mainAuthRate(args, System.in, System.out, System.err);
     System.exit(filterExitCode(retCode));
   }
 
@@ -416,23 +416,23 @@
 
   /**
    * Parses the provided command-line arguments and uses that information to run
-   * the ldapsearch tool.
+   * the tool.
    *
    * @param args
    *          The command-line arguments provided to this program.
    * @return The error code.
    */
 
-  static int mainSearchRate(final String[] args)
+  static int mainAuthRate(final String[] args)
   {
-    return mainSearchRate(args, System.in, System.out, System.err);
+    return mainAuthRate(args, System.in, System.out, System.err);
   }
 
 
 
   /**
    * Parses the provided command-line arguments and uses that information to run
-   * the ldapsearch tool.
+   * the tool.
    *
    * @param args
    *          The command-line arguments provided to this program.
@@ -448,7 +448,7 @@
    * @return The error code.
    */
 
-  static int mainSearchRate(final String[] args, final InputStream inStream,
+  static int mainAuthRate(final String[] args, final InputStream inStream,
       final OutputStream outStream, final OutputStream errStream)
 
   {
@@ -654,6 +654,14 @@
     try
     {
       argParser.parseArguments(args);
+
+      // If we should just display usage or version information,
+      // then print it and exit.
+      if (argParser.usageOrVersionDisplayed())
+      {
+        return 0;
+      }
+
       connectionFactory =
           connectionFactoryProvider.getConnectionFactory();
       runner.validate();
@@ -670,26 +678,19 @@
       final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
           .getMessage());
       println(message);
-      println(argParser.getUsageMessage());
       return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
     }
 
-    // If we should just display usage or version information,
-    // then print it and exit.
-    if (argParser.usageOrVersionDisplayed())
-    {
-      return 0;
-    }
-
     final List<String> attributes = new LinkedList<String>();
     final ArrayList<String> filterAndAttributeStrings = argParser
         .getTrailingArguments();
     if (filterAndAttributeStrings.size() > 0)
     {
       // the list of trailing arguments should be structured as follow:
-      // the first trailing argument is
-      // considered the filter, the other as attributes.
+      // the first trailing argument is considered the filter, the other as
+      // attributes.
       runner.filter = filterAndAttributeStrings.remove(0);
+
       // The rest are attributes
       for (final String s : filterAndAttributeStrings)
       {
diff --git a/sdk/src/com/sun/opends/sdk/tools/LDAPCompare.java b/sdk/src/com/sun/opends/sdk/tools/LDAPCompare.java
index a861219..6012150 100644
--- a/sdk/src/com/sun/opends/sdk/tools/LDAPCompare.java
+++ b/sdk/src/com/sun/opends/sdk/tools/LDAPCompare.java
@@ -381,6 +381,14 @@
     try
     {
       argParser.parseArguments(args);
+
+      // If we should just display usage or version information,
+      // then print it and exit.
+      if (argParser.usageOrVersionDisplayed())
+      {
+        return 0;
+      }
+
       connectionFactory =
           connectionFactoryProvider.getAuthenticatedConnectionFactory();
     }
@@ -389,17 +397,9 @@
       final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
           .getMessage());
       println(message);
-      println(argParser.getUsageMessage());
       return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
     }
 
-    // If we should just display usage or version information,
-    // then print it and exit.
-    if (argParser.usageOrVersionDisplayed())
-    {
-      return 0;
-    }
-
     try
     {
       final int versionNumber = version.getIntValue();
diff --git a/sdk/src/com/sun/opends/sdk/tools/LDAPModify.java b/sdk/src/com/sun/opends/sdk/tools/LDAPModify.java
index aa9d4e1..beedc3a 100644
--- a/sdk/src/com/sun/opends/sdk/tools/LDAPModify.java
+++ b/sdk/src/com/sun/opends/sdk/tools/LDAPModify.java
@@ -599,6 +599,14 @@
     try
     {
       argParser.parseArguments(args);
+
+      // If we should just display usage or version information,
+      // then print it and exit.
+      if (argParser.usageOrVersionDisplayed())
+      {
+        return 0;
+      }
+
       connectionFactory =
           connectionFactoryProvider.getAuthenticatedConnectionFactory();
     }
@@ -607,17 +615,9 @@
       final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
           .getMessage());
       println(message);
-      println(argParser.getUsageMessage());
       return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
     }
 
-    // If we should just display usage or version information,
-    // then print it and exit.
-    if (argParser.usageOrVersionDisplayed())
-    {
-      return 0;
-    }
-
     try
     {
       final int versionNumber = version.getIntValue();
diff --git a/sdk/src/com/sun/opends/sdk/tools/LDAPPasswordModify.java b/sdk/src/com/sun/opends/sdk/tools/LDAPPasswordModify.java
index d87d5b7..3c960fb 100644
--- a/sdk/src/com/sun/opends/sdk/tools/LDAPPasswordModify.java
+++ b/sdk/src/com/sun/opends/sdk/tools/LDAPPasswordModify.java
@@ -321,6 +321,14 @@
     try
     {
       argParser.parseArguments(args);
+
+      // If we should just display usage or version information,
+      // then print it and exit.
+      if (argParser.usageOrVersionDisplayed())
+      {
+        return 0;
+      }
+
       connectionFactory =
           connectionFactoryProvider.getAuthenticatedConnectionFactory();
     }
@@ -329,17 +337,9 @@
       final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
           .getMessage());
       println(message);
-      println(argParser.getUsageMessage());
       return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
     }
 
-    // If we should just display usage or version information,
-    // then print it and exit.
-    if (argParser.usageOrVersionDisplayed())
-    {
-      return 0;
-    }
-
     final PasswordModifyExtendedRequest request = Requests
         .newPasswordModifyExtendedRequest();
     try
diff --git a/sdk/src/com/sun/opends/sdk/tools/LDAPSearch.java b/sdk/src/com/sun/opends/sdk/tools/LDAPSearch.java
index 5c5daa5..eb00b38 100644
--- a/sdk/src/com/sun/opends/sdk/tools/LDAPSearch.java
+++ b/sdk/src/com/sun/opends/sdk/tools/LDAPSearch.java
@@ -609,6 +609,14 @@
     try
     {
       argParser.parseArguments(args);
+
+      // If we should just display usage or version information,
+      // then print it and exit.
+      if (argParser.usageOrVersionDisplayed())
+      {
+        return 0;
+      }
+
       connectionFactory =
           connectionFactoryProvider.getAuthenticatedConnectionFactory();
     }
@@ -617,17 +625,9 @@
       final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
           .getMessage());
       println(message);
-      println(argParser.getUsageMessage());
       return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
     }
 
-    // If we should just display usage or version information,
-    // then print it and exit.
-    if (argParser.usageOrVersionDisplayed())
-    {
-      return 0;
-    }
-
     final List<Filter> filters = new LinkedList<Filter>();
     final List<String> attributes = new LinkedList<String>();
     final ArrayList<String> filterAndAttributeStrings = argParser
diff --git a/sdk/src/com/sun/opends/sdk/tools/ModRate.java b/sdk/src/com/sun/opends/sdk/tools/ModRate.java
index 8ad7a38..68d78fb 100644
--- a/sdk/src/com/sun/opends/sdk/tools/ModRate.java
+++ b/sdk/src/com/sun/opends/sdk/tools/ModRate.java
@@ -374,6 +374,14 @@
     try
     {
       argParser.parseArguments(args);
+
+      // If we should just display usage or version information,
+      // then print it and exit.
+      if (argParser.usageOrVersionDisplayed())
+      {
+        return 0;
+      }
+
       connectionFactory =
           connectionFactoryProvider.getAuthenticatedConnectionFactory();
       runner.validate();
@@ -383,17 +391,9 @@
       final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
           .getMessage());
       println(message);
-      println(argParser.getUsageMessage());
       return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
     }
 
-    // If we should just display usage or version information,
-    // then print it and exit.
-    if (argParser.usageOrVersionDisplayed())
-    {
-      return 0;
-    }
-
     runner.modStrings = argParser.getTrailingArguments().toArray(
         new String[argParser.getTrailingArguments().size()]);
     runner.baseDN = baseDN.getValue();
diff --git a/sdk/src/com/sun/opends/sdk/tools/SearchRate.java b/sdk/src/com/sun/opends/sdk/tools/SearchRate.java
index ddc81ae..183a7bc 100644
--- a/sdk/src/com/sun/opends/sdk/tools/SearchRate.java
+++ b/sdk/src/com/sun/opends/sdk/tools/SearchRate.java
@@ -447,6 +447,14 @@
     try
     {
       argParser.parseArguments(args);
+
+      // If we should just display usage or version information,
+      // then print it and exit.
+      if (argParser.usageOrVersionDisplayed())
+      {
+        return 0;
+      }
+
       connectionFactory =
           connectionFactoryProvider.getAuthenticatedConnectionFactory();
       runner.validate();
@@ -456,17 +464,9 @@
       final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae
           .getMessage());
       println(message);
-      println(argParser.getUsageMessage());
       return ResultCode.CLIENT_SIDE_PARAM_ERROR.intValue();
     }
 
-    // If we should just display usage or version information,
-    // then print it and exit.
-    if (argParser.usageOrVersionDisplayed())
-    {
-      return 0;
-    }
-
     final List<String> attributes = new LinkedList<String>();
     final ArrayList<String> filterAndAttributeStrings = argParser
         .getTrailingArguments();
diff --git a/sdk/src/org/opends/sdk/LDAPListenerOptions.java b/sdk/src/org/opends/sdk/LDAPListenerOptions.java
index 472688d..a2b5815 100644
--- a/sdk/src/org/opends/sdk/LDAPListenerOptions.java
+++ b/sdk/src/org/opends/sdk/LDAPListenerOptions.java
@@ -31,6 +31,8 @@
 
 import javax.net.ssl.SSLContext;
 
+import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
+
 import com.sun.opends.sdk.util.Validator;
 
 
@@ -38,7 +40,7 @@
 /**
  * Common options for LDAP listeners.
  */
-public class LDAPListenerOptions
+public final class LDAPListenerOptions
 {
 
   private SSLContext sslContext;
@@ -47,6 +49,8 @@
 
   private int backlog;
 
+  private TCPNIOTransport transport;
+
 
 
   /**
@@ -58,6 +62,7 @@
     this.sslContext = null;
     this.backlog = 0;
     this.decodeOptions = new DecodeOptions();
+    this.transport = null;
   }
 
 
@@ -74,6 +79,7 @@
     this.sslContext = options.sslContext;
     this.backlog = options.backlog;
     this.decodeOptions = new DecodeOptions(options.decodeOptions);
+    this.transport = options.transport;
   }
 
 
@@ -125,6 +131,24 @@
 
 
   /**
+   * Returns the Grizzly TCP transport which will be used when initiating
+   * connections with the Directory Server. By default this method will return
+   * {@code null} indicating that the default transport factory should be
+   * used to obtain a TCP transport.
+   *
+   * @return The Grizzly TCP transport which will be used when initiating
+   *         connections with the Directory Server, or {@code null} if the
+   *         default transport factory should be used to obtain a TCP
+   *         transport.
+   */
+  public final TCPNIOTransport getTCPNIOTransport()
+  {
+    return transport;
+  }
+
+
+
+  /**
    * Sets the maximum queue length for incoming connections requests. If a
    * connection request arrives when the queue is full, the connection is
    * refused. If the backlog is less than {@code 1} then a default value of
@@ -180,4 +204,26 @@
     this.sslContext = sslContext;
     return this;
   }
+
+
+
+  /**
+   * Sets the Grizzly TCP transport which will be used when initiating
+   * connections with the Directory Server. By default this method will return
+   * {@code null} indicating that the default transport factory should be
+   * used to obtain a TCP transport.
+   *
+   * @param transport
+   *          The Grizzly TCP transport which will be used when initiating
+   *          connections with the Directory Server, or {@code null} if the
+   *          default transport factory should be used to obtain a TCP
+   *          transport.
+   * @return A reference to this connection options.
+   */
+  public final LDAPListenerOptions setTCPNIOTransport(
+      final TCPNIOTransport transport)
+  {
+    this.transport = transport;
+    return this;
+  }
 }
diff --git a/sdk/src/org/opends/sdk/LDAPOptions.java b/sdk/src/org/opends/sdk/LDAPOptions.java
index 6e5a5d7..ac0acaa 100644
--- a/sdk/src/org/opends/sdk/LDAPOptions.java
+++ b/sdk/src/org/opends/sdk/LDAPOptions.java
@@ -29,11 +29,14 @@
 
 
 
-import java.util.*;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import javax.net.ssl.SSLContext;
 
+import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
+
 import com.sun.opends.sdk.util.Validator;
 
 
@@ -41,7 +44,7 @@
 /**
  * Common options for LDAP client connections.
  */
-public class LDAPOptions
+public final class LDAPOptions
 {
   private SSLContext sslContext;
 
@@ -61,6 +64,8 @@
    */
   private List<String> enabledProtocols = new LinkedList<String>();
 
+  private TCPNIOTransport transport;
+
 
 
   /**
@@ -69,11 +74,11 @@
    */
   public LDAPOptions()
   {
-    super();
     this.sslContext = null;
     this.timeoutInMillis = 0;
     this.useStartTLS = false;
     this.decodeOptions = new DecodeOptions();
+    this.transport = null;
   }
 
 
@@ -93,6 +98,7 @@
     this.decodeOptions = new DecodeOptions(options.decodeOptions);
     this.enabledCipherSuites.addAll(options.getEnabledCipherSuites());
     this.enabledProtocols.addAll(options.getEnabledProtocols());
+    this.transport = options.transport;
   }
 
 
@@ -130,6 +136,23 @@
 
 
   /**
+   * Returns the Grizzly TCP transport which will be used when initiating
+   * connections with the Directory Server. By default this method will return
+   * {@code null} indicating that the default transport factory should be used
+   * to obtain a TCP transport.
+   *
+   * @return The Grizzly TCP transport which will be used when initiating
+   *         connections with the Directory Server, or {@code null} if the
+   *         default transport factory should be used to obtain a TCP transport.
+   */
+  public final TCPNIOTransport getTCPNIOTransport()
+  {
+    return transport;
+  }
+
+
+
+  /**
    * Returns the operation timeout in the specified unit.
    *
    * @param unit
@@ -186,6 +209,27 @@
 
 
   /**
+   * Sets the Grizzly TCP transport which will be used when initiating
+   * connections with the Directory Server. By default this method will return
+   * {@code null} indicating that the default transport factory will be used to
+   * obtain a TCP transport.
+   *
+   * @param transport
+   *          The Grizzly TCP transport which will be used when initiating
+   *          connections with the Directory Server, or {@code null} if the
+   *          default transport factory should be used to obtain a TCP
+   *          transport.
+   * @return A reference to this LDAP connection options.
+   */
+  public final LDAPOptions setTCPNIOTransport(final TCPNIOTransport transport)
+  {
+    this.transport = transport;
+    return this;
+  }
+
+
+
+  /**
    * Sets the operation timeout. If the response is not received from the
    * Directory Server in the timeout period, the operation will be abandoned and
    * an error result returned. A timeout setting of 0 disables timeout limits.
diff --git a/sdk/src/org/opends/sdk/RequestHandler.java b/sdk/src/org/opends/sdk/RequestHandler.java
new file mode 100644
index 0000000..3287721
--- /dev/null
+++ b/sdk/src/org/opends/sdk/RequestHandler.java
@@ -0,0 +1,245 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Copyright 2010 Sun Microsystems, Inc.
+ */
+
+package org.opends.sdk;
+
+
+
+import org.opends.sdk.requests.*;
+import org.opends.sdk.responses.BindResult;
+import org.opends.sdk.responses.CompareResult;
+import org.opends.sdk.responses.ExtendedResult;
+import org.opends.sdk.responses.Result;
+
+
+
+/**
+ * A handler interface for processing client requests.
+ * <p>
+ * Implementations must always return results using the provided
+ * {@link ResultHandler} unless explicitly permitted.
+ * <p>
+ * For example, an {@link LDAPListener} does not require {@code RequestHandler}
+ * implementations to return results, which may be useful when implementing
+ * abandon operation functionality. Conversely, an access logger implemented as
+ * a {@code RequestHandler} wrapper will require wrapped {@code RequestHandler}s
+ * to always return results, even abandoned results, in order for it to log the
+ * result status.
+ *
+ * @param <C>
+ *          The type of request context.
+ * @see ServerConnectionFactory
+ */
+public interface RequestHandler<C>
+{
+
+  /**
+   * Invoked when an add request is received from a client.
+   *
+   * @param requestContext
+   *          The request context.
+   * @param request
+   *          The add request.
+   * @param resultHandler
+   *          The handler which should be used to send back the result to the
+   *          client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle add requests.
+   */
+  void handleAdd(C requestContext, AddRequest request,
+      ResultHandler<? super Result> resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+
+
+
+  /**
+   * Invoked when a bind request is received from a client.
+   *
+   * @param requestContext
+   *          The request context.
+   * @param version
+   *          The protocol version included with the bind request.
+   * @param request
+   *          The bind request.
+   * @param resultHandler
+   *          The handler which should be used to send back the result to the
+   *          client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle bind requests.
+   */
+  void handleBind(C requestContext, int version, BindRequest request,
+      ResultHandler<? super BindResult> resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+
+
+
+  /**
+   * Invoked when a compare request is received from a client.
+   *
+   * @param requestContext
+   *          The request context.
+   * @param request
+   *          The compare request.
+   * @param resultHandler
+   *          The handler which should be used to send back the result to the
+   *          client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle compare requests.
+   */
+  void handleCompare(C requestContext, CompareRequest request,
+      ResultHandler<? super CompareResult> resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+
+
+
+  /**
+   * Invoked when a delete request is received from a client.
+   *
+   * @param requestContext
+   *          The request context.
+   * @param request
+   *          The delete request.
+   * @param resultHandler
+   *          The handler which should be used to send back the result to the
+   *          client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle delete requests.
+   */
+  void handleDelete(C requestContext, DeleteRequest request,
+      ResultHandler<? super Result> resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+
+
+
+  /**
+   * Invoked when an extended request is received from a client.
+   *
+   * @param <R>
+   *          The type of result returned by the extended request.
+   * @param requestContext
+   *          The request context.
+   * @param request
+   *          The extended request.
+   * @param resultHandler
+   *          The handler which should be used to send back the result to the
+   *          client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle extended requests.
+   */
+  <R extends ExtendedResult> void handleExtendedRequest(C requestContext,
+      ExtendedRequest<R> request, ResultHandler<? super R> resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+
+
+
+  /**
+   * Invoked when a modify request is received from a client.
+   *
+   * @param requestContext
+   *          The request context.
+   * @param request
+   *          The modify request.
+   * @param resultHandler
+   *          The handler which should be used to send back the result to the
+   *          client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle modify requests.
+   */
+  void handleModify(C requestContext, ModifyRequest request,
+      ResultHandler<? super Result> resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+
+
+
+  /**
+   * Invoked when a modify DN request is received from a client.
+   *
+   * @param requestContext
+   *          The request context.
+   * @param request
+   *          The modify DN request.
+   * @param resultHandler
+   *          The handler which should be used to send back the result to the
+   *          client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle modify DN requests.
+   */
+  void handleModifyDN(C requestContext, ModifyDNRequest request,
+      ResultHandler<? super Result> resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+
+
+
+  /**
+   * Invoked when a search request is received from a client.
+   *
+   * @param requestContext
+   *          The request context.
+   * @param request
+   *          The search request.
+   * @param resultHandler
+   *          The handler which should be used to send back the search results
+   *          to the client.
+   * @param intermediateResponseHandler
+   *          The handler which should be used to send back any intermediate
+   *          responses to the client.
+   * @throws UnsupportedOperationException
+   *           If this request handler does not handle search requests.
+   */
+  void handleSearch(C requestContext, SearchRequest request,
+      SearchResultHandler resultHandler,
+      IntermediateResponseHandler intermediateResponseHandler)
+      throws UnsupportedOperationException;
+}
diff --git a/sdk/src/org/opends/sdk/ServerConnection.java b/sdk/src/org/opends/sdk/ServerConnection.java
index b7c560d..b0cea92 100644
--- a/sdk/src/org/opends/sdk/ServerConnection.java
+++ b/sdk/src/org/opends/sdk/ServerConnection.java
@@ -29,33 +29,27 @@
 
 
 
-import org.opends.sdk.requests.*;
-import org.opends.sdk.responses.BindResult;
-import org.opends.sdk.responses.CompareResult;
-import org.opends.sdk.responses.ExtendedResult;
-import org.opends.sdk.responses.Result;
+import org.opends.sdk.requests.AbandonRequest;
+import org.opends.sdk.requests.UnbindRequest;
 
 
 
 /**
- * A handler interface for processing requests from clients.
+ * A handler interface for interacting with client connections. A
+ * {@code ServerConnection} is associated with a client connection when the
+ * {@link ServerConnectionFactory#handleAccept(Object) handleAccept} method is
+ * invoked against a {@code ServerConnectionFactory}.
  * <p>
- * Implementations should always return results via the provided
- * {@code RequestHandler} when processing requests unless otherwise indicated by
- * the component passing requests to the {@code ServerConnection}. For example,
- * an {@link LDAPListener} does not require {@code ServerConnection}
- * implementations to return results, which may be useful when implementing
- * abandon operation functionality.
- * <p>
- * Note that {@code ServerConnection}s may be stacked, and that a lower
- * {@code ServerConnection} implementation, such as a logger, may require upper
- * {@code ServerConnection} implementations to always return results.
+ * Implementations are responsible for handling connection life-cycle as well as
+ * request life-cycle. In particular, a {@code ServerConnection} is responsible
+ * for processing abandon and unbind requests, as well as extended operations
+ * such as {@code StartTLS} and {@code Cancel} operations.
  *
  * @param <C>
  *          The type of request context.
  * @see ServerConnectionFactory
  */
-public interface ServerConnection<C>
+public interface ServerConnection<C> extends RequestHandler<C>
 {
 
   /**
@@ -74,77 +68,6 @@
 
 
   /**
-   * Invoked when an add request is received from a client.
-   *
-   * @param requestContext
-   *          The request context.
-   * @param request
-   *          The add request.
-   * @param resultHandler
-   *          The handler which should be used to send back the result to the
-   *          client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle add requests.
-   */
-  void handleAdd(C requestContext, AddRequest request,
-      ResultHandler<? super Result> resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
-
-
-
-  /**
-   * Invoked when a bind request is received from a client.
-   *
-   * @param requestContext
-   *          The request context.
-   * @param version
-   *          The protocol version included with the bind request.
-   * @param request
-   *          The bind request.
-   * @param resultHandler
-   *          The handler which should be used to send back the result to the
-   *          client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle bind requests.
-   */
-  void handleBind(C requestContext, int version, BindRequest request,
-      ResultHandler<? super BindResult> resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
-
-
-
-  /**
-   * Invoked when a compare request is received from a client.
-   *
-   * @param requestContext
-   *          The request context.
-   * @param request
-   *          The compare request.
-   * @param resultHandler
-   *          The handler which should be used to send back the result to the
-   *          client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle compare requests.
-   */
-  void handleCompare(C requestContext, CompareRequest request,
-      ResultHandler<? super CompareResult> resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
-
-
-
-  /**
    * Invoked when the client closes the connection, possibly using an unbind
    * request.
    *
@@ -183,120 +106,4 @@
    */
   void handleConnectionError(Throwable error);
 
-
-
-  /**
-   * Invoked when a delete request is received from a client.
-   *
-   * @param requestContext
-   *          The request context.
-   * @param request
-   *          The delete request.
-   * @param resultHandler
-   *          The handler which should be used to send back the result to the
-   *          client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle delete requests.
-   */
-  void handleDelete(C requestContext, DeleteRequest request,
-      ResultHandler<? super Result> resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
-
-
-
-  /**
-   * Invoked when an extended request is received from a client.
-   *
-   * @param <R>
-   *          The type of result returned by the extended request.
-   * @param requestContext
-   *          The request context.
-   * @param request
-   *          The extended request.
-   * @param resultHandler
-   *          The handler which should be used to send back the result to the
-   *          client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle extended requests.
-   */
-  <R extends ExtendedResult> void handleExtendedRequest(C requestContext,
-      ExtendedRequest<R> request, ResultHandler<? super R> resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
-
-
-
-  /**
-   * Invoked when a modify request is received from a client.
-   *
-   * @param requestContext
-   *          The request context.
-   * @param request
-   *          The modify request.
-   * @param resultHandler
-   *          The handler which should be used to send back the result to the
-   *          client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle modify requests.
-   */
-  void handleModify(C requestContext, ModifyRequest request,
-      ResultHandler<? super Result> resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
-
-
-
-  /**
-   * Invoked when a modify DN request is received from a client.
-   *
-   * @param requestContext
-   *          The request context.
-   * @param request
-   *          The modify DN request.
-   * @param resultHandler
-   *          The handler which should be used to send back the result to the
-   *          client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle modify DN requests.
-   */
-  void handleModifyDN(C requestContext, ModifyDNRequest request,
-      ResultHandler<? super Result> resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
-
-
-
-  /**
-   * Invoked when a search request is received from a client.
-   *
-   * @param requestContext
-   *          The request context.
-   * @param request
-   *          The search request.
-   * @param resultHandler
-   *          The handler which should be used to send back the search results
-   *          to the client.
-   * @param intermediateResponseHandler
-   *          The handler which should be used to send back any intermediate
-   *          responses to the client.
-   * @throws UnsupportedOperationException
-   *           If this server connection does not handle search requests.
-   */
-  void handleSearch(C requestContext, SearchRequest request,
-      SearchResultHandler resultHandler,
-      IntermediateResponseHandler intermediateResponseHandler)
-      throws UnsupportedOperationException;
 }
diff --git a/sdk/tests/unit-tests-testng/src/org/opends/sdk/LDAPServer.java b/sdk/tests/unit-tests-testng/src/org/opends/sdk/LDAPServer.java
index a11c5d5..140dab6 100644
--- a/sdk/tests/unit-tests-testng/src/org/opends/sdk/LDAPServer.java
+++ b/sdk/tests/unit-tests-testng/src/org/opends/sdk/LDAPServer.java
@@ -51,7 +51,6 @@
 import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 import com.sun.opends.sdk.controls.AccountUsabilityRequestControl;
 import com.sun.opends.sdk.controls.AccountUsabilityResponseControl;
-import com.sun.opends.sdk.ldap.GrizzlyLDAPListenerOptions;
 
 
 
@@ -758,7 +757,7 @@
 
     transport.setSelectorRunnersCount(2);
     listener = new LDAPListener(port, getInstance(),
-        new GrizzlyLDAPListenerOptions().setTCPNIOTransport(transport)
+        new LDAPListenerOptions().setTCPNIOTransport(transport)
             .setBacklog(4096));
     transport.start();
     isRunning = true;

--
Gitblit v1.10.0