Author: olamy
Date: Fri Apr 27 12:57:08 2012
New Revision: 1331405

URL: http://svn.apache.org/viewvc?rev=1331405&view=rev
Log:
add a http client implementation based on asynchttpclient

Added:
    
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/
    
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/AsyncHttpClientDirectMemoryHttpClient.java
   (with props)
    
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryDeleteHandler.java
   (with props)
    
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryGetHandler.java
   (with props)
    
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryPutHandler.java
   (with props)
    
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AsyncHttpClientTest.java
   (with props)
Modified:
    incubator/directmemory/trunk/server/directmemory-server-client/pom.xml
    
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/AbstractDirectMemoryHttpClient.java
    
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryClientConfiguration.java
    incubator/directmemory/trunk/server/directmemory-server/pom.xml
    
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AbstractServletWithClientTest.java
    
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientBinaryTypeTest.java
    
incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml

Modified: incubator/directmemory/trunk/server/directmemory-server-client/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/pom.xml?rev=1331405&r1=1331404&r2=1331405&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-client/pom.xml 
(original)
+++ incubator/directmemory/trunk/server/directmemory-server-client/pom.xml Fri 
Apr 27 12:57:08 2012
@@ -69,6 +69,13 @@
       </exclusions>
     </dependency>
 
+    <dependency>
+      <groupId>com.ning</groupId>
+      <artifactId>async-http-client</artifactId>
+      <version>1.7.4</version>
+      <optional>true</optional>
+    </dependency>
+
 
   </dependencies>
 

Modified: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/AbstractDirectMemoryHttpClient.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/AbstractDirectMemoryHttpClient.java?rev=1331405&r1=1331404&r2=1331405&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/AbstractDirectMemoryHttpClient.java
 (original)
+++ 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/AbstractDirectMemoryHttpClient.java
 Fri Apr 27 12:57:08 2012
@@ -41,7 +41,6 @@ public abstract class AbstractDirectMemo
 
     private DirectMemoryWriter writer = DirectMemoryWriter.instance();
 
-    private DirectMemoryParser parser = DirectMemoryParser.instance();
 
     protected DirectMemoryClientConfiguration configuration;
 
@@ -75,14 +74,14 @@ public abstract class AbstractDirectMemo
         }
     }
 
-    protected DirectMemoryResponse buildResponse( InputStream inputStream, 
DirectMemoryRequest request )
+    public static DirectMemoryResponse buildResponse( InputStream inputStream, 
DirectMemoryRequest request )
         throws DirectMemoryException
     {
 
         switch ( request.getExchangeType() )
         {
             case JSON:
-                return parser.buildResponse( inputStream );
+                return DirectMemoryParser.instance().buildResponse( 
inputStream );
             case JAVA_SERIALIZED_OBJECT:
                 try
                 {
@@ -120,7 +119,8 @@ public abstract class AbstractDirectMemo
                     throw new DirectMemoryException( e.getMessage(), e );
                 }
             default:
-                log.error( "exchange type unknown {}", 
request.getExchangeType() );
+                LoggerFactory.getLogger( AbstractDirectMemoryHttpClient.class 
).error( "exchange type unknown {}",
+                                                                               
        request.getExchangeType() );
                 throw new DirectMemoryException( "exchange type unknown " + 
request.getExchangeType() );
         }
 

Modified: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryClientConfiguration.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryClientConfiguration.java?rev=1331405&r1=1331404&r2=1331405&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryClientConfiguration.java
 (original)
+++ 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryClientConfiguration.java
 Fri Apr 27 12:57:08 2012
@@ -164,9 +164,10 @@ public class DirectMemoryClientConfigura
         return httpClientClassName;
     }
 
-    public void setHttpClientClassName( String httpClientClassName )
+    public DirectMemoryClientConfiguration setHttpClientClassName( String 
httpClientClassName )
     {
         this.httpClientClassName = httpClientClassName;
+        return this;
     }
 
     @Override

Added: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/AsyncHttpClientDirectMemoryHttpClient.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/AsyncHttpClientDirectMemoryHttpClient.java?rev=1331405&view=auto
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/AsyncHttpClientDirectMemoryHttpClient.java
 (added)
+++ 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/AsyncHttpClientDirectMemoryHttpClient.java
 Fri Apr 27 12:57:08 2012
@@ -0,0 +1,236 @@
+package org.apache.directmemory.server.client.providers.asynchttpclient;
+/*
+ * 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.
+ */
+
+import com.ning.http.client.AsyncHttpClient;
+import com.ning.http.client.AsyncHttpClientConfig;
+import com.ning.http.client.ListenableFuture;
+import com.ning.http.client.providers.netty.NettyAsyncHttpProvider;
+import org.apache.directmemory.server.client.AbstractDirectMemoryHttpClient;
+import org.apache.directmemory.server.client.DirectMemoryClientConfiguration;
+import org.apache.directmemory.server.client.DirectMemoryHttpClient;
+import org.apache.directmemory.server.commons.DirectMemoryException;
+import org.apache.directmemory.server.commons.DirectMemoryHttpConstants;
+import org.apache.directmemory.server.commons.DirectMemoryRequest;
+import org.apache.directmemory.server.commons.DirectMemoryResponse;
+import org.apache.directmemory.server.commons.ExchangeType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * @author Olivier Lamy
+ */
+public class AsyncHttpClientDirectMemoryHttpClient
+    extends AbstractDirectMemoryHttpClient
+    implements DirectMemoryHttpClient
+{
+    private Logger log = LoggerFactory.getLogger( getClass() );
+
+    private AsyncHttpClient asyncHttpClient;
+
+    public AsyncHttpClientDirectMemoryHttpClient( 
DirectMemoryClientConfiguration configuration )
+    {
+        super( configuration );
+        // String providerClass, AsyncHttpClientConfig config
+        AsyncHttpClientConfig.Builder builder = new 
AsyncHttpClientConfig.Builder();
+        builder.setConnectionTimeoutInMs( (int) 
configuration.getConnectionTimeOut() );
+        builder.setMaximumConnectionsTotal( 
configuration.getMaxConcurentConnections() );
+
+        asyncHttpClient = new AsyncHttpClient( 
NettyAsyncHttpProvider.class.getName(), builder.build() );
+
+    }
+
+    @Override
+    public DirectMemoryResponse put( DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+
+        try
+        {
+            return internalPut( request ).get( configuration.getReadTimeOut(), 
TimeUnit.MILLISECONDS );
+        }
+        catch ( InterruptedException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+        catch ( TimeoutException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+        catch ( ExecutionException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+
+    }
+
+    @Override
+    public Future<DirectMemoryResponse> asyncPut( DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+        return internalPut( request );
+
+    }
+
+    public ListenableFuture<DirectMemoryResponse> internalPut( 
DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+        String uri = buildRequestWithKey( request );
+        log.debug( "put request to: {}", uri );
+        AsyncHttpClient.BoundRequestBuilder requestBuilder = 
this.asyncHttpClient.preparePut( uri );
+        requestBuilder.addHeader( "Content-Type", getRequestContentType( 
request ) );
+
+        if ( request.getExpiresIn() > 0 )
+        {
+            requestBuilder.addHeader( 
DirectMemoryHttpConstants.EXPIRES_IN_HTTP_HEADER,
+                                      Integer.toString( request.getExpiresIn() 
) );
+        }
+
+        if ( request.getExchangeType() == ExchangeType.TEXT_PLAIN )
+        {
+            requestBuilder.addHeader( 
DirectMemoryHttpConstants.SERIALIZER_HTTP_HEADER,
+                                      
request.getSerializer().getClass().getName() );
+        }
+
+        requestBuilder.setBody( getPutContent( request ) );
+        try
+        {
+            return asyncHttpClient.executeRequest( requestBuilder.build(), new 
DirectMemoryPutHandler( request ) );
+        }
+        catch ( IOException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+
+    }
+
+    @Override
+    public DirectMemoryResponse get( DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+        try
+        {
+            return internalGet( request ).get( configuration.getReadTimeOut(), 
TimeUnit.MILLISECONDS );
+        }
+        catch ( InterruptedException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+        catch ( TimeoutException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+        catch ( ExecutionException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public Future<DirectMemoryResponse> asyncGet( DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+        return internalGet( request );
+    }
+
+    public ListenableFuture<DirectMemoryResponse> internalGet( 
DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+        String uri = buildRequestWithKey( request );
+        log.debug( "get request to: {}", uri );
+
+        AsyncHttpClient.BoundRequestBuilder requestBuilder = 
this.asyncHttpClient.prepareGet( uri );
+        requestBuilder.addHeader( "Accept", getAcceptContentType( request ) );
+
+        if ( request.getExchangeType() == ExchangeType.TEXT_PLAIN )
+        {
+            requestBuilder.addHeader( 
DirectMemoryHttpConstants.SERIALIZER_HTTP_HEADER,
+                                      
request.getSerializer().getClass().getName() );
+        }
+        try
+        {
+            return asyncHttpClient.executeRequest( requestBuilder.build(), new 
DirectMemoryGetHandler( request ) );
+        }
+        catch ( IOException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public DirectMemoryResponse delete( DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+        try
+        {
+            return internalDelete( request ).get( 
this.configuration.getReadTimeOut(), TimeUnit.MILLISECONDS );
+        }
+        catch ( InterruptedException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+        catch ( TimeoutException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+        catch ( ExecutionException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public Future<DirectMemoryResponse> asyncDelete( DirectMemoryRequest 
request )
+        throws DirectMemoryException
+    {
+        return internalDelete( request );
+    }
+
+    public ListenableFuture<DirectMemoryResponse> internalDelete( 
DirectMemoryRequest request )
+        throws DirectMemoryException
+    {
+        String uri = buildRequestWithKey( request );
+        log.debug( "get request to: {}", uri );
+
+        AsyncHttpClient.BoundRequestBuilder requestBuilder = 
this.asyncHttpClient.prepareGet( uri );
+        requestBuilder.addHeader( "Accept", getAcceptContentType( request ) );
+
+        if ( request.getExchangeType() == ExchangeType.TEXT_PLAIN )
+        {
+            requestBuilder.addHeader( 
DirectMemoryHttpConstants.SERIALIZER_HTTP_HEADER,
+                                      
request.getSerializer().getClass().getName() );
+        }
+        try
+        {
+            return asyncHttpClient.executeRequest( requestBuilder.build(), new 
DirectMemoryGetHandler( request ) );
+        }
+        catch ( IOException e )
+        {
+            throw new DirectMemoryException( e.getMessage(), e );
+        }
+    }
+
+
+}

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/AsyncHttpClientDirectMemoryHttpClient.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/AsyncHttpClientDirectMemoryHttpClient.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryDeleteHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryDeleteHandler.java?rev=1331405&view=auto
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryDeleteHandler.java
 (added)
+++ 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryDeleteHandler.java
 Fri Apr 27 12:57:08 2012
@@ -0,0 +1,52 @@
+package org.apache.directmemory.server.client.providers.asynchttpclient;
+/*
+ * 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.
+ */
+
+import com.ning.http.client.AsyncCompletionHandler;
+import com.ning.http.client.Response;
+import org.apache.directmemory.server.commons.DirectMemoryRequest;
+import org.apache.directmemory.server.commons.DirectMemoryResponse;
+
+/**
+ * @author Olivier Lamy
+ */
+public class DirectMemoryDeleteHandler
+    extends AsyncCompletionHandler<DirectMemoryResponse>
+{
+
+    private DirectMemoryRequest request;
+
+    public DirectMemoryDeleteHandler( DirectMemoryRequest request )
+    {
+        this.request = request;
+    }
+
+    @Override
+    public DirectMemoryResponse onCompleted( Response response )
+        throws Exception
+    {
+        int statusCode = response.getStatusCode();
+
+        // handle no content response
+
+        return statusCode == 204
+            ? new DirectMemoryResponse().setFound( false ).setDeleted( false )
+            : new DirectMemoryResponse().setFound( true ).setDeleted( true );
+    }
+}

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryDeleteHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryDeleteHandler.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryGetHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryGetHandler.java?rev=1331405&view=auto
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryGetHandler.java
 (added)
+++ 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryGetHandler.java
 Fri Apr 27 12:57:08 2012
@@ -0,0 +1,63 @@
+package org.apache.directmemory.server.client.providers.asynchttpclient;
+/*
+ * 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.
+ */
+
+import com.ning.http.client.AsyncCompletionHandler;
+import com.ning.http.client.Response;
+import org.apache.directmemory.server.client.AbstractDirectMemoryHttpClient;
+import org.apache.directmemory.server.commons.DirectMemoryRequest;
+import org.apache.directmemory.server.commons.DirectMemoryResponse;
+
+/**
+ * @author Olivier Lamy
+ */
+public class DirectMemoryGetHandler
+    extends AsyncCompletionHandler<DirectMemoryResponse>
+{
+
+    private DirectMemoryRequest request;
+
+    public DirectMemoryGetHandler( DirectMemoryRequest request )
+    {
+        this.request = request;
+    }
+
+    @Override
+    public DirectMemoryResponse onCompleted( Response response )
+        throws Exception
+    {
+        int statusCode = response.getStatusCode();
+
+        // handle no content response
+
+        if ( statusCode == 204 )
+        {
+            return new DirectMemoryResponse().setFound( false );
+        }
+
+        if ( request.isDeleteRequest() )
+        {
+            return new DirectMemoryResponse().setFound( true ).setDeleted( 
true );
+        }
+
+        return AbstractDirectMemoryHttpClient.
+            buildResponse( response.getResponseBodyAsStream(), request 
).setFound( true );
+
+    }
+}

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryGetHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryGetHandler.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryPutHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryPutHandler.java?rev=1331405&view=auto
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryPutHandler.java
 (added)
+++ 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryPutHandler.java
 Fri Apr 27 12:57:08 2012
@@ -0,0 +1,60 @@
+package org.apache.directmemory.server.client.providers.asynchttpclient;
+/*
+ * 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.
+ */
+
+import com.ning.http.client.AsyncCompletionHandler;
+import com.ning.http.client.Response;
+import org.apache.directmemory.server.commons.DirectMemoryException;
+import org.apache.directmemory.server.commons.DirectMemoryHttpConstants;
+import org.apache.directmemory.server.commons.DirectMemoryRequest;
+import org.apache.directmemory.server.commons.DirectMemoryResponse;
+
+/**
+ * @author Olivier Lamy
+ */
+public class DirectMemoryPutHandler
+    extends AsyncCompletionHandler<DirectMemoryResponse>
+{
+    private DirectMemoryRequest request;
+
+    public DirectMemoryPutHandler( DirectMemoryRequest request )
+    {
+        this.request = request;
+    }
+
+    @Override
+    public DirectMemoryResponse onCompleted( Response response )
+        throws Exception
+    {
+        int statusCode = response.getStatusCode();
+        switch ( statusCode )
+        {
+            case 200:
+                String headerValue = response.getHeader( 
DirectMemoryHttpConstants.EXPIRES_SERIALIZE_SIZE );
+                int storedSize = headerValue == null ? -1 : Integer.valueOf( 
headerValue );
+                return new DirectMemoryResponse().setStored( Boolean.TRUE 
).setStoredSize( storedSize );
+            case 204:
+                return new DirectMemoryResponse().setStored( Boolean.FALSE );
+            default:
+                throw new DirectMemoryException(
+                    "put cache content return http code:'" + statusCode + "', 
reasonPhrase:"
+                        + response.getStatusText() );
+        }
+    }
+}

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryPutHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/providers/asynchttpclient/DirectMemoryPutHandler.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: incubator/directmemory/trunk/server/directmemory-server/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/pom.xml?rev=1331405&r1=1331404&r2=1331405&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/pom.xml (original)
+++ incubator/directmemory/trunk/server/directmemory-server/pom.xml Fri Apr 27 
12:57:08 2012
@@ -132,6 +132,13 @@
       <version>${tomcat7Version}</version>
     </dependency>
 
+    <dependency>
+      <groupId>com.ning</groupId>
+      <artifactId>async-http-client</artifactId>
+      <version>1.7.4</version>
+      <scope>test</scope>
+    </dependency>
+
   </dependencies>
 
   <build>

Modified: 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AbstractServletWithClientTest.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AbstractServletWithClientTest.java?rev=1331405&r1=1331404&r2=1331405&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AbstractServletWithClientTest.java
 (original)
+++ 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AbstractServletWithClientTest.java
 Fri Apr 27 12:57:08 2012
@@ -24,6 +24,7 @@ import org.apache.directmemory.serializa
 import org.apache.directmemory.server.client.DirectMemoryClient;
 import org.apache.directmemory.server.client.DirectMemoryClientBuilder;
 import org.apache.directmemory.server.client.DirectMemoryClientConfiguration;
+import 
org.apache.directmemory.server.client.providers.httpclient.HttpClientDirectMemoryHttpClient;
 import org.apache.directmemory.server.commons.DirectMemoryRequest;
 import org.apache.directmemory.server.commons.DirectMemoryResponse;
 import org.apache.directmemory.server.commons.ExchangeType;
@@ -50,6 +51,13 @@ public abstract class AbstractServletWit
 
     StringBuilder hugeStr = new StringBuilder( "" );
 
+    public static String httpClientClassName = 
HttpClientDirectMemoryHttpClient.class.getName();
+
+    public AbstractServletWithClientTest()
+    {
+        // no op
+    }
+
 
     protected abstract ExchangeType getExchangeType();
 
@@ -79,18 +87,21 @@ public abstract class AbstractServletWit
                 .setPort( port )
                 .setHttpPath( "/direct-memory/DirectMemoryServlet" )
                 .setSerializer( SerializerFactory.createNewSerializer() )
+                .setHttpClientClassName( httpClientClassName )
                 .setExchangeType( getExchangeType() );
 
         client = DirectMemoryClientBuilder.newBuilder( configuration 
).buildClient();
 
         // or
 
-        client = DirectMemoryClientBuilder.newBuilder()
+        client = DirectMemoryClientBuilder
+            .newBuilder()
             .toHost( "localhost" )
             .onPort( port )
             .toHttpPath( "/direct-memory/DirectMemoryServlet" )
             .withSerializer( SerializerFactory.createNewSerializer() )
             .forExchangeType( getExchangeType() )
+            .withHttpClientClassName( httpClientClassName )
             .buildClient();
 
         // END SNIPPET: client-configuration
@@ -101,6 +112,7 @@ public abstract class AbstractServletWit
         }
     }
 
+
     public void shutdown()
         throws Exception
     {

Added: 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AsyncHttpClientTest.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AsyncHttpClientTest.java?rev=1331405&view=auto
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AsyncHttpClientTest.java
 (added)
+++ 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AsyncHttpClientTest.java
 Fri Apr 27 12:57:08 2012
@@ -0,0 +1,62 @@
+package org.apache.directmemory.server.services;
+/*
+ * 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.
+ */
+
+import junit.framework.TestCase;
+import 
org.apache.directmemory.server.client.providers.asynchttpclient.AsyncHttpClientDirectMemoryHttpClient;
+import 
org.apache.directmemory.server.client.providers.httpclient.HttpClientDirectMemoryHttpClient;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.JUnitCore;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * @author Olivier Lamy
+ */
+@RunWith( JUnit4.class )
+public class AsyncHttpClientTest
+    extends TestCase
+{
+    @BeforeClass
+    public static void setupHttpClientClassName()
+    {
+        ServletWithClientBinaryTypeTest.httpClientClassName = 
AsyncHttpClientDirectMemoryHttpClient.class.getName();
+        ServletWithClientTextPlainTypeTest.httpClientClassName = 
AsyncHttpClientDirectMemoryHttpClient.class.getName();
+        ServletWithClientJsonTypeTest.httpClientClassName = 
AsyncHttpClientDirectMemoryHttpClient.class.getName();
+    }
+
+    @AfterClass
+    public static void restoreHttpClientClassName()
+    {
+        ServletWithClientBinaryTypeTest.httpClientClassName = 
HttpClientDirectMemoryHttpClient.class.getName();
+        ServletWithClientTextPlainTypeTest.httpClientClassName = 
HttpClientDirectMemoryHttpClient.class.getName();
+        ServletWithClientJsonTypeTest.httpClientClassName = 
HttpClientDirectMemoryHttpClient.class.getName();
+    }
+
+    @Test
+    public void testRunAll()
+    {
+
+        JUnitCore core = new JUnitCore();
+        core.run( ServletWithClientBinaryTypeTest.class );
+
+    }
+}

Propchange: 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AsyncHttpClientTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/AsyncHttpClientTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientBinaryTypeTest.java
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientBinaryTypeTest.java?rev=1331405&r1=1331404&r2=1331405&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientBinaryTypeTest.java
 (original)
+++ 
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientBinaryTypeTest.java
 Fri Apr 27 12:57:08 2012
@@ -26,6 +26,13 @@ import org.apache.directmemory.server.co
 public class ServletWithClientBinaryTypeTest
     extends AbstractServletWithClientTest
 {
+    public ServletWithClientBinaryTypeTest()
+    {
+        super();
+    }
+
+
+
     @Override
     protected ExchangeType getExchangeType()
     {

Modified: 
incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml
URL: 
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml?rev=1331405&r1=1331404&r2=1331405&view=diff
==============================================================================
--- 
incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml
 (original)
+++ 
incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml
 Fri Apr 27 12:57:08 2012
@@ -26,6 +26,7 @@
   </appender>
 
   <logger name="org.apache.directmemory.server" level="INFO"/>
+  <logger name="com.ning.http" level="DEBUG"/>
   <root level="INFO">
     <appender-ref ref="CONSOLE"/>
   </root>


Reply via email to