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/26 11:38:58 UTC
svn commit: r1293799 - in /incubator/directmemory/trunk/server:
directmemory-server-client/src/main/java/org/apache/directmemory/server/client/
directmemory-server/src/main/java/org/apache/directmemory/server/services/
directmemory-server/src/test/java...
Author: olamy
Date: Sun Feb 26 10:38:58 2012
New Revision: 1293799
URL: http://svn.apache.org/viewvc?rev=1293799&view=rev
Log:
[DIRECTMEMORY-61] implements text/plain exchange type.
Added:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/TextPlainContentTypeHandler.java (with props)
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTextPlainTypeTest.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/HttpClientDirectMemoryHttpClient.java
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/ContentTypeHandler.java
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryServlet.java
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JavaSerializedContentTypeHandler.java
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonContentTypeHandler.java
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=1293799&r1=1293798&r2=1293799&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 Sun Feb 26 10:38:58 2012
@@ -24,10 +24,8 @@ import org.apache.directmemory.server.co
import org.apache.directmemory.server.commons.DirectMemoryRequest;
import org.apache.directmemory.server.commons.DirectMemoryResponse;
import org.apache.directmemory.server.commons.DirectMemoryWriter;
-import org.apache.directmemory.server.commons.ExchangeType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import java.io.IOException;
import java.io.InputStream;
@@ -70,8 +68,7 @@ public abstract class AbstractDirectMemo
throw new DirectMemoryException( e.getMessage(), e );
}
case TEXT_PLAIN:
- log.error( "{} not implemented yet", ExchangeType.TEXT_PLAIN.getContentType() );
- throw new NotImplementedException();
+ return request.getObject().toString().getBytes();
default:
log.error( "exchange type unknown {}", request.getExchangeType() );
throw new DirectMemoryException( "exchange type unknown " + request.getExchangeType() );
@@ -112,8 +109,16 @@ public abstract class AbstractDirectMemo
throw new DirectMemoryException( e.getMessage(), e );
}
case TEXT_PLAIN:
- log.error( "{} not implemented yet", ExchangeType.TEXT_PLAIN.getContentType() );
- throw new NotImplementedException();
+ try
+ {
+ DirectMemoryResponse<String> response = new DirectMemoryResponse<String>();
+ response.setResponse( IOUtils.toString( inputStream ) );
+ return response;
+ }
+ catch ( IOException e )
+ {
+ throw new DirectMemoryException( e.getMessage(), e );
+ }
default:
log.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/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=1293799&r1=1293798&r2=1293799&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 Sun Feb 26 10:38:58 2012
@@ -19,9 +19,9 @@ package org.apache.directmemory.server.c
*/
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.DirectMemoryHttpConstants;
import org.apache.directmemory.server.commons.ExchangeType;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
@@ -82,12 +82,18 @@ public class HttpClientDirectMemoryHttpC
HttpPut httpPut = new HttpPut( uri );
httpPut.addHeader( "Content-Type", getRequestContentType( request ) );
- if ( request.getExchangeType() == ExchangeType.JAVA_SERIALIZED_OBJECT && request.getExpiresIn() > 0 )
+ if ( request.getExpiresIn() > 0 )
{
httpPut.addHeader( DirectMemoryHttpConstants.EXPIRES_IN_HTTP_HEADER,
Integer.toString( request.getExpiresIn() ) );
}
+ if ( request.getExchangeType() == ExchangeType.TEXT_PLAIN )
+ {
+ httpPut.addHeader( DirectMemoryHttpConstants.SERIALIZER_HTTP_HEADER,
+ request.getSerializer().getClass().getName() );
+ }
+
httpPut.setEntity( new ByteArrayEntity( getPutContent( request ) ) );
try
@@ -135,6 +141,11 @@ public class HttpClientDirectMemoryHttpC
httpGet.addHeader( "Accept", getAcceptContentType( request ) );
+ if ( request.getExchangeType() == ExchangeType.TEXT_PLAIN )
+ {
+ httpGet.addHeader( DirectMemoryHttpConstants.SERIALIZER_HTTP_HEADER,
+ request.getSerializer().getClass().getName() );
+ }
try
{
HttpResponse httpResponse = this.httpClient.execute( httpGet );
Modified: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/ContentTypeHandler.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/ContentTypeHandler.java?rev=1293799&r1=1293798&r2=1293799&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/ContentTypeHandler.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/ContentTypeHandler.java Sun Feb 26 10:38:58 2012
@@ -30,7 +30,8 @@ import java.io.IOException;
*/
public interface ContentTypeHandler
{
- byte[] handleGet( DirectMemoryRequest request, byte[] cacheResponseContent, HttpServletResponse response )
+ byte[] handleGet( DirectMemoryRequest request, byte[] cacheResponseContent, HttpServletResponse response,
+ HttpServletRequest req )
throws DirectMemoryException, IOException;
DirectMemoryRequest handlePut( HttpServletRequest request, HttpServletResponse response )
Modified: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryServlet.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryServlet.java?rev=1293799&r1=1293798&r2=1293799&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryServlet.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryServlet.java Sun Feb 26 10:38:58 2012
@@ -75,6 +75,7 @@ public class DirectMemoryServlet
contentTypeHandlers.put( MediaType.APPLICATION_JSON, new JsonContentTypeHandler() );
contentTypeHandlers.put( DirectMemoryHttpConstants.JAVA_SERIALIZED_OBJECT_CONTENT_TYPE_HEADER,
new JavaSerializedContentTypeHandler() );
+ contentTypeHandlers.put( MediaType.TEXT_PLAIN, new TextPlainContentTypeHandler() );
}
@Override
@@ -128,8 +129,7 @@ public class DirectMemoryServlet
cacheService.putByteArray( key, request.getCacheContent(), request.getExpiresIn() );
}
- protected ContentTypeHandler findPutCacheContentTypeHandler( HttpServletRequest req,
- HttpServletResponse response )
+ protected ContentTypeHandler findPutCacheContentTypeHandler( HttpServletRequest req, HttpServletResponse response )
{
String contentType = req.getContentType();
@@ -207,7 +207,7 @@ public class DirectMemoryServlet
try
{
byte[] respBytes =
- contentTypeHandler.handleGet( new DirectMemoryRequest().setKey( key ), bytes, resp );
+ contentTypeHandler.handleGet( new DirectMemoryRequest().setKey( key ), bytes, resp, req );
resp.getOutputStream().write( respBytes );
}
catch ( DirectMemoryException e )
@@ -218,8 +218,7 @@ public class DirectMemoryServlet
}
- protected ContentTypeHandler findGetCacheContentTypeHandler( HttpServletRequest req,
- HttpServletResponse response )
+ protected ContentTypeHandler findGetCacheContentTypeHandler( HttpServletRequest req, HttpServletResponse response )
{
String acceptContentType = req.getHeader( "Accept" );
Modified: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JavaSerializedContentTypeHandler.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JavaSerializedContentTypeHandler.java?rev=1293799&r1=1293798&r2=1293799&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JavaSerializedContentTypeHandler.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JavaSerializedContentTypeHandler.java Sun Feb 26 10:38:58 2012
@@ -20,8 +20,8 @@ package org.apache.directmemory.server.s
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
-import org.apache.directmemory.server.commons.DirectMemoryHttpConstants;
import org.apache.directmemory.server.commons.DirectMemoryException;
+import org.apache.directmemory.server.commons.DirectMemoryHttpConstants;
import org.apache.directmemory.server.commons.DirectMemoryRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,7 +39,8 @@ public class JavaSerializedContentTypeHa
private Logger log = LoggerFactory.getLogger( getClass() );
@Override
- public byte[] handleGet( DirectMemoryRequest request, byte[] cacheResponseContent, HttpServletResponse resp )
+ public byte[] handleGet( DirectMemoryRequest request, byte[] cacheResponseContent, HttpServletResponse resp,
+ HttpServletRequest req )
throws DirectMemoryException, IOException
{
resp.setContentType( DirectMemoryHttpConstants.JAVA_SERIALIZED_OBJECT_CONTENT_TYPE_HEADER );
Modified: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonContentTypeHandler.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonContentTypeHandler.java?rev=1293799&r1=1293798&r2=1293799&view=diff
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonContentTypeHandler.java (original)
+++ incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonContentTypeHandler.java Sun Feb 26 10:38:58 2012
@@ -41,7 +41,8 @@ public class JsonContentTypeHandler
private DirectMemoryWriter writer = DirectMemoryWriter.instance();
@Override
- public byte[] handleGet( DirectMemoryRequest request, byte[] cacheResponseContent, HttpServletResponse resp )
+ public byte[] handleGet( DirectMemoryRequest request, byte[] cacheResponseContent, HttpServletResponse resp,
+ HttpServletRequest req )
throws DirectMemoryException, IOException
{
DirectMemoryResponse response =
Added: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/TextPlainContentTypeHandler.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/TextPlainContentTypeHandler.java?rev=1293799&view=auto
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/TextPlainContentTypeHandler.java (added)
+++ incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/TextPlainContentTypeHandler.java Sun Feb 26 10:38:58 2012
@@ -0,0 +1,93 @@
+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.commons.io.IOUtils;
+import org.apache.directmemory.serialization.Serializer;
+import org.apache.directmemory.serialization.SerializerFactory;
+import org.apache.directmemory.serialization.SerializerNotFoundException;
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
+import java.io.IOException;
+
+/**
+ * @author Olivier Lamy
+ */
+public class TextPlainContentTypeHandler
+ implements ContentTypeHandler
+{
+
+ @Override
+ public byte[] handleGet( DirectMemoryRequest request, byte[] cacheResponseContent, HttpServletResponse resp,
+ HttpServletRequest req )
+ throws DirectMemoryException, IOException
+ {
+ DirectMemoryResponse response =
+ new DirectMemoryResponse().setKey( request.getKey() ).setCacheContent( cacheResponseContent );
+ try
+ {
+ String serializerClassName = req.getHeader( DirectMemoryHttpConstants.SERIALIZER_HTTP_HEADER );
+ Serializer serializer = SerializerFactory.createNewSerializer( serializerClassName );
+ String res = serializer.deserialize( cacheResponseContent, String.class );
+ resp.setContentType( MediaType.TEXT_PLAIN );
+ return res.getBytes();
+ }
+ catch ( SerializerNotFoundException e )
+ {
+ throw new DirectMemoryException( e.getMessage(), e );
+ }
+ catch ( ClassNotFoundException e )
+ {
+ throw new DirectMemoryException( e.getMessage(), e );
+ }
+ catch ( InstantiationException e )
+ {
+ throw new DirectMemoryException( e.getMessage(), e );
+ }
+ catch ( IllegalAccessException e )
+ {
+ throw new DirectMemoryException( e.getMessage(), e );
+ }
+ }
+
+ @Override
+ public DirectMemoryRequest handlePut( HttpServletRequest req, HttpServletResponse resp )
+ throws DirectMemoryException, IOException
+ {
+ String serializerClassName = req.getHeader( DirectMemoryHttpConstants.SERIALIZER_HTTP_HEADER );
+ DirectMemoryRequest request = new DirectMemoryRequest();
+ try
+ {
+ Serializer serializer = SerializerFactory.createNewSerializer( serializerClassName );
+ request.setCacheContent( serializer.serialize( IOUtils.toString( req.getInputStream() ) ) );
+ }
+ catch ( SerializerNotFoundException e )
+ {
+ throw new DirectMemoryException( e.getMessage(), e );
+ }
+ return request;
+
+ }
+}
Propchange: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/TextPlainContentTypeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/TextPlainContentTypeHandler.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTextPlainTypeTest.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTextPlainTypeTest.java?rev=1293799&view=auto
==============================================================================
--- incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTextPlainTypeTest.java (added)
+++ incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTextPlainTypeTest.java Sun Feb 26 10:38:58 2012
@@ -0,0 +1,114 @@
+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.directmemory.serialization.SerializerFactory;
+import org.apache.directmemory.serialization.StandardSerializer;
+import org.apache.directmemory.server.commons.DirectMemoryRequest;
+import org.apache.directmemory.server.commons.DirectMemoryResponse;
+import org.apache.directmemory.server.commons.ExchangeType;
+import org.apache.directmemory.test.Wine;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Olivier Lamy
+ */
+public class ServletWithClientTextPlainTypeTest
+ extends AbstractServletWithClientTest
+{
+ @Override
+ protected ExchangeType getExchangeType()
+ {
+ return ExchangeType.TEXT_PLAIN;
+ }
+
+ @Test
+ public void putAndGet()
+ throws Exception
+ {
+ client.put( new DirectMemoryRequest<String>( "bordeaux", "very great wine" ).setSerializer(
+ SerializerFactory.createNewSerializer( StandardSerializer.class ) ) );
+
+ DirectMemoryRequest<String> rq = new DirectMemoryRequest<String>( "bordeaux", String.class );
+
+ DirectMemoryResponse<String> response = client.retrieve( rq );
+
+ assertTrue( response.isFound() );
+ String wine = response.getResponse();
+
+ assertEquals( "very great wine", wine );
+ }
+
+ @Test
+ public void putAndGetAndDelete()
+ throws Exception
+ {
+
+ client.put( new DirectMemoryRequest<String>( "bordeaux", "very great wine" ).setSerializer(
+ SerializerFactory.createNewSerializer( StandardSerializer.class ) ) );
+
+ DirectMemoryResponse<String> response =
+ client.retrieve( new DirectMemoryRequest( "bordeaux", "very great wine" ) );
+
+ assertTrue( response.isFound() );
+ assertEquals( "very great wine", response.getResponse() );
+
+ DirectMemoryResponse deleteResponse = client.delete( new DirectMemoryRequest<Wine>( "bordeaux" ) );
+ assertTrue( deleteResponse.isDeleted() );
+
+ response = client.retrieve( new DirectMemoryRequest<String>( "bordeaux", String.class ) );
+
+ assertFalse( response.isFound() );
+ String res = response.getResponse();
+ assertNull( res );
+ }
+
+ @Test
+ public void putSmallExpiresAndGetNotFound()
+ throws Exception
+ {
+
+ client.delete( new DirectMemoryRequest<String>( "bordeaux" ) );
+
+ client.put( new DirectMemoryRequest<String>( "bordeaux", "very great wine" ).setSerializer(
+ SerializerFactory.createNewSerializer( StandardSerializer.class ) ).setExpiresIn( 1000 ) );
+
+ DirectMemoryRequest<String> rq = new DirectMemoryRequest<String>( "bordeaux", "very great wine" ).setSerializer(
+ SerializerFactory.createNewSerializer( StandardSerializer.class ) );
+
+ DirectMemoryResponse<String> response = client.retrieve( rq );
+
+ assertTrue( response.isFound() );
+ String wine = response.getResponse();
+
+ assertEquals( "very great wine", wine );
+
+ Thread.sleep( 10001 );
+
+ rq = new DirectMemoryRequest<String>( "bordeaux", "very great wine" );
+
+ response = client.retrieve( rq );
+
+ assertFalse( response.isFound() );
+
+ assertNull( response.getResponse() );
+ }
+}
Propchange: incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTextPlainTypeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ServletWithClientTextPlainTypeTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision