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>