From f134ef63e016bf13b70bef1ec277603b8a9a6f21 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 25 Apr 2012 11:06:50 +0000
Subject: [PATCH] Fix OPENDJ-474: Remove requirement for clients to deal with InterruptedExceptions in synchronous APIs

---
 opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/FixedConnectionPool.java |   82 ++++++++++++++++++-----------------------
 1 files changed, 36 insertions(+), 46 deletions(-)

diff --git a/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/FixedConnectionPool.java b/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/FixedConnectionPool.java
index 04227a7..0dba2fb 100644
--- a/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/FixedConnectionPool.java
+++ b/opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/FixedConnectionPool.java
@@ -28,6 +28,7 @@
 package org.forgerock.opendj.ldap;
 
 import static org.forgerock.opendj.ldap.CoreMessages.ERR_CONNECTION_POOL_CLOSING;
+import static org.forgerock.opendj.ldap.ErrorResultException.newErrorResult;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -122,9 +123,8 @@
      * connections are not actually stored in the internal queue.
      */
     private final class PooledConnection implements Connection {
-        // Connection event listeners registed against this pooled connection
-        // should
-        // have the same life time as the pooled connection.
+        // Connection event listeners registered against this pooled connection
+        // should have the same life time as the pooled connection.
         private final List<ConnectionEventListener> listeners =
                 new CopyOnWriteArrayList<ConnectionEventListener>();
 
@@ -142,19 +142,17 @@
         }
 
         @Override
-        public Result add(final AddRequest request) throws ErrorResultException,
-                InterruptedException {
+        public Result add(final AddRequest request) throws ErrorResultException {
             return checkState().add(request);
         }
 
         @Override
-        public Result add(final Entry entry) throws ErrorResultException, InterruptedException {
+        public Result add(final Entry entry) throws ErrorResultException {
             return checkState().add(entry);
         }
 
         @Override
-        public Result add(final String... ldifLines) throws ErrorResultException,
-                InterruptedException {
+        public Result add(final String... ldifLines) throws ErrorResultException {
             return checkState().add(ldifLines);
         }
 
@@ -176,14 +174,13 @@
         }
 
         @Override
-        public BindResult bind(final BindRequest request) throws ErrorResultException,
-                InterruptedException {
+        public BindResult bind(final BindRequest request) throws ErrorResultException {
             return checkState().bind(request);
         }
 
         @Override
         public BindResult bind(final String name, final char[] password)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().bind(name, password);
         }
 
@@ -209,11 +206,9 @@
                 publishConnection(connection);
             } else {
                 // The connection may have been disconnected by the remote
-                // server, but
-                // the server may still be available. In order to avoid leaving
-                // pending
-                // futures hanging indefinitely, we should try to reconnect
-                // immediately.
+                // server, but the server may still be available. In order to
+                // avoid leaving pending futures hanging indefinitely, we should
+                // try to reconnect immediately.
 
                 // Close the dead connection.
                 connection.close();
@@ -238,14 +233,13 @@
         }
 
         @Override
-        public CompareResult compare(final CompareRequest request) throws ErrorResultException,
-                InterruptedException {
+        public CompareResult compare(final CompareRequest request) throws ErrorResultException {
             return checkState().compare(request);
         }
 
         @Override
         public CompareResult compare(final String name, final String attributeDescription,
-                final String assertionValue) throws ErrorResultException, InterruptedException {
+                final String assertionValue) throws ErrorResultException {
             return checkState().compare(name, attributeDescription, assertionValue);
         }
 
@@ -257,13 +251,12 @@
         }
 
         @Override
-        public Result delete(final DeleteRequest request) throws ErrorResultException,
-                InterruptedException {
+        public Result delete(final DeleteRequest request) throws ErrorResultException {
             return checkState().delete(request);
         }
 
         @Override
-        public Result delete(final String name) throws ErrorResultException, InterruptedException {
+        public Result delete(final String name) throws ErrorResultException {
             return checkState().delete(name);
         }
 
@@ -276,20 +269,19 @@
 
         @Override
         public <R extends ExtendedResult> R extendedRequest(final ExtendedRequest<R> request)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().extendedRequest(request);
         }
 
         @Override
         public <R extends ExtendedResult> R extendedRequest(final ExtendedRequest<R> request,
-                final IntermediateResponseHandler handler) throws ErrorResultException,
-                InterruptedException {
+                final IntermediateResponseHandler handler) throws ErrorResultException {
             return checkState().extendedRequest(request, handler);
         }
 
         @Override
         public GenericExtendedResult extendedRequest(final String requestName,
-                final ByteString requestValue) throws ErrorResultException, InterruptedException {
+                final ByteString requestValue) throws ErrorResultException {
             return checkState().extendedRequest(requestName, requestValue);
         }
 
@@ -319,14 +311,12 @@
         }
 
         @Override
-        public Result modify(final ModifyRequest request) throws ErrorResultException,
-                InterruptedException {
+        public Result modify(final ModifyRequest request) throws ErrorResultException {
             return checkState().modify(request);
         }
 
         @Override
-        public Result modify(final String... ldifLines) throws ErrorResultException,
-                InterruptedException {
+        public Result modify(final String... ldifLines) throws ErrorResultException {
             return checkState().modify(ldifLines);
         }
 
@@ -338,14 +328,12 @@
         }
 
         @Override
-        public Result modifyDN(final ModifyDNRequest request) throws ErrorResultException,
-                InterruptedException {
+        public Result modifyDN(final ModifyDNRequest request) throws ErrorResultException {
             return checkState().modifyDN(request);
         }
 
         @Override
-        public Result modifyDN(final String name, final String newRDN) throws ErrorResultException,
-                InterruptedException {
+        public Result modifyDN(final String name, final String newRDN) throws ErrorResultException {
             return checkState().modifyDN(name, newRDN);
         }
 
@@ -358,13 +346,13 @@
 
         @Override
         public SearchResultEntry readEntry(final DN name, final String... attributeDescriptions)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().readEntry(name, attributeDescriptions);
         }
 
         @Override
         public SearchResultEntry readEntry(final String name, final String... attributeDescriptions)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().readEntry(name, attributeDescriptions);
         }
 
@@ -392,8 +380,7 @@
 
         @Override
         public Result search(final SearchRequest request,
-                final Collection<? super SearchResultEntry> entries) throws ErrorResultException,
-                InterruptedException {
+                final Collection<? super SearchResultEntry> entries) throws ErrorResultException {
             return checkState().search(request, entries);
         }
 
@@ -401,13 +388,13 @@
         public Result search(final SearchRequest request,
                 final Collection<? super SearchResultEntry> entries,
                 final Collection<? super SearchResultReference> references)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().search(request, entries, references);
         }
 
         @Override
         public Result search(final SearchRequest request, final SearchResultHandler handler)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().search(request, handler);
         }
 
@@ -426,14 +413,14 @@
 
         @Override
         public SearchResultEntry searchSingleEntry(final SearchRequest request)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().searchSingleEntry(request);
         }
 
         @Override
         public SearchResultEntry searchSingleEntry(final String baseObject,
                 final SearchScope scope, final String filter, final String... attributeDescriptions)
-                throws ErrorResultException, InterruptedException {
+                throws ErrorResultException {
             return checkState().searchSingleEntry(baseObject, scope, filter, attributeDescriptions);
         }
 
@@ -550,8 +537,7 @@
             isClosed = true;
 
             // Remove any connections which are waiting in the queue as these
-            // can be
-            // closed immediately.
+            // can be closed immediately.
             idleConnections = new LinkedList<Connection>();
             while (!queue.isEmpty() && !queue.getFirst().isWaitingFuture()) {
                 final QueueElement holder = queue.removeFirst();
@@ -575,8 +561,12 @@
      * {@inheritDoc}
      */
     @Override
-    public Connection getConnection() throws ErrorResultException, InterruptedException {
-        return getConnectionAsync(null).get();
+    public Connection getConnection() throws ErrorResultException {
+        try {
+            return getConnectionAsync(null).get();
+        } catch (InterruptedException e) {
+            throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED, e);
+        }
     }
 
     /**

--
Gitblit v1.10.0