You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directmemory.apache.org by ol...@apache.org on 2012/02/20 17:56:46 UTC

svn commit: r1291371 - in /incubator/directmemory/trunk/server: ./ directmemory-server-client/src/main/java/org/apache/directmemory/server/client/ directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ directmemory-server-com...

Author: olamy
Date: Mon Feb 20 16:56:45 2012
New Revision: 1291371

URL: http://svn.apache.org/viewvc?rev=1291371&view=rev
Log:
[DIRECTMEMORY-61] add unit tests with http call first impl with Apache httpclient with using embeded tomcat api.

Added:
    incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ExchangeType.java   (with props)
    incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTest.java   (with props)
Modified:
    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/DefaultDirectMemoryServerClient.java
    incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryHttpClient.java
    incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClient.java
    incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClientConfiguration.java
    incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/HttpClientDirectMemoryHttpClient.java
    incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/AbstractDirectMemoryCacheExchange.java
    incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheParser.java
    incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheRequest.java
    incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheResponse.java
    incubator/directmemory/trunk/server/directmemory-server-commons/src/test/java/org/apache/directmemory/server/commons/DirectMemoryCacheParserTest.java
    incubator/directmemory/trunk/server/directmemory-server/pom.xml
    incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
    incubator/directmemory/trunk/server/pom.xml

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=1291371&r1=1291370&r2=1291371&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 Mon Feb 20 16:56:45 2012
@@ -63,8 +63,20 @@ public abstract class AbstractDirectMemo
         StringBuilder uri = new StringBuilder( this.configuration.getProtocol() );
         uri.append( "://" ).append( this.configuration.getHost() );
         uri.append( ':' ).append( this.configuration.getPort() );
-        uri.append( this.configuration.getHttpPath() );
+        uri.append( '/' ).append( this.configuration.getHttpPath() );
         uri.append( '/' ).append( request.getKey() );
-        return uri.toString();
+        // we take care of spaces in the key
+        // TODO use something more generics to take care of all characters
+        return uri.toString().replace( ' ', '+' );
+    }
+
+    protected String getRequestContentType( DirectMemoryCacheRequest request )
+    {
+        return request.getExchangeType().getContentType();
+    }
+
+    protected String getAcceptContentType( DirectMemoryCacheRequest request )
+    {
+        return request.getExchangeType().getContentType();
     }
 }

Modified: incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DefaultDirectMemoryServerClient.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DefaultDirectMemoryServerClient.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DefaultDirectMemoryServerClient.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DefaultDirectMemoryServerClient.java Mon Feb 20 16:56:45 2012
@@ -22,6 +22,7 @@ import org.apache.directmemory.server.co
 import org.apache.directmemory.server.commons.DirectMemoryCacheRequest;
 import org.apache.directmemory.server.commons.DirectMemoryCacheResponse;
 
+import java.io.IOException;
 import java.util.concurrent.Future;
 
 /**
@@ -51,9 +52,16 @@ public class DefaultDirectMemoryServerCl
 
     @Override
     public DirectMemoryCacheResponse retrieve( DirectMemoryCacheRequest directMemoryCacheRequest )
-        throws DirectMemoryCacheException
+        throws DirectMemoryCacheException, IOException, ClassNotFoundException, InstantiationException,
+        IllegalAccessException
     {
-        return this.directMemoryHttpClient.get( directMemoryCacheRequest );
+        DirectMemoryCacheResponse response = this.directMemoryHttpClient.get( directMemoryCacheRequest );
+        if ( response.isFound() && response.getCacheContent() != null && response.getCacheContent().length > 0 )
+        {
+            response.setResponse( directMemoryCacheRequest.getSerializer().deserialize( response.getCacheContent(),
+                                                                                        directMemoryCacheRequest.getObjectClass() ) );
+        }
+        return response;
     }
 
     @Override
@@ -81,13 +89,13 @@ public class DefaultDirectMemoryServerCl
     public DirectMemoryCacheResponse delete( DirectMemoryCacheRequest directMemoryCacheRequest )
         throws DirectMemoryCacheException
     {
-        return this.directMemoryHttpClient.get( directMemoryCacheRequest.setDeleteRequest( true ) );
+        return this.directMemoryHttpClient.delete( directMemoryCacheRequest.setDeleteRequest( true ) );
     }
 
     @Override
     public Future<DirectMemoryCacheResponse> asyncDelete( DirectMemoryCacheRequest directMemoryCacheRequest )
         throws DirectMemoryCacheException
     {
-        return this.directMemoryHttpClient.asyncGet( directMemoryCacheRequest.setDeleteRequest( true ) );
+        return this.directMemoryHttpClient.asyncDelete( directMemoryCacheRequest.setDeleteRequest( true ) );
     }
 }

Modified: incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryHttpClient.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryHttpClient.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryHttpClient.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryHttpClient.java Mon Feb 20 16:56:45 2012
@@ -44,4 +44,12 @@ public interface DirectMemoryHttpClient
     Future<DirectMemoryCacheResponse> asyncGet( DirectMemoryCacheRequest request )
         throws DirectMemoryCacheException;
 
+
+    DirectMemoryCacheResponse delete( DirectMemoryCacheRequest request )
+        throws DirectMemoryCacheException;
+
+    Future<DirectMemoryCacheResponse> asyncDelete( DirectMemoryCacheRequest request )
+        throws DirectMemoryCacheException;
+
+
 }

Modified: incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClient.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClient.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClient.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClient.java Mon Feb 20 16:56:45 2012
@@ -22,6 +22,7 @@ import org.apache.directmemory.server.co
 import org.apache.directmemory.server.commons.DirectMemoryCacheRequest;
 import org.apache.directmemory.server.commons.DirectMemoryCacheResponse;
 
+import java.io.IOException;
 import java.util.concurrent.Future;
 
 /**
@@ -31,7 +32,8 @@ public interface DirectMemoryServerClien
 {
 
     DirectMemoryCacheResponse retrieve( DirectMemoryCacheRequest directMemoryCacheRequest )
-        throws DirectMemoryCacheException;
+        throws DirectMemoryCacheException, IOException, ClassNotFoundException, InstantiationException,
+        IllegalAccessException;
 
     Future<DirectMemoryCacheResponse> asyncRetrieve( DirectMemoryCacheRequest directMemoryCacheRequest )
         throws DirectMemoryCacheException;

Modified: incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClientConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClientConfiguration.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClientConfiguration.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/DirectMemoryServerClientConfiguration.java Mon Feb 20 16:56:45 2012
@@ -18,6 +18,8 @@ package org.apache.directmemory.server.c
  * under the License.
  */
 
+import org.apache.directmemory.server.commons.DirectMemoryCacheException;
+
 /**
  * @author Olivier Lamy
  */
@@ -92,8 +94,10 @@ public class DirectMemoryServerClientCon
 
     public DirectMemoryServerClientConfiguration setDirectMemoryHttpClient(
         DirectMemoryHttpClient directMemoryHttpClient )
+        throws DirectMemoryCacheException
     {
         this.directMemoryHttpClient = directMemoryHttpClient;
+        this.directMemoryHttpClient.configure( this );
         return this;
     }
 

Modified: incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/HttpClientDirectMemoryHttpClient.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/HttpClientDirectMemoryHttpClient.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/HttpClientDirectMemoryHttpClient.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-client/src/main/java/org/apache/directmemory/server/client/HttpClientDirectMemoryHttpClient.java Mon Feb 20 16:56:45 2012
@@ -24,6 +24,7 @@ import org.apache.directmemory.server.co
 import org.apache.http.HttpResponse;
 import org.apache.http.StatusLine;
 import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpDelete;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.entity.ByteArrayEntity;
@@ -54,7 +55,7 @@ public class HttpClientDirectMemoryHttpC
     private HttpClient httpClient;
 
 
-    private HttpClientDirectMemoryHttpClient( DirectMemoryServerClientConfiguration configuration )
+    public HttpClientDirectMemoryHttpClient( DirectMemoryServerClientConfiguration configuration )
     {
         super( configuration );
     }
@@ -79,6 +80,7 @@ public class HttpClientDirectMemoryHttpC
             log.debug( "put request to: {}", uri.toString() );
         }
         HttpPut httpPut = new HttpPut( uri.toString() );
+        httpPut.addHeader( "Content-Type", getRequestContentType( request ) );
         httpPut.setEntity( new ByteArrayEntity( getPutContent( request ) ) );
 
         try
@@ -125,6 +127,9 @@ public class HttpClientDirectMemoryHttpC
         }
 
         HttpGet httpGet = new HttpGet( uri );
+
+        httpGet.addHeader( "Accept", getAcceptContentType( request ) );
+
         try
         {
             HttpResponse httpResponse = this.httpClient.execute( httpGet );
@@ -141,7 +146,7 @@ public class HttpClientDirectMemoryHttpC
                 return new DirectMemoryCacheResponse().setFound( true ).setDeleted( true );
             }
 
-            return buildResponse( httpResponse.getEntity().getContent() );
+            return buildResponse( httpResponse.getEntity().getContent() ).setFound( true );
         }
         catch ( IOException e )
         {
@@ -163,4 +168,51 @@ public class HttpClientDirectMemoryHttpC
             }
         } );
     }
+
+    @Override
+    public DirectMemoryCacheResponse delete( DirectMemoryCacheRequest request )
+        throws DirectMemoryCacheException
+    {
+        String uri = buildRequestWithKey( request );
+        if ( log.isDebugEnabled() )
+        {
+            log.debug( "get request to: {}", uri.toString() );
+        }
+
+        HttpDelete httpDelete = new HttpDelete( uri );
+
+        try
+        {
+            HttpResponse httpResponse = this.httpClient.execute( httpDelete );
+
+            // handle no content response
+            StatusLine statusLine = httpResponse.getStatusLine();
+            if ( statusLine.getStatusCode() == 204 )
+            {
+                return new DirectMemoryCacheResponse().setFound( false ).setDeleted( false );
+            }
+
+            return new DirectMemoryCacheResponse().setFound( true ).setDeleted( true );
+
+        }
+        catch ( IOException e )
+        {
+            throw new DirectMemoryCacheException( e.getMessage(), e );
+        }
+    }
+
+    @Override
+    public Future<DirectMemoryCacheResponse> asyncDelete( final DirectMemoryCacheRequest request )
+        throws DirectMemoryCacheException
+    {
+        return Executors.newSingleThreadExecutor().submit( new Callable<DirectMemoryCacheResponse>()
+        {
+            @Override
+            public DirectMemoryCacheResponse call()
+                throws Exception
+            {
+                return delete( request );
+            }
+        } );
+    }
 }

Modified: incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/AbstractDirectMemoryCacheExchange.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/AbstractDirectMemoryCacheExchange.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/AbstractDirectMemoryCacheExchange.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/AbstractDirectMemoryCacheExchange.java Mon Feb 20 16:56:45 2012
@@ -23,11 +23,11 @@ import org.apache.directmemory.serializa
 /**
  * @author Olivier Lamy
  */
-public abstract class AbstractDirectMemoryCacheExchange
+public abstract class AbstractDirectMemoryCacheExchange<V>
 {
     private String key;
 
-    private Object object;
+    private V object;
 
     private Serializer serializer;
 
@@ -44,12 +44,12 @@ public abstract class AbstractDirectMemo
         return this;
     }
 
-    public Object getObject()
+    public V getObject()
     {
         return object;
     }
 
-    public AbstractDirectMemoryCacheExchange setObject( Object object )
+    public AbstractDirectMemoryCacheExchange setObject( V object )
     {
         this.object = object;
         return this;

Modified: incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheParser.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheParser.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheParser.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheParser.java Mon Feb 20 16:56:45 2012
@@ -54,7 +54,8 @@ public class DirectMemoryCacheParser
         {
             JsonParser jp = this.jsonFactory.createJsonParser( inputStream );
             DirectMemoryCacheRequest rq = new DirectMemoryCacheRequest();
-            while ( jp.nextToken() != JsonToken.END_OBJECT )
+            JsonToken jsonToken = jp.nextToken();
+            while ( jsonToken != JsonToken.END_OBJECT && jsonToken != null )
             {
                 String fieldName = jp.getCurrentName();
                 if ( DirectMemoryCacheConstants.KEY_FIELD_NAME.equals( fieldName ) )
@@ -75,6 +76,7 @@ public class DirectMemoryCacheParser
                     jp.nextToken();
                     rq.setCacheContent( jp.getBinaryValue() );
                 }
+                jsonToken = jp.nextToken();
             }
 
             jp.close();
@@ -100,7 +102,9 @@ public class DirectMemoryCacheParser
             JsonParser jp = this.jsonFactory.createJsonParser( inputStream );
             DirectMemoryCacheResponse rs = new DirectMemoryCacheResponse();
 
-            while ( jp.nextToken() != JsonToken.END_OBJECT )
+            JsonToken jsonToken = jp.nextToken();
+
+            while ( jsonToken != JsonToken.END_OBJECT && jsonToken != null)
             {
                 String fieldName = jp.getCurrentName();
                 if ( DirectMemoryCacheConstants.FOUND_FIELD_NAME.equals( fieldName ) )
@@ -121,8 +125,10 @@ public class DirectMemoryCacheParser
                     jp.nextToken();
                     rs.setCacheContent( jp.getBinaryValue() );
                 }
+                jsonToken = jp.nextToken();
             }
 
+
             return rs;
         }
         catch ( JsonParseException e )

Modified: incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheRequest.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheRequest.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheRequest.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheRequest.java Mon Feb 20 16:56:45 2012
@@ -29,8 +29,8 @@ import org.apache.directmemory.serializa
  *
  * @author Olivier Lamy
  */
-public class DirectMemoryCacheRequest
-    extends AbstractDirectMemoryCacheExchange
+public class DirectMemoryCacheRequest<V>
+    extends AbstractDirectMemoryCacheExchange<V>
 {
     /**
      * to update/put content in the server
@@ -39,6 +39,10 @@ public class DirectMemoryCacheRequest
 
     private int expiresIn;
 
+    private ExchangeType exchangeType;
+
+    private Class<V> objectClass;
+
     /**
      * to generate a delete request <b>key mandatory</b>
      */
@@ -73,7 +77,7 @@ public class DirectMemoryCacheRequest
     }
 
 
-    public DirectMemoryCacheRequest setObject( Object object )
+    public DirectMemoryCacheRequest setObject( V object )
     {
         super.setObject( object );
         return this;
@@ -103,4 +107,26 @@ public class DirectMemoryCacheRequest
         this.deleteRequest = deleteRequest;
         return this;
     }
+
+    public ExchangeType getExchangeType()
+    {
+        return exchangeType;
+    }
+
+    public DirectMemoryCacheRequest setExchangeType( ExchangeType exchangeType )
+    {
+        this.exchangeType = exchangeType;
+        return this;
+    }
+
+    public Class<V> getObjectClass()
+    {
+        return objectClass;
+    }
+
+    public DirectMemoryCacheRequest setObjectClass( Class<V> objectClass )
+    {
+        this.objectClass = objectClass;
+        return this;
+    }
 }

Modified: incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheResponse.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheResponse.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheResponse.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheResponse.java Mon Feb 20 16:56:45 2012
@@ -26,17 +26,17 @@ package org.apache.directmemory.server.c
  *
  * @author Olivier Lamy
  */
-public class DirectMemoryCacheResponse
+public class DirectMemoryCacheResponse<V>
     extends AbstractDirectMemoryCacheExchange
 {
     private boolean found;
 
     private boolean updated;
 
-    private Class objectClass;
-
     private boolean deleted = false;
 
+    private V response;
+
     public boolean isFound()
     {
         return found;
@@ -59,17 +59,6 @@ public class DirectMemoryCacheResponse
         return this;
     }
 
-    public Class getObjectClass()
-    {
-        return objectClass;
-    }
-
-    public DirectMemoryCacheResponse setObjectClass( Class objectClass )
-    {
-        this.objectClass = objectClass;
-        return this;
-    }
-
     public DirectMemoryCacheResponse setCacheContent( byte[] cacheContent )
     {
         super.setCacheContent( cacheContent );
@@ -92,4 +81,14 @@ public class DirectMemoryCacheResponse
         this.deleted = deleted;
         return this;
     }
+
+    public V getResponse()
+    {
+        return this.response;
+    }
+
+    public void setResponse( V response )
+    {
+        this.response = response;
+    }
 }

Added: incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ExchangeType.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ExchangeType.java?rev=1291371&view=auto
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ExchangeType.java (added)
+++ incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ExchangeType.java Mon Feb 20 16:56:45 2012
@@ -0,0 +1,39 @@
+package org.apache.directmemory.server.commons;
+/*
+ * 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.
+ */
+
+/**
+ * @author Olivier Lamy
+ */
+public enum ExchangeType
+{
+    JSON( "application/json" );
+
+    private String contentType;
+
+    private ExchangeType( String contentType )
+    {
+        this.contentType = contentType;
+    }
+
+    public String getContentType()
+    {
+        return contentType;
+    }
+}

Propchange: incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ExchangeType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/ExchangeType.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: incubator/directmemory/trunk/server/directmemory-server-commons/src/test/java/org/apache/directmemory/server/commons/DirectMemoryCacheParserTest.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/src/test/java/org/apache/directmemory/server/commons/DirectMemoryCacheParserTest.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server-commons/src/test/java/org/apache/directmemory/server/commons/DirectMemoryCacheParserTest.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server-commons/src/test/java/org/apache/directmemory/server/commons/DirectMemoryCacheParserTest.java Mon Feb 20 16:56:45 2012
@@ -20,10 +20,10 @@ package org.apache.directmemory.server.c
 
 import org.junit.Test;
 
+import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.*;
 
 /**
  * @author Olivier Lamy
@@ -58,4 +58,15 @@ public class DirectMemoryCacheParserTest
         assertEquals( false, dmRs.isUpdated() );
         assertEquals( "foo bar", new String( dmRs.getCacheContent() ) );
     }
+
+    @Test
+    public void parseEmptyRequest()
+        throws Exception
+    {
+        InputStream is = new ByteArrayInputStream( new byte[0] );
+        DirectMemoryCacheRequest dmRq = DirectMemoryCacheParser.instance().buildRequest( is );
+        assertNotNull( dmRq );
+        assertNull( dmRq.getCacheContent() );
+
+    }
 }

Modified: incubator/directmemory/trunk/server/directmemory-server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/pom.xml?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/pom.xml (original)
+++ incubator/directmemory/trunk/server/directmemory-server/pom.xml Mon Feb 20 16:56:45 2012
@@ -33,6 +33,9 @@
   <name>Apache DirectMemory :: Server :: Server Implementation</name>
   <description>${project.name}</description>
 
+  <properties>
+    <tomcat7Version>7.0.25</tomcat7Version>
+  </properties>
 
   <dependencies>
     <dependency>
@@ -46,8 +49,9 @@
     </dependency>
     <dependency>
       <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>2.5</version>
+      <artifactId>javax.servlet-api</artifactId>
+      <version>3.0.1</version>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.directmemory.server</groupId>
@@ -84,6 +88,37 @@
       <version>3.1.1.RELEASE</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.directmemory.server</groupId>
+      <artifactId>directmemory-server-client</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.tomcat.embed</groupId>
+      <artifactId>tomcat-embed-core</artifactId>
+      <scope>test</scope>
+      <version>${tomcat7Version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-juli</artifactId>
+      <scope>test</scope>
+      <version>${tomcat7Version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat.embed</groupId>
+      <artifactId>tomcat-embed-logging-juli</artifactId>
+      <scope>test</scope>
+      <version>${tomcat7Version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-servlet-api</artifactId>
+      <scope>test</scope>
+      <version>${tomcat7Version}</version>
+    </dependency>
+
   </dependencies>
 
   <build>
@@ -93,6 +128,7 @@
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <systemPropertyVariables>
+            <java.io.tmpdir>${project.build.outputDirectory}</java.io.tmpdir>
             <directMemory.numberOfBuffers>10</directMemory.numberOfBuffers>
             <!-- must be enough confortable for test beans -->
             <directMemory.size>10000</directMemory.size>

Modified: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java Mon Feb 20 16:56:45 2012
@@ -107,10 +107,8 @@ public class CacheServlet
         {
             resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                             "Content-Type '" + req.getContentType() + "' not supported" );
+            return;
         }
-
-        // 	application/json
-        contentTypeHandlers.get( MediaType.APPLICATION_JSON );
         try
         {
             cacheRequest = contentTypeHandler.handlePut( req, resp );
@@ -177,7 +175,9 @@ public class CacheServlet
 
         byte[] bytes = cacheService.retrieveByteArray( key );
 
-        if ( bytes == null )
+        log.debug( "content size {} for key {}", ( bytes == null ? "null" : bytes.length ), key );
+
+        if ( bytes == null || bytes.length == 0 )
         {
             resp.sendError( HttpServletResponse.SC_NO_CONTENT, "No content for key: " + key );
             return;

Added: incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTest.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTest.java?rev=1291371&view=auto
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTest.java (added)
+++ incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTest.java Mon Feb 20 16:56:45 2012
@@ -0,0 +1,152 @@
+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 org.apache.catalina.Context;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.directmemory.serialization.SerializerFactory;
+import org.apache.directmemory.server.client.DefaultDirectMemoryServerClient;
+import org.apache.directmemory.server.client.DirectMemoryHttpClient;
+import org.apache.directmemory.server.client.DirectMemoryServerClient;
+import org.apache.directmemory.server.client.DirectMemoryServerClientConfiguration;
+import org.apache.directmemory.server.client.HttpClientDirectMemoryHttpClient;
+import org.apache.directmemory.server.commons.DirectMemoryCacheRequest;
+import org.apache.directmemory.server.commons.DirectMemoryCacheResponse;
+import org.apache.directmemory.server.commons.ExchangeType;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Olivier Lamy
+ */
+public class ServletWithClientTest
+{
+    Logger log = LoggerFactory.getLogger( getClass() );
+
+    Tomcat tomcat;
+
+    private int port;
+
+    DirectMemoryServerClient client;
+
+
+    @Before
+    public void initialize()
+        throws Exception
+    {
+        tomcat = new Tomcat();
+        tomcat.setBaseDir( System.getProperty( "java.io.tmpdir" ) );
+        tomcat.setPort( 0 );
+
+        Context context = tomcat.addContext( "/direct-memory", System.getProperty( "java.io.tmpdir" ) );
+
+        tomcat.addServlet( context, CacheServlet.class.getName(), new CacheServlet() );
+        context.addServletMapping( "/CacheServlet/*", CacheServlet.class.getName() );
+
+        tomcat.start();
+
+        port = tomcat.getConnector().getLocalPort();
+
+        log.info( "Tomcat started on port:" + port );
+
+        DirectMemoryServerClientConfiguration configuration =
+            new DirectMemoryServerClientConfiguration().setHost( "localhost" ).setPort( port ).setHttpPath(
+                "/direct-memory/CacheServlet" );
+        DirectMemoryHttpClient httpClient = HttpClientDirectMemoryHttpClient.instance( configuration );
+        configuration.setDirectMemoryHttpClient( httpClient );
+
+        client = DefaultDirectMemoryServerClient.instance( configuration );
+
+    }
+
+    public void shutdown()
+        throws Exception
+    {
+        tomcat.stop();
+    }
+
+    @Test
+    public void putAndGet()
+        throws Exception
+    {
+        Wine bordeaux = new Wine( "Bordeaux", "very great wine" );
+
+        client.put( new DirectMemoryCacheRequest<Wine>().setObject( bordeaux ).setKey( "bordeaux" ).setSerializer(
+            SerializerFactory.createNewSerializer() ).setExchangeType( ExchangeType.JSON ) );
+
+        DirectMemoryCacheResponse<Wine> response = client.retrieve(
+            new DirectMemoryCacheRequest().setKey( "bordeaux" ).setSerializer(
+                SerializerFactory.createNewSerializer() ).setExchangeType( ExchangeType.JSON ).setObjectClass(
+                Wine.class ) );
+
+        assertTrue( response.isFound() );
+        Wine wine = response.getResponse();
+        assertEquals( "Bordeaux", wine.getName() );
+        assertEquals( "very great wine", wine.getDescription() );
+    }
+
+    @Test
+    public void getNotFound()
+        throws Exception
+    {
+
+        DirectMemoryCacheResponse<Wine> response = client.retrieve(
+            new DirectMemoryCacheRequest().setKey( "Italian wine better than French" ).setSerializer(
+                SerializerFactory.createNewSerializer() ).setExchangeType( ExchangeType.JSON ).setObjectClass(
+                Wine.class ) );
+
+        // due to the key used the server should response BAD Request but it says not found
+        assertFalse( response.isFound() );
+        assertNull( response.getCacheContent() );
+    }
+
+    @Test
+    public void putAndGetAndDelete()
+        throws Exception
+    {
+        Wine bordeaux = new Wine( "Bordeaux", "very great wine" );
+
+        client.put( new DirectMemoryCacheRequest<Wine>().setObject( bordeaux ).setKey( "bordeaux" ).setSerializer(
+            SerializerFactory.createNewSerializer() ).setExchangeType( ExchangeType.JSON ) );
+
+        DirectMemoryCacheResponse<Wine> response = client.retrieve(
+            new DirectMemoryCacheRequest().setKey( "bordeaux" ).setSerializer(
+                SerializerFactory.createNewSerializer() ).setExchangeType( ExchangeType.JSON ).setObjectClass(
+                Wine.class ) );
+
+        assertTrue( response.isFound() );
+        Wine wine = response.getResponse();
+        assertEquals( "Bordeaux", wine.getName() );
+        assertEquals( "very great wine", wine.getDescription() );
+
+        client.delete( new DirectMemoryCacheRequest<Wine>().setKey( "bordeaux" ) );
+
+        response = client.retrieve( new DirectMemoryCacheRequest().setKey( "bordeaux" ).setSerializer(
+            SerializerFactory.createNewSerializer() ).setExchangeType( ExchangeType.JSON ).setObjectClass(
+            Wine.class ) );
+
+        assertFalse( response.isFound() );
+        wine = response.getResponse();
+        assertNull( wine );
+    }
+}

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

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

Modified: incubator/directmemory/trunk/server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/pom.xml?rev=1291371&r1=1291370&r2=1291371&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/pom.xml (original)
+++ incubator/directmemory/trunk/server/pom.xml Mon Feb 20 16:56:45 2012
@@ -53,6 +53,11 @@
         <version>${project.version}</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.directmemory.server</groupId>
+        <artifactId>directmemory-server-client</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.codehaus.jackson</groupId>
         <artifactId>jackson-core-asl</artifactId>
         <version>1.9.4</version>