You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ad...@apache.org on 2010/03/18 20:38:29 UTC

svn commit: r924964 - in /mina/sandbox/adc/ahc: ./ api/src/main/java/org/apache/ahc/api/ api/src/main/java/org/apache/ahc/api/listeners/ api/src/test/java/org/apache/ahc/api/ mina2/src/main/java/org/apache/ahc/mina2/ mina2/src/test/java/org/apache/ahc/...

Author: adc
Date: Thu Mar 18 19:38:28 2010
New Revision: 924964

URL: http://svn.apache.org/viewvc?rev=924964&view=rev
Log:
Test cleanup and removed a very bad idea

Added:
    mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java   (with props)
Removed:
    mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/listeners/ChangeListener.java
    mina/sandbox/adc/ahc/mina2/src/test/java/org/apache/ahc/api/
    mina/sandbox/adc/ahc/mina3/src/test/java/org/apache/ahc/api/
Modified:
    mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureImpl.java
    mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpConnection.java
    mina/sandbox/adc/ahc/api/src/test/java/org/apache/ahc/api/ClientTest.java
    mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpClientFutureException.java
    mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpConnection.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java
    mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java
    mina/sandbox/adc/ahc/pom.xml

Modified: mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureImpl.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureImpl.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureImpl.java (original)
+++ mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureImpl.java Thu Mar 18 19:38:28 2010
@@ -26,8 +26,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.apache.ahc.api.listeners.ChangeListener;
-
 
 /**
  * @version $Revision$ $Date: $
@@ -37,53 +35,48 @@ public class HttpClientFutureImpl<V> imp
     private final CountDownLatch latch = new CountDownLatch(1);
     private final List<FutureListener<V>> listeners = new ArrayList<FutureListener<V>>();
     private final AtomicReference<Object> result = new AtomicReference<Object>();
-    private final FutureResultOwner<V> owner;
+    private final FutureResultOwner owner;
     private volatile boolean canceled;
 
-    public HttpClientFutureImpl(FutureResultOwner<V> owner)
+    public HttpClientFutureImpl(FutureResultOwner owner)
     {
         this.owner = owner;
+    }
 
-        owner.set(new ChangeListener<V>()
+    public void exception(Throwable t)
+    {
+        assert !isDone();
+
+        synchronized (latch)
         {
-            public void exception(Throwable t)
-            {
-                assert !isDone();
+            result.set(t);
+            latch.countDown();
+        }
 
-                synchronized (latch)
-                {
-                    result.set(t);
-                    latch.countDown();
-                }
-
-                for (FutureListener<V> listener : listeners)
-                {
-                    listener.exception(t);
-                }
+        for (FutureListener<V> listener : listeners)
+        {
+            listener.exception(t);
+        }
 
-                listeners.clear();
-                HttpClientFutureImpl.this.owner.set(null);
-            }
+        listeners.clear();
+    }
 
-            public void set(V value)
-            {
-                assert !isDone();
+    public void set(V value)
+    {
+        assert !isDone();
+
+        synchronized (latch)
+        {
+            result.set(value);
+            latch.countDown();
+        }
 
-                synchronized (latch)
-                {
-                    result.set(value);
-                    latch.countDown();
-                }
-
-                for (FutureListener<V> listener : listeners)
-                {
-                    listener.completed(value);
-                }
+        for (FutureListener<V> listener : listeners)
+        {
+            listener.completed(value);
+        }
 
-                listeners.clear();
-                HttpClientFutureImpl.this.owner.set(null);
-            }
-        });
+        listeners.clear();
     }
 
     @SuppressWarnings({"unchecked"})
@@ -114,11 +107,6 @@ public class HttpClientFutureImpl<V> imp
         return this;
     }
 
-    protected FutureResultOwner<V> getOwner()
-    {
-        return owner;
-    }
-
     public boolean cancel(boolean mayInterruptIfRunning)
     {
         synchronized (latch)
@@ -173,38 +161,8 @@ public class HttpClientFutureImpl<V> imp
         }
     }
 
-    public interface FutureResultOwner<V>
+    public interface FutureResultOwner
     {
-        void set(ChangeListener<V> listener);
-
         boolean cancel(boolean mayInterruptIfRunning);
     }
-
-    public static class ChangeListenerCoordinator<V> implements FutureResultOwner<V>
-    {
-        private ChangeListener<V> listener;
-        private FutureResultOwner<V> owner;
-
-        public void set(ChangeListener<V> listener)
-        {
-            if (this.listener != null) throw new IllegalStateException("Listener already set");
-            this.listener = listener;
-        }
-
-        public boolean cancel(boolean mayInterruptIfRunning)
-        {
-            return owner != null && owner.cancel(mayInterruptIfRunning);
-        }
-
-        public ChangeListener<V> getListener()
-        {
-            return listener;
-        }
-
-        public void setOwner(FutureResultOwner<V> owner)
-        {
-            if (this.owner != null) throw new IllegalStateException("Owner already set");
-            this.owner = owner;
-        }
-    }
 }

Added: mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java?rev=924964&view=auto
==============================================================================
--- mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java (added)
+++ mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java Thu Mar 18 19:38:28 2010
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ahc.api;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+
+/**
+ * Instances of this class are used to protect implementations of
+ * <code>HttpClientFuture<V></code>.
+ *
+ * @version $Revision$ $Date$
+ */
+public class HttpClientFutureWrapper<V> implements HttpClientFuture<V>
+{
+    private final HttpClientFuture<V> delegate;
+
+    public HttpClientFutureWrapper(HttpClientFuture<V> delegate)
+    {
+        if (delegate == null) throw new IllegalArgumentException("Delegate cannot be null");
+        this.delegate = delegate;
+    }
+
+    public HttpClientFuture<V> register(FutureListener<V> vFutureListener) { return delegate.register(vFutureListener); }
+
+    public boolean cancel(boolean mayInterruptIfRunning) { return delegate.cancel(mayInterruptIfRunning); }
+
+    public boolean isCancelled() { return delegate.isCancelled(); }
+
+    public boolean isDone() { return delegate.isDone(); }
+
+    public V get() throws InterruptedException, ExecutionException { return delegate.get(); }
+
+    public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return delegate.get(timeout, unit); }
+}

Propchange: mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Id Author

Propchange: mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpClientFutureWrapper.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpConnection.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpConnection.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpConnection.java (original)
+++ mina/sandbox/adc/ahc/api/src/main/java/org/apache/ahc/api/HttpConnection.java Thu Mar 18 19:38:28 2010
@@ -25,11 +25,11 @@ public interface HttpConnection extends 
 {
     HttpClient getClient();
 
-    HttpConnection equipWith(HttpConfig config);
+    HttpConnection addConfig(HttpConfig config);
 
-    HttpConnection equipWith(HttpListener listener);
+    HttpConnection addListener(HttpListener listener);
 
-    HttpConnection equipWith(String key, Object value);
+    HttpConnection addPair(String key, Object value);
 
     HttpConnection push();
 

Modified: mina/sandbox/adc/ahc/api/src/test/java/org/apache/ahc/api/ClientTest.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/api/src/test/java/org/apache/ahc/api/ClientTest.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/api/src/test/java/org/apache/ahc/api/ClientTest.java (original)
+++ mina/sandbox/adc/ahc/api/src/test/java/org/apache/ahc/api/ClientTest.java Thu Mar 18 19:38:28 2010
@@ -26,20 +26,28 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.security.SecureRandom;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
-import com.acme.ahc.AcmeHttpClient;
-import com.acme.ahc.AcmeHttpRequest;
+import org.apache.ahc.api.listeners.MimeContentListener;
+
 import com.acme.ahc.AcmeMockHandle;
 import com.acme.ahc.listeners.AcmeSslBenchmarkListener;
 import com.acme.ahc.listeners.AcmeSslCertificatManager;
-import org.apache.ahc.api.listeners.MimeContentListener;
 import org.junit.Test;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 
 /**
  * @version $Revision$ $Date: $
@@ -47,21 +55,40 @@ import org.junit.Test;
 public class ClientTest
 {
     @Test
-    void testBatch() throws Exception
+    @SuppressWarnings({"unchecked"})
+    public void testBatch() throws Exception
     {
-        HttpClient client = new AcmeHttpClient();
+        AcmeMockHandle handle = new AcmeMockHandle();
+        HttpClient client = mock(HttpClient.class);
+        HttpBatch batch = mock(HttpBatch.class);
+        HttpBatchFuture future = mock(HttpBatchFuture.class);
+        HttpResponse response = mock(HttpResponse.class);
+
+        when(client.batch(50, TimeUnit.MILLISECONDS)).thenReturn(batch);
+        when(batch.get(anyString())).thenReturn(batch);
+        when(batch.post(anyString(), any(Map.class))).thenReturn(batch);
+        when(batch.push()).thenReturn(batch);
+        when(batch.pop()).thenReturn(batch);
+        when(batch.addListener(any(HttpListener.class))).thenReturn(batch);
+        when(batch.addPair(anyString(), anyObject())).thenReturn(batch);
+        when(batch.submit()).thenReturn(future);
+        when(response.getEquip("OBJECT_HANDLE")).thenReturn(handle);
+
+        when(future.get()).thenReturn(Collections.<HttpResponse>singletonList(response));
+
         client.equipWith(new AcmeSslCertificatManager());
         client.equipWith("CLIENT_ID", "92341");
 
         Map<String, String> map = new HashMap<String, String>();
-        HttpBatchFuture future = client
+
+        HttpBatchFuture batchFuture = client
                 .batch(50, TimeUnit.MILLISECONDS)
 
                 .get("http://rest.acme.com/rest/student/324525?token=dFWEGV8ss63dmcs0245c")
 
                 .push()
                 .addListener(new AcmeSslBenchmarkListener())
-                .addPair("OBJECT_HANDLE", new AcmeMockHandle())
+                .addPair("OBJECT_HANDLE", handle)
                 .get("https://rest.acme.com/rest/student/5246?token=dFWEGV8ss63dmcs0245c")
                 .pop()
 
@@ -73,19 +100,26 @@ public class ClientTest
 
                 .submit();
 
-        List<HttpResponse> responses = future.get();
-        for (HttpResponse response : responses)
+        List<HttpResponse> responses = batchFuture.get();
+        for (HttpResponse hr : responses)
         {
-            AcmeMockHandle handle = (AcmeMockHandle)response.getEquip("OBJECT_HANDLE");
+            assertSame(handle, hr.getEquip("OBJECT_HANDLE"));
         }
     }
 
     @Test
-    void testSend() throws Exception
+    @SuppressWarnings({"unchecked"})
+    public void testSend() throws Exception
     {
-        HttpClient client = new AcmeHttpClient();
+        HttpClient client = mock(HttpClient.class);
+        HttpClientFuture<HttpResponse> future = mock(HttpClientFuture.class);
+        HttpResponse response = mock(HttpResponse.class);
+
+        when(client.get(anyString())).thenReturn(future);
+        when(future.register(any(FutureListener.class))).thenReturn(future);
+        when(future.get()).thenReturn(response);
 
-        HttpResponse response = client.get("http://rest.acme.com/rest/student/41134?token=dFWEGV8ss63dmcs0245c")
+        HttpResponse hr = client.get("http://rest.acme.com/rest/student/41134?token=dFWEGV8ss63dmcs0245c")
                 .register(new FutureListener<HttpResponse>()
                 {
                     public void exception(Throwable t)
@@ -99,28 +133,46 @@ public class ClientTest
                     }
                 })
                 .get();
+
+        assertNotNull(hr);
     }
 
     @Test
-    void testSendMultipleAttachments() throws Exception
+    @SuppressWarnings({"unchecked"})
+    public void testSendMultipleAttachments() throws Exception
     {
-        HttpClient client = new AcmeHttpClient();
-
-        HttpRequest request = new AcmeHttpRequest();
+        HttpRequest request = mock(HttpRequest.class);
+        HttpClient client = mock(HttpClient.class);
+        HttpClientFuture<HttpResponse> future = mock(HttpClientFuture.class);
+        HttpResponse response = mock(HttpResponse.class);
+
+        when(request.setUrl(any(URL.class))).thenReturn(request);
+        when(request.addMimeContent(any(MimeContent.class))).thenReturn(request);
+        when(request.addMimeContent(any(MimeContent.class), any(MimeContent.class))).thenReturn(request);
+        when(client.send(any(HttpRequest.class))).thenReturn(future);
+        when(future.get()).thenReturn(response);
 
         request.setUrl(new URL("http://rest.acme.com/rest/student/41134?token=dFWEGV8ss63dmcs0245"))
                 .addMimeContent(generateXml())
                 .addMimeContent(generateDmg(), generateRandom());
 
-        HttpResponse response = client.send(request).get();
+        HttpResponse hr = client.send(request).get();
+
+        assertNotNull(hr);
     }
 
     @Test
-    void testReceiveMultipleAttachments() throws Exception
+    public void testReceiveMultipleAttachments() throws Exception
     {
-        HttpClient client = new AcmeHttpClient();
-
-        HttpRequest request = new AcmeHttpRequest();
+        HttpClient client = mock(HttpClient.class);
+        HttpRequest request = mock(HttpRequest.class);
+        HttpClientFuture<HttpResponse> future = mock(HttpClientFuture.class);
+        HttpResponse response = mock(HttpResponse.class);
+
+        when(request.setUrl(any(URL.class))).thenReturn(request);
+        when(request.addMimeContentListener(any(MimeContentListener.class))).thenReturn(request);
+        when(client.send(any(HttpRequest.class))).thenReturn(future);
+        when(future.get()).thenReturn(response);
 
         request.setUrl(new URL("http://rest.acme.com/rest/student/41134?token=dFWEGV8ss63dmcs0245"))
                 .addMimeContentListener(new MimeContentListener()
@@ -131,7 +183,9 @@ public class ClientTest
                     }
                 });
 
-        HttpResponse response = client.send(request).get();
+        HttpResponse hr = client.send(request).get();
+
+        assertNotNull(hr);
     }
 
     private MimeContent generateXml()

Modified: mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpClientFutureException.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpClientFutureException.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpClientFutureException.java (original)
+++ mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpClientFutureException.java Thu Mar 18 19:38:28 2010
@@ -29,7 +29,14 @@ public class AsyncHttpClientFutureExcept
 {
     public AsyncHttpClientFutureException(Throwable t)
     {
-        super(new HttpClientFutureImpl.ChangeListenerCoordinator<HttpResponse>());
-        ((HttpClientFutureImpl.ChangeListenerCoordinator<HttpResponse>)getOwner()).getListener().exception(t);
+        super(new FutureResultOwner()
+        {
+            public boolean cancel(boolean mayInterruptIfRunning)
+            {
+                return false;
+            }
+        });
+
+        exception(t);
     }
 }

Modified: mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpConnection.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpConnection.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpConnection.java (original)
+++ mina/sandbox/adc/ahc/mina2/src/main/java/org/apache/ahc/mina2/AsyncHttpConnection.java Thu Mar 18 19:38:28 2010
@@ -28,7 +28,6 @@ import org.apache.ahc.api.HttpConnection
 import org.apache.ahc.api.HttpListener;
 import org.apache.ahc.api.HttpRequest;
 import org.apache.ahc.api.HttpResponse;
-import org.apache.ahc.api.listeners.ChangeListener;
 import org.apache.ahc.mina2.api.IoSessionCache;
 import org.apache.ahc.mina2.api.SessionConfigListener;
 import org.apache.mina.core.future.ConnectFuture;
@@ -64,21 +63,21 @@ public class AsyncHttpConnection impleme
         return stack.get(key);
     }
 
-    public HttpConnection equipWith(HttpConfig config)
+    public HttpConnection addConfig(HttpConfig config)
     {
         stack.equipWith(config);
 
         return this;
     }
 
-    public HttpConnection equipWith(HttpListener listener)
+    public HttpConnection addListener(HttpListener listener)
     {
         stack.equipWith(listener);
 
         return this;
     }
 
-    public HttpConnection equipWith(String key, Object value)
+    public HttpConnection addPair(String key, Object value)
     {
         stack.equipWith(key, value);
 
@@ -114,10 +113,9 @@ public class AsyncHttpConnection impleme
                 ConnectFuture future = new DefaultConnectFuture();
                 future.setSession(session);
 
-                return new HttpClientFutureImpl<HttpResponse>(new HttpClientFutureImpl.FutureResultOwner<HttpResponse>()
+                return new HttpClientFutureImpl<HttpResponse>(new HttpClientFutureImpl.FutureResultOwner()
                 {
                     EquipmentStack e = new EquipmentStack(stack);
-                    ChangeListener<HttpResponse> changeListener;
 
                     {
                         ConnectFuture future = connector.connect();
@@ -183,11 +181,6 @@ public class AsyncHttpConnection impleme
                         });
                     }
 
-                    public void set(ChangeListener<HttpResponse> changeListener)
-                    {
-                        this.changeListener = changeListener;
-                    }
-
                     public boolean cancel(boolean mayInterruptIfRunning)
                     {
                         return false;  //Todo change body of implemented methods use File | Settings | File Templates.

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpClientFutureException.java Thu Mar 18 19:38:28 2010
@@ -29,7 +29,14 @@ public class AsyncHttpClientFutureExcept
 {
     public AsyncHttpClientFutureException(Throwable t)
     {
-        super(new HttpClientFutureImpl.ChangeListenerCoordinator<HttpResponse>());
-        ((HttpClientFutureImpl.ChangeListenerCoordinator<HttpResponse>)getOwner()).getListener().exception(t);
+        super(new FutureResultOwner()
+        {
+            public boolean cancel(boolean mayInterruptIfRunning)
+            {
+                return false;
+            }
+        });
+
+        exception(t);
     }
 }

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/ahc/mina3/AsyncHttpConnection.java Thu Mar 18 19:38:28 2010
@@ -25,13 +25,14 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.ahc.api.HttpClient;
 import org.apache.ahc.api.HttpClientFuture;
 import org.apache.ahc.api.HttpClientFutureImpl;
+import org.apache.ahc.api.HttpClientFutureWrapper;
 import org.apache.ahc.api.HttpConfig;
 import org.apache.ahc.api.HttpConnection;
 import org.apache.ahc.api.HttpListener;
 import org.apache.ahc.api.HttpRequest;
 import org.apache.ahc.api.HttpResponse;
-import org.apache.ahc.api.listeners.ChangeListener;
 import org.apache.ahc.mina3.api.IoSessionCache;
+
 import org.apache.mina.core.IoConnector;
 import org.apache.mina.core.IoFuture;
 import org.apache.mina.core.IoFutureListener;
@@ -63,21 +64,21 @@ public class AsyncHttpConnection impleme
         return stack.get(key);
     }
 
-    public HttpConnection equipWith(HttpConfig config)
+    public HttpConnection addConfig(HttpConfig config)
     {
         stack.addConfig(config);
 
         return this;
     }
 
-    public HttpConnection equipWith(HttpListener listener)
+    public HttpConnection addListener(HttpListener listener)
     {
         stack.addListener(listener);
 
         return this;
     }
 
-    public HttpConnection equipWith(String key, Object value)
+    public HttpConnection addPair(String key, Object value)
     {
         stack.addPair(key, value);
 
@@ -112,36 +113,31 @@ public class AsyncHttpConnection impleme
                 IoSessionCache cache = request.getConfig(IoSessionCache.class);
                 IoConnector connector = (IoConnector)request.getValue(IoConnector.class.getName());
 
-                final AtomicReference<ChangeListener<HttpResponse>> listenerReference = new AtomicReference<ChangeListener<HttpResponse>>();
-                IoSession session = cache.getIoSession(connector, address);
-
-                final IoFuture<HttpResponse> future = session.<HttpResponse>send(request).register(new IoFutureListener<HttpResponse>()
+                final AtomicReference<IoFuture<HttpResponse>> ioFutureAtomicReference = new AtomicReference<IoFuture<HttpResponse>>();
+                final HttpClientFutureImpl<HttpResponse> future = new HttpClientFutureImpl<HttpResponse>(new HttpClientFutureImpl.FutureResultOwner()
                 {
-                    public void exception(Throwable t)
-                    {
-                        listenerReference.get().exception(t);
-                    }
-
-                    public void completed(HttpResponse result)
+                    public boolean cancel(boolean mayInterruptIfRunning)
                     {
-                        listenerReference.get().set(result);
+                        return ioFutureAtomicReference.get().cancel(mayInterruptIfRunning);
                     }
                 });
 
-                HttpClientFutureImpl.FutureResultOwner<HttpResponse> owner = new HttpClientFutureImpl.FutureResultOwner<HttpResponse>()
+                IoSession session = cache.getIoSession(connector, address);
+
+                ioFutureAtomicReference.set(session.<HttpResponse>send(request).register(new IoFutureListener<HttpResponse>()
                 {
-                    public void set(ChangeListener<HttpResponse> listener)
+                    public void exception(Throwable t)
                     {
-                        listenerReference.set(listener);
+                        future.exception(t);
                     }
 
-                    public boolean cancel(boolean mayInterruptIfRunning)
+                    public void completed(HttpResponse result)
                     {
-                        return future.cancel(mayInterruptIfRunning);
+                        future.set(result);
                     }
-                };
+                }));
 
-                return new HttpClientFutureImpl<HttpResponse>(owner);
+                return new HttpClientFutureWrapper<HttpResponse>(future);
             }
         }
         catch (Throwable throwable)

Modified: mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java (original)
+++ mina/sandbox/adc/ahc/mina3/src/main/java/org/apache/mina/ssl/SslChannel.java Thu Mar 18 19:38:28 2010
@@ -38,7 +38,6 @@ public class SslChannel extends StateMac
 {
     private SslConfig sslConfig;
     private IoByteBufferFactory factory;
-    private ByteBuffer byteBuffer;
     private SSLEngine engine;
 
     public SslChannel()
@@ -74,14 +73,12 @@ public class SslChannel extends StateMac
 
         engine.beginHandshake();
 
-        byteBuffer = factory.allocate(engine.getSession().getPacketBufferSize()).get();
-
         setState(SslStates.HANDSHAKE);
 
         if (!sslConfig.isLazyHandshake())
         {
             HandshakeChannelState state = (HandshakeChannelState) getStates().get(SslStates.HANDSHAKE).get(0);
-            state.setByteBuffer(byteBuffer);
+            state.setFactory(factory);
             state.setEngine(engine);
 
             IoBuffer message = (IoBuffer) state.send(this, IoBuffer.EMPTY);
@@ -97,12 +94,6 @@ public class SslChannel extends StateMac
         engine.closeOutbound();
     }
 
-    @IoProperty(name = "byteBuffer", scope = IoPropertyScope.SESSION)
-    public ByteBuffer getByteBuffer()
-    {
-        return byteBuffer;
-    }
-
     @IoProperty(name = "engine", scope = IoPropertyScope.SESSION)
     public SSLEngine getEngine()
     {

Modified: mina/sandbox/adc/ahc/pom.xml
URL: http://svn.apache.org/viewvc/mina/sandbox/adc/ahc/pom.xml?rev=924964&r1=924963&r2=924964&view=diff
==============================================================================
--- mina/sandbox/adc/ahc/pom.xml (original)
+++ mina/sandbox/adc/ahc/pom.xml Thu Mar 18 19:38:28 2010
@@ -68,6 +68,13 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+            <version>1.8.2</version>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
     <dependencyManagement>