From 72650d4cc41c64136d064967d7fec3726d850fee Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Thu, 14 Oct 2010 11:52:28 +0000
Subject: [PATCH] Multiple enhancements and bug fixes to the SDK (update from OpenDS by matthew_swift):

---
 sdk/src/org/opends/sdk/Connections.java |  160 ++++++++++++++++++++++++++++++-----------------------
 1 files changed, 91 insertions(+), 69 deletions(-)

diff --git a/sdk/src/org/opends/sdk/Connections.java b/sdk/src/org/opends/sdk/Connections.java
index 9d9fec6..74813f0 100644
--- a/sdk/src/org/opends/sdk/Connections.java
+++ b/sdk/src/org/opends/sdk/Connections.java
@@ -22,14 +22,13 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2009 Sun Microsystems, Inc.
+ *      Copyright 2009-2010 Sun Microsystems, Inc.
  */
 
 package org.opends.sdk;
 
 
 
-import java.util.Collection;
 import java.util.concurrent.TimeUnit;
 
 import org.opends.sdk.requests.BindRequest;
@@ -104,69 +103,6 @@
 
 
   /**
-   * Creates a new connection factory providing fault tolerance across multiple
-   * underlying connection factories.
-   * <p>
-   * The returned fail-over connection factory forwards connection requests to
-   * one of the provided connection factories. If the request fails for some
-   * reason (for example, due to network failure), then the fail-over connection
-   * factory switches to another connection faction, repeating the process until
-   * the connection request succeeds, or until all the connection factories are
-   * determined to be unavailable, in which case the connection request will
-   * fail.
-   * <p>
-   * The implementation periodically attempts to connect to failed connection
-   * factories in order to determine if they have become available again.
-   *
-   * @param factories
-   *          The connection factories which will be used for fail-over.
-   * @return The new fail-over connection factory.
-   * @throws NullPointerException
-   *           If {@code factories} was {@code null}.
-   */
-  public static ConnectionFactory newFailoverConnectionFactory(
-      final Collection<ConnectionFactory> factories)
-      throws NullPointerException
-  {
-    final FailoverLoadBalancingAlgorithm algorithm = new FailoverLoadBalancingAlgorithm(
-        factories);
-    return new LoadBalancingConnectionFactory(algorithm);
-  }
-
-
-
-  /**
-   * Creates a new connection factory providing fault tolerance across multiple
-   * underlying connection factories.
-   * <p>
-   * The returned fail-over connection factory forwards connection requests to
-   * one of the provided connection factories. If the request fails for some
-   * reason (for example, due to network failure), then the fail-over connection
-   * factory switches to another connection faction, repeating the process until
-   * the connection request succeeds, or until all the connection factories are
-   * determined to be unavailable, in which case the connection request will
-   * fail.
-   * <p>
-   * The implementation periodically attempts to connect to failed connection
-   * factories in order to determine if they have become available again.
-   *
-   * @param factories
-   *          The connection factories which will be used for fail-over.
-   * @return The new fail-over connection factory.
-   * @throws NullPointerException
-   *           If {@code factories} was {@code null}.
-   */
-  public static ConnectionFactory newFailoverConnectionFactory(
-      final ConnectionFactory... factories) throws NullPointerException
-  {
-    final FailoverLoadBalancingAlgorithm algorithm = new FailoverLoadBalancingAlgorithm(
-        factories);
-    return new LoadBalancingConnectionFactory(algorithm);
-  }
-
-
-
-  /**
    * Creates a new connection factory which will create connections using the
    * provided connection factory and periodically probe any created connections
    * in order to detect that they are still alive.
@@ -230,10 +166,21 @@
 
 
   /**
-   * Creates a new connection factory which will create internal connections
-   * using the provided server connection factory. The server connection will be
-   * provided with request context whose value is unique integer associated with
-   * the request.
+   * Creates a new connection factory which binds internal client connections to
+   * {@link ServerConnection}s created using the provided
+   * {@link ServerConnectionFactory}.
+   * <p>
+   * When processing requests, {@code ServerConnection} implementations are
+   * passed an integer as the first parameter. This integer represents a pseudo
+   * {@code requestID} which is incremented for each successive internal request
+   * on a per client connection basis. The request ID may be useful for logging
+   * purposes.
+   * <p>
+   * An internal connection factory does not require {@code ServerConnection}
+   * implementations to return a result when processing requests. However, it is
+   * recommended that implementations do always return results even for
+   * abandoned requests. This is because application client threads may block
+   * indefinitely waiting for results.
    *
    * @param <C>
    *          The type of client context.
@@ -255,6 +202,81 @@
 
 
 
+  /**
+   * Creates a new load balancer which will obtain connections using the
+   * provided load balancing algorithm.
+   *
+   * @param algorithm
+   *          The load balancing algorithm which will be used to obtain the next
+   * @return The new load balancer.
+   * @throws NullPointerException
+   *           If {@code algorithm} was {@code null}.
+   */
+  public static ConnectionFactory newLoadBalancer(
+      final LoadBalancingAlgorithm algorithm) throws NullPointerException
+  {
+    return new LoadBalancer(algorithm);
+  }
+
+
+
+  /**
+   * Creates a new connection factory which forwards connection requests to the
+   * provided factory, but whose {@code toString} method will always return
+   * {@code name}.
+   * <p>
+   * This method may be useful for debugging purposes in order to more easily
+   * identity connection factories.
+   *
+   * @param factory
+   *          The connection factory to be named.
+   * @param name
+   *          The name of the connection factory.
+   * @return The named connection factory.
+   * @throws NullPointerException
+   *           If {@code factory} or {@code name} was {@code null}.
+   */
+  public static ConnectionFactory newNamedConnectionFactory(
+      final ConnectionFactory factory, final String name)
+      throws NullPointerException
+  {
+    Validator.ensureNotNull(factory, name);
+
+    return new ConnectionFactory()
+    {
+
+      @Override
+      public FutureResult<AsynchronousConnection> getAsynchronousConnection(
+          final ResultHandler<? super AsynchronousConnection> handler)
+      {
+        return factory.getAsynchronousConnection(handler);
+      }
+
+
+
+      @Override
+      public Connection getConnection() throws ErrorResultException,
+          InterruptedException
+      {
+        return factory.getConnection();
+      }
+
+
+
+      /**
+       * {@inheritDoc}
+       */
+      @Override
+      public String toString()
+      {
+        return name;
+      }
+
+    };
+  }
+
+
+
   // Prevent instantiation.
   private Connections()
   {

--
Gitblit v1.10.0