Author: olamy
Date: Mon Feb 20 16:54:09 2012
New Revision: 1291369
URL: http://svn.apache.org/viewvc?rev=1291369&view=rev
Log:
[DIRECTMEMORY-61] refactor to be able to handle more Content-Type easily.
Added:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheContentTypeHandler.java
(with props)
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonCacheContentTypeHandler.java
(with props)
Modified:
incubator/directmemory/trunk/pom.xml
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/DirectMemoryCacheWriter.java
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
Modified: incubator/directmemory/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/pom.xml?rev=1291369&r1=1291368&r2=1291369&view=diff
==============================================================================
--- incubator/directmemory/trunk/pom.xml (original)
+++ incubator/directmemory/trunk/pom.xml Mon Feb 20 16:54:09 2012
@@ -236,8 +236,8 @@ under the License.
<aspectj.bundle.version>1.6.8_2</aspectj.bundle.version>
<aspectj.version>1.6.11</aspectj.version>
<doclava.version>1.0.3</doclava.version>
- <guava.bundle.version>11_1</guava.bundle.version>
- <guava.version>11.0.1</guava.version>
+ <guava.bundle.version>09_1</guava.bundle.version>
+ <guava.version>r09</guava.version>
<h2.version>1.3.158</h2.version>
<karaf.version>2.2.4</karaf.version>
<junit.version>4.10</junit.version>
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=1291369&r1=1291368&r2=1291369&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:54:09 2012
@@ -23,7 +23,6 @@ import org.codehaus.jackson.JsonParseExc
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
-import javax.xml.stream.XMLInputFactory;
import java.io.IOException;
import java.io.InputStream;
@@ -32,7 +31,6 @@ import java.io.InputStream;
*/
public class DirectMemoryCacheParser
{
- private XMLInputFactory xmlInputFactory;
private JsonFactory jsonFactory;
@@ -41,9 +39,6 @@ public class DirectMemoryCacheParser
private DirectMemoryCacheParser()
{
- this.xmlInputFactory = XMLInputFactory.newInstance();
- this.xmlInputFactory.setProperty( XMLInputFactory.IS_NAMESPACE_AWARE,
Boolean.FALSE );
-
this.jsonFactory = new JsonFactory();
}
@@ -105,13 +100,6 @@ public class DirectMemoryCacheParser
JsonParser jp = this.jsonFactory.createJsonParser( inputStream );
DirectMemoryCacheResponse rs = new DirectMemoryCacheResponse();
- /* <DirectMemoryRS version="1.0" found="" updated="true" key="">
- * <cacheContent>
- * <![CDATA[
- * ]]>
- * </cacheContent>
- * </DirectMemoryRS>*/
-
while ( jp.nextToken() != JsonToken.END_OBJECT )
{
String fieldName = jp.getCurrentName();
Modified:
incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheWriter.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheWriter.java?rev=1291369&r1=1291368&r2=1291369&view=diff
==============================================================================
---
incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheWriter.java
(original)
+++
incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheWriter.java
Mon Feb 20 16:54:09 2012
@@ -24,9 +24,6 @@ import org.codehaus.jackson.JsonGenerato
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
import java.io.IOException;
import java.io.StringWriter;
@@ -35,8 +32,6 @@ import java.io.StringWriter;
*/
public class DirectMemoryCacheWriter
{
- private XMLOutputFactory xmlOutputFactory;
-
private JsonFactory jsonFactory;
private static final DirectMemoryCacheWriter INSTANCE = new
DirectMemoryCacheWriter();
@@ -50,9 +45,6 @@ public class DirectMemoryCacheWriter
private DirectMemoryCacheWriter()
{
- this.xmlOutputFactory = XMLOutputFactory.newInstance();
- this.xmlOutputFactory.setProperty(
XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.FALSE );
-
this.jsonFactory = new JsonFactory();
}
Added:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheContentTypeHandler.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheContentTypeHandler.java?rev=1291369&view=auto
==============================================================================
---
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheContentTypeHandler.java
(added)
+++
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheContentTypeHandler.java
Mon Feb 20 16:54:09 2012
@@ -0,0 +1,38 @@
+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.server.commons.DirectMemoryCacheException;
+import org.apache.directmemory.server.commons.DirectMemoryCacheRequest;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author Olivier Lamy
+ */
+public interface CacheContentTypeHandler
+{
+ byte[] handleGet( DirectMemoryCacheRequest request, byte[]
cacheResponseContent, HttpServletResponse response )
+ throws DirectMemoryCacheException, IOException;
+
+ DirectMemoryCacheRequest handlePut( HttpServletRequest request,
HttpServletResponse response )
+ throws DirectMemoryCacheException, IOException;
+}
Propchange:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheContentTypeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheContentTypeHandler.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
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=1291369&r1=1291368&r2=1291369&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:54:09 2012
@@ -22,10 +22,7 @@ import org.apache.commons.lang.StringUti
import org.apache.directmemory.cache.CacheService;
import org.apache.directmemory.cache.CacheServiceImpl;
import org.apache.directmemory.server.commons.DirectMemoryCacheException;
-import org.apache.directmemory.server.commons.DirectMemoryCacheParser;
import org.apache.directmemory.server.commons.DirectMemoryCacheRequest;
-import org.apache.directmemory.server.commons.DirectMemoryCacheResponse;
-import org.apache.directmemory.server.commons.DirectMemoryCacheWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,6 +33,8 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.MediaType;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
/**
* TODO add some listener plugin mechanism to store figures/statistics on
cache access
@@ -48,11 +47,12 @@ public class CacheServlet
private Logger log = LoggerFactory.getLogger( getClass() );
+ public static final String JAVA_SERIALIZED_OBJECT_CONTENT_TYPE_HEADER =
"application/x-java-serialized-object";
+
private CacheService cacheService = new CacheServiceImpl();
- private DirectMemoryCacheParser parser =
DirectMemoryCacheParser.instance();
+ private Map<String, CacheContentTypeHandler> contentTypeHandlers;
- private DirectMemoryCacheWriter writer =
DirectMemoryCacheWriter.instance();
@Override
public void init( ServletConfig config )
@@ -68,6 +68,11 @@ public class CacheServlet
int concurrencyLevel =
Integer.getInteger( "directMemory.concurrencyLevel",
CacheService.DEFAULT_CONCURRENCY_LEVEL );
cacheService.init( numberOfBuffers, size, initialCapacity,
concurrencyLevel );
+
+ //
+
+ contentTypeHandlers = new HashMap<String, CacheContentTypeHandler>( 1
);
+ contentTypeHandlers.put( MediaType.APPLICATION_JSON, new
JsonCacheContentTypeHandler() );
}
@Override
@@ -94,34 +99,52 @@ public class CacheServlet
String servletPath = req.getServletPath();
String key = retrieveKeyFromPath( path );
- String contentType = req.getContentType();
+ DirectMemoryCacheRequest cacheRequest = null;
- if ( StringUtils.startsWith( contentType, MediaType.APPLICATION_JSON )
)
+ CacheContentTypeHandler contentTypeHandler =
findPutCacheContentTypeHandler( req, resp );
+
+ if ( contentTypeHandler == null )
{
- // application/json
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "Content-Type '" + req.getContentType() + "' not
supported" );
+ }
- try
- {
- DirectMemoryCacheRequest cacheRequest = parser.buildRequest(
req.getInputStream() );
-
- //exists ?
- if ( cacheService.retrieveByteArray( key ) == null )
- {
- cacheService.putByteArray( key,
cacheRequest.getCacheContent(), cacheRequest.getExpiresIn() );
- }
- else
- {
- cacheService.updateByteArray( key,
cacheRequest.getCacheContent() );
- }
- }
- catch ( DirectMemoryCacheException e )
- {
- resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
- }
+ // application/json
+ contentTypeHandlers.get( MediaType.APPLICATION_JSON );
+ try
+ {
+ cacheRequest = contentTypeHandler.handlePut( req, resp );
+ }
+ catch ( DirectMemoryCacheException e )
+ {
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
return;
}
- resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
- "Content-Type '" + contentType + "' not supported" );
+
+ //exists ?
+ if ( cacheService.retrieveByteArray( key ) == null )
+ {
+ cacheService.putByteArray( key, cacheRequest.getCacheContent(),
cacheRequest.getExpiresIn() );
+ }
+ else
+ {
+ cacheService.updateByteArray( key, cacheRequest.getCacheContent()
);
+ }
+
+
+ }
+
+ protected CacheContentTypeHandler findPutCacheContentTypeHandler(
HttpServletRequest req,
+
HttpServletResponse response )
+ {
+
+ String contentType = req.getContentType();
+ if ( StringUtils.startsWith( contentType, MediaType.APPLICATION_JSON )
)
+ {
+ // application/json
+ return contentTypeHandlers.get( MediaType.APPLICATION_JSON );
+ }
+ return null;
}
@Override
@@ -162,26 +185,47 @@ public class CacheServlet
String acceptContentType = req.getHeader( "Accept" );
- if ( StringUtils.contains( acceptContentType,
MediaType.APPLICATION_JSON ) )
+ if ( StringUtils.isEmpty( acceptContentType ) )
{
- DirectMemoryCacheResponse response = new
DirectMemoryCacheResponse().setKey( key ).setCacheContent( bytes );
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "you must specify Accept with Content-Type you
want in the response" );
+ return;
+ }
- try
- {
- // TODO directly write in output stream
- String json = writer.generateJsonResponse( response );
- resp.getWriter().write( json );
- resp.setContentType( MediaType.APPLICATION_JSON );
- }
- catch ( DirectMemoryCacheException e )
- {
- resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
- }
+ CacheContentTypeHandler contentTypeHandler =
findGetCacheContentTypeHandler( req, resp );
+
+ if ( contentTypeHandler == null )
+ {
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "Content-Type: " + acceptContentType + " not
supported" );
return;
}
- resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
- "you must specify Accept with Content-Type you want in
the response" );
+ try
+ {
+ byte[] respBytes =
+ contentTypeHandler.handleGet( new
DirectMemoryCacheRequest().setKey( key ), bytes, resp );
+ resp.getOutputStream().write( respBytes );
+ }
+ catch ( DirectMemoryCacheException e )
+ {
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
+ }
+
+
+ }
+
+ protected CacheContentTypeHandler findGetCacheContentTypeHandler(
HttpServletRequest req,
+
HttpServletResponse response )
+ {
+
+ String acceptContentType = req.getHeader( "Accept" );
+ if ( StringUtils.contains( acceptContentType,
MediaType.APPLICATION_JSON ) )
+ {
+ // application/json
+ return contentTypeHandlers.get( MediaType.APPLICATION_JSON );
+ }
+ return null;
}
/**
@@ -190,6 +234,7 @@ public class CacheServlet
* @param path
* @return
*/
+
protected String retrieveKeyFromPath( String path )
{
if ( StringUtils.endsWith( path, "/" ) )
Added:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonCacheContentTypeHandler.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonCacheContentTypeHandler.java?rev=1291369&view=auto
==============================================================================
---
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonCacheContentTypeHandler.java
(added)
+++
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonCacheContentTypeHandler.java
Mon Feb 20 16:54:09 2012
@@ -0,0 +1,64 @@
+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.server.commons.DirectMemoryCacheException;
+import org.apache.directmemory.server.commons.DirectMemoryCacheParser;
+import org.apache.directmemory.server.commons.DirectMemoryCacheRequest;
+import org.apache.directmemory.server.commons.DirectMemoryCacheResponse;
+import org.apache.directmemory.server.commons.DirectMemoryCacheWriter;
+
+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 JsonCacheContentTypeHandler
+ implements CacheContentTypeHandler
+{
+
+ private DirectMemoryCacheParser parser =
DirectMemoryCacheParser.instance();
+
+ private DirectMemoryCacheWriter writer =
DirectMemoryCacheWriter.instance();
+
+ @Override
+ public byte[] handleGet( DirectMemoryCacheRequest request, byte[]
cacheResponseContent, HttpServletResponse resp )
+ throws DirectMemoryCacheException, IOException
+ {
+ DirectMemoryCacheResponse response =
+ new DirectMemoryCacheResponse().setKey( request.getKey()
).setCacheContent( cacheResponseContent );
+ String json = writer.generateJsonResponse( response );
+ resp.setContentType( MediaType.APPLICATION_JSON );
+ return json.getBytes();
+ }
+
+ @Override
+ public DirectMemoryCacheRequest handlePut( HttpServletRequest req,
HttpServletResponse resp )
+ throws DirectMemoryCacheException, IOException
+ {
+ // application/json
+
+ DirectMemoryCacheRequest cacheRequest = parser.buildRequest(
req.getInputStream() );
+ return cacheRequest;
+
+ }
+}
Propchange:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonCacheContentTypeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/JsonCacheContentTypeHandler.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision