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