-1 for using servlets Why doing everything manually, if there is stuff like content-type negotiation and so on.
2012/2/20 Simone Tripodi <[email protected]> > yeah, a servlet is more than enough to achieve our goal! :) > > http://people.apache.org/~simonetripodi/ > http://simonetripodi.livejournal.com/ > http://twitter.com/simonetripodi > http://www.99soft.org/ > > > > On Mon, Feb 20, 2012 at 5:52 PM, <[email protected]> wrote: > > Author: olamy > > Date: Mon Feb 20 16:52:25 2012 > > New Revision: 1291364 > > > > URL: http://svn.apache.org/viewvc?rev=1291364&view=rev > > Log: > > [DIRECTMEMORY-61] remove REST interface not needed > > add first implementation based on json exchagnge. > > > > Added: > > > > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java > (with props) > > > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/web.xml > (with props) > > incubator/directmemory/trunk/server/directmemory-server/src/test/ > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/ > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java > (with props) > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ExtractKeyFromPathTest.java > > - copied, changed from r1291362, > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/Wine.java > (contents, props changed) > > - copied, changed from r1291362, > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java > > > incubator/directmemory/trunk/server/directmemory-server/src/test/resources/ > > > > incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml > > - copied, changed from r1291362, > incubator/directmemory/trunk/server/directmemory-server-client/pom.xml > > Removed: > > > > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java > > Modified: > > incubator/directmemory/trunk/server/directmemory-server-client/pom.xml > > > incubator/directmemory/trunk/server/directmemory-server-commons/pom.xml > > > > incubator/directmemory/trunk/server/directmemory-server-commons/src/main/java/org/apache/directmemory/server/commons/DirectMemoryCacheWriter.java > > incubator/directmemory/trunk/server/directmemory-server/pom.xml > > incubator/directmemory/trunk/server/pom.xml > > > > Modified: > incubator/directmemory/trunk/server/directmemory-server-client/pom.xml > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-client/pom.xml?rev=1291364&r1=1291363&r2=1291364&view=diff > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server-client/pom.xml > (original) > > +++ > incubator/directmemory/trunk/server/directmemory-server-client/pom.xml Mon > Feb 20 16:52:25 2012 > > @@ -29,7 +29,6 @@ > > <modelVersion>4.0.0</modelVersion> > > > > <artifactId>directmemory-server-client</artifactId> > > - <packaging>war</packaging> > > <name>Apache DirectMemory :: Server :: Client</name> > > <description>${project.name}</description> > > > > > > Modified: > incubator/directmemory/trunk/server/directmemory-server-commons/pom.xml > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server-commons/pom.xml?rev=1291364&r1=1291363&r2=1291364&view=diff > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server-commons/pom.xml > (original) > > +++ > incubator/directmemory/trunk/server/directmemory-server-commons/pom.xml Mon > Feb 20 16:52:25 2012 > > @@ -29,7 +29,6 @@ > > <modelVersion>4.0.0</modelVersion> > > > > <artifactId>directmemory-server-commons</artifactId> > > - <packaging>war</packaging> > > <name>Apache DirectMemory :: Server :: Commons</name> > > <description>${project.name}</description> > > > > > > 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=1291364&r1=1291363&r2=1291364&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:52:25 2012 > > @@ -56,54 +56,6 @@ public class DirectMemoryCacheWriter > > this.jsonFactory = new JsonFactory(); > > } > > > > - public String generateXmlRequest( DirectMemoryCacheRequest request ) > > - throws DirectMemoryCacheException > > - { > > - try > > - { > > - StringWriter stringWriter = new StringWriter(); > > - XMLStreamWriter xmlStreamWriter = > xmlOutputFactory.createXMLStreamWriter( stringWriter ); > > - xmlStreamWriter.writeStartDocument( "1.0" ); > > - > > - xmlStreamWriter.writeStartElement( > DirectMemoryCacheConstants.ROOT_RQ_NAME ); > > - > > - xmlStreamWriter.writeAttribute( > DirectMemoryCacheConstants.KEY_FIELD_NAME, request.getKey() ); > > - xmlStreamWriter.writeAttribute( > DirectMemoryCacheConstants.PUT_FIELD_NAME, > > - Boolean.toString( > request.isUpdate() ) ); > > - xmlStreamWriter.writeAttribute( > DirectMemoryCacheConstants.EXPIRES_IN_FIELD_NAME, > > - Integer.toString( > request.getExpiresIn() ) ); > > - > > - if ( request.isUpdate() ) > > - { > > - // FIXME take care of NPE > > - // cache content generation > > - Serializer serializer = request.getSerializer(); > > - // if no Object users are able to pass a string content > > - byte[] bytes = request.getObject() != null > > - ? request.getSerializer().serialize( > request.getObject() ) > > - : request.getCacheContent(); > > - xmlStreamWriter.writeStartElement( > DirectMemoryCacheConstants.CACHE_CONTENT_FIELD_NAME ); > > - xmlStreamWriter.writeCData( new String( bytes ) );// > charset ? > > - xmlStreamWriter.writeEndElement(); > > - } > > - > > - xmlStreamWriter.writeEndElement(); > > - > > - xmlStreamWriter.writeEndDocument(); > > - > > - return stringWriter.toString(); > > - } > > - catch ( IOException e ) > > - { > > - throw new DirectMemoryCacheException( e.getMessage(), e ); > > - } > > - catch ( XMLStreamException e ) > > - { > > - throw new DirectMemoryCacheException( e.getMessage(), e ); > > - } > > - > > - } > > - > > public String generateJsonRequest( DirectMemoryCacheRequest request ) > > throws DirectMemoryCacheException > > { > > > > Modified: incubator/directmemory/trunk/server/directmemory-server/pom.xml > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/pom.xml?rev=1291364&r1=1291363&r2=1291364&view=diff > > > ============================================================================== > > --- incubator/directmemory/trunk/server/directmemory-server/pom.xml > (original) > > +++ incubator/directmemory/trunk/server/directmemory-server/pom.xml Mon > Feb 20 16:52:25 2012 > > @@ -41,6 +41,15 @@ > > <version>1.1.1</version> > > </dependency> > > <dependency> > > + <groupId>commons-lang</groupId> > > + <artifactId>commons-lang</artifactId> > > + </dependency> > > + <dependency> > > + <groupId>javax.servlet</groupId> > > + <artifactId>servlet-api</artifactId> > > + <version>2.5</version> > > + </dependency> > > + <dependency> > > <groupId>org.apache.directmemory.server</groupId> > > <artifactId>directmemory-server-commons</artifactId> > > </dependency> > > @@ -48,6 +57,49 @@ > > <groupId>org.slf4j</groupId> > > <artifactId>slf4j-api</artifactId> > > </dependency> > > + <dependency> > > + <groupId>junit</groupId> > > + <artifactId>junit</artifactId> > > + <scope>test</scope> > > + </dependency> > > + <dependency> > > + <groupId>ch.qos.logback</groupId> > > + <artifactId>logback-core</artifactId> > > + <scope>test</scope> > > + </dependency> > > + <dependency> > > + <groupId>ch.qos.logback</groupId> > > + <artifactId>logback-classic</artifactId> > > + <scope>test</scope> > > + </dependency> > > + <dependency> > > + <groupId>org.springframework</groupId> > > + <artifactId>spring-test</artifactId> > > + <version>3.1.1.RELEASE</version> > > + <scope>test</scope> > > + </dependency> > > + <dependency> > > + <groupId>org.springframework</groupId> > > + <artifactId>spring-core</artifactId> > > + <version>3.1.1.RELEASE</version> > > + <scope>test</scope> > > + </dependency> > > </dependencies> > > > > + <build> > > + <plugins> > > + <plugin> > > + <groupId>org.apache.maven.plugins</groupId> > > + <artifactId>maven-surefire-plugin</artifactId> > > + <configuration> > > + <systemPropertyVariables> > > + > <directMemory.numberOfBuffers>10</directMemory.numberOfBuffers> > > + <!-- must be enough confortable for test beans --> > > + <directMemory.size>10000</directMemory.size> > > + </systemPropertyVariables> > > + </configuration> > > + </plugin> > > + </plugins> > > + </build> > > + > > </project> > > \ No newline at end of file > > > > Added: > 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=1291364&view=auto > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java > (added) > > +++ > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java > Mon Feb 20 16:52:25 2012 > > @@ -0,0 +1,179 @@ > > +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.lang.StringUtils; > > +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; > > + > > +import javax.servlet.ServletConfig; > > +import javax.servlet.ServletException; > > +import javax.servlet.http.HttpServlet; > > +import javax.servlet.http.HttpServletRequest; > > +import javax.servlet.http.HttpServletResponse; > > +import java.io.IOException; > > + > > +/** > > + * TODO add some listener plugin mechanism to store figures/statistics > on cache access > > + * > > + * @author Olivier Lamy > > + */ > > +public class CacheServlet > > + extends HttpServlet > > +{ > > + > > + private Logger log = LoggerFactory.getLogger( getClass() ); > > + > > + private CacheService cacheService = new CacheServiceImpl(); > > + > > + private DirectMemoryCacheParser parser = > DirectMemoryCacheParser.instance(); > > + > > + private DirectMemoryCacheWriter writer = > DirectMemoryCacheWriter.instance(); > > + > > + @Override > > + public void init( ServletConfig config ) > > + throws ServletException > > + { > > + super.init( config ); > > + // TODO some configuration for cacheService.init( .... ); > different from sysproperties > > + //int numberOfBuffers, int size, int initialCapacity, int > concurrencyLevel > > + int numberOfBuffers = Integer.getInteger( > "directMemory.numberOfBuffers", 1000 ); > > + int size = Integer.getInteger( "directMemory.size", 10 ); > > + int initialCapacity = > > + Integer.getInteger( "directMemory.initialCapacity", > CacheService.DEFAULT_INITIAL_CAPACITY ); > > + int concurrencyLevel = > > + Integer.getInteger( "directMemory.concurrencyLevel", > CacheService.DEFAULT_CONCURRENCY_LEVEL ); > > + cacheService.init( numberOfBuffers, size, initialCapacity, > concurrencyLevel ); > > + } > > + > > + @Override > > + public void destroy() > > + { > > + super.destroy(); > > + } > > + > > + @Override > > + protected void doPost( HttpServletRequest req, HttpServletResponse > resp ) > > + throws ServletException, IOException > > + { > > + this.doPut( req, resp ); > > + } > > + > > + @Override > > + protected void doPut( HttpServletRequest req, HttpServletResponse > resp ) > > + throws ServletException, IOException > > + { > > + //TODO check request content to send > HttpServletResponse.SC_BAD_REQUEST > > + // if missing parameter in json request > > + > > + String path = req.getPathInfo(); > > + String servletPath = req.getServletPath(); > > + String key = retrieveKeyFromPath( path ); > > + > > + 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() ); > > + } > > + } > > + > > + @Override > > + protected void doDelete( HttpServletRequest req, > HttpServletResponse resp ) > > + throws ServletException, IOException > > + { > > + String path = req.getPathInfo(); > > + String servletPath = req.getServletPath(); > > + String key = retrieveKeyFromPath( path ); > > + > > + // TODO if key == null -> BAD_REQUEST http response > > + > > + cacheService.free( key ); > > + } > > + > > + @Override > > + protected void doGet( HttpServletRequest req, HttpServletResponse > resp ) > > + throws ServletException, IOException > > + { > > + // url format = /cache/key so get the key from path > > + String path = req.getPathInfo(); > > + String servletPath = req.getServletPath(); > > + String key = retrieveKeyFromPath( path ); > > + > > + if ( StringUtils.isEmpty( key ) ) > > + { > > + resp.sendError( HttpServletResponse.SC_BAD_REQUEST, "key > missing in path" ); > > + return; > > + } > > + > > + byte[] bytes = cacheService.retrieveByteArray( key ); > > + > > + if ( bytes == null ) > > + { > > + resp.sendError( HttpServletResponse.SC_NO_CONTENT, "No > content for key: " + key ); > > + return; > > + } > > + DirectMemoryCacheResponse response = new > DirectMemoryCacheResponse().setKey( key ).setCacheContent( bytes ); > > + > > + try > > + { > > + // TODO directly write in output stream > > + String json = writer.generateJsonResponse( response ); > > + resp.getWriter().write( json ); > > + } > > + catch ( DirectMemoryCacheException e ) > > + { > > + resp.sendError( > HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage() ); > > + } > > + } > > + > > + /** > > + * protected for unit test reason > > + * > > + * @param path > > + * @return > > + */ > > + protected String retrieveKeyFromPath( String path ) > > + { > > + if ( StringUtils.endsWith( path, "/" ) ) > > + { > > + return StringUtils.substringAfterLast( > StringUtils.substringBeforeLast( path, "/" ), "/" ); > > + } > > + return StringUtils.substringAfterLast( path, "/" ); > > + } > > +} > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java > > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java > > > ------------------------------------------------------------------------------ > > svn:keywords = Author Date Id Revision > > > > Added: > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/web.xml > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/web.xml?rev=1291364&view=auto > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/web.xml > (added) > > +++ > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/web.xml > Mon Feb 20 16:52:25 2012 > > @@ -0,0 +1,36 @@ > > +<?xml version="1.0" encoding="UTF-8"?> > > + > > +<!-- > > + ~ Copyright 2005-2006 The Apache Software Foundation. > > + ~ > > + ~ Licensed 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. > > + --> > > + > > +<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4" > > + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee > http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> > > + > > + <display-name>Apache DirectMemory</display-name> > > + > > + <servlet> > > + <servlet-name>CacheServlet</servlet-name> > > + > > <servlet-class>org.apache.directmemory.server.services.CacheServlet</servlet-class> > > + </servlet> > > + > > + <servlet-mapping> > > + <servlet-name>CacheServlet</servlet-name> > > + <url-pattern>/cache/*</url-pattern> > > + </servlet-mapping> > > + > > + > > +</web-app> > > \ No newline at end of file > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/web.xml > > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/main/webapp/WEB-INF/web.xml > > > ------------------------------------------------------------------------------ > > svn:keywords = Author Date Id Revision > > > > Added: > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java?rev=1291364&view=auto > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java > (added) > > +++ > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java > Mon Feb 20 16:52:25 2012 > > @@ -0,0 +1,273 @@ > > +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.Serializer; > > +import org.apache.directmemory.serialization.SerializerFactory; > > +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.junit.Before; > > +import org.junit.Test; > > +import org.slf4j.Logger; > > +import org.slf4j.LoggerFactory; > > +import org.springframework.mock.web.MockHttpServletRequest; > > +import org.springframework.mock.web.MockHttpServletResponse; > > +import org.springframework.mock.web.MockServletConfig; > > +import org.springframework.mock.web.MockServletContext; > > + > > +import javax.servlet.http.HttpServletResponse; > > +import java.io.ByteArrayInputStream; > > + > > +import static org.junit.Assert.assertEquals; > > + > > +/** > > + * @author Olivier Lamy > > + */ > > +public class CacheServletTest > > +{ > > + private Logger log = LoggerFactory.getLogger( getClass() ); > > + > > + CacheServlet cacheServlet = new CacheServlet(); > > + > > + DirectMemoryCacheWriter writer = DirectMemoryCacheWriter.instance(); > > + > > + DirectMemoryCacheParser parser = DirectMemoryCacheParser.instance(); > > + > > + @Before > > + public void init() > > + throws Exception > > + { > > + > > + MockServletContext mockServletContext = new > MockServletContext(); > > + mockServletContext.setContextPath( "direct-memory" ); > > + > > + MockServletConfig mockServletConfig = new MockServletConfig( > mockServletContext ); > > + > > + cacheServlet.init( mockServletConfig ); > > + } > > + > > + @Test > > + public void badRequest() > > + throws Exception > > + { > > + > > + MockHttpServletRequest request = new MockHttpServletRequest(); > > + > > + MockHttpServletResponse response = new > MockHttpServletResponse(); > > + > > + cacheServlet.doGet( request, response ); > > + > > + assertEquals( HttpServletResponse.SC_BAD_REQUEST, > response.getStatus() ); > > + > > + > > + } > > + > > + @Test > > + public void keyNotFound() > > + throws Exception > > + { > > + > > + MockHttpServletRequest request = new MockHttpServletRequest(); > > + > > + request.setServletPath( "cache" ); > > + > > + request.setPathInfo( "/foo" ); > > + > > + MockHttpServletResponse response = new > MockHttpServletResponse(); > > + > > + cacheServlet.doGet( request, response ); > > + > > + assertEquals( HttpServletResponse.SC_NO_CONTENT, > response.getStatus() ); > > + > > + } > > + > > + @Test > > + public void storeObject() > > + throws Exception > > + { > > + > > + Serializer serializer = SerializerFactory.createNewSerializer(); > > + > > + Wine bordeaux = new Wine( "Bordeaux", "very great wine" ); > > + > > + DirectMemoryCacheRequest directMemoryCacheRequest = > > + new DirectMemoryCacheRequest().setKey( "bordeaux" > ).setCacheContent( serializer.serialize( bordeaux ) ); > > + > > + String rq = writer.generateJsonRequest( > directMemoryCacheRequest ); > > + > > + MockHttpServletRequest putRequest = new > MockHttpServletRequest(); > > + > > + putRequest.setServletPath( "cache" ); > > + > > + putRequest.setPathInfo( "/bordeaux" ); > > + > > + putRequest.setContent( rq.getBytes() ); > > + > > + MockHttpServletResponse putResponse = new > MockHttpServletResponse(); > > + > > + cacheServlet.doPut( putRequest, putResponse ); > > + > > + assertEquals( HttpServletResponse.SC_OK, > putResponse.getStatus() ); > > + > > + // now retrieve the content > > + > > + MockHttpServletRequest getRequest = new > MockHttpServletRequest(); > > + > > + getRequest.setPathInfo( "/bordeaux" ); > > + > > + MockHttpServletResponse getResponse = new > MockHttpServletResponse(); > > + > > + cacheServlet.doGet( getRequest, getResponse ); > > + > > + assertEquals( HttpServletResponse.SC_OK, > getResponse.getStatus() ); > > + > > + DirectMemoryCacheResponse response = > > + parser.buildResponse( new ByteArrayInputStream( > getResponse.getContentAsByteArray() ) ); > > + > > + Wine wineFromCache = serializer.deserialize( > response.getCacheContent(), Wine.class ); > > + > > + assertEquals( bordeaux.getName(), wineFromCache.getName() ); > > + assertEquals( bordeaux.getDescription(), > wineFromCache.getDescription() ); > > + > > + } > > + > > + @Test > > + public void storeExpiredObject() > > + throws Exception > > + { > > + > > + Serializer serializer = SerializerFactory.createNewSerializer(); > > + > > + Wine bordeaux = new Wine( "Bordeaux", "very great wine" ); > > + > > + DirectMemoryCacheRequest directMemoryCacheRequest = > > + new DirectMemoryCacheRequest().setKey( "bordeaux" > ).setCacheContent( > > + serializer.serialize( bordeaux ) ).setExpiresIn( 3 ); > > + > > + String rq = writer.generateJsonRequest( > directMemoryCacheRequest ); > > + > > + MockHttpServletRequest putRequest = new > MockHttpServletRequest(); > > + > > + putRequest.setServletPath( "cache" ); > > + > > + putRequest.setPathInfo( "/bordeaux" ); > > + > > + putRequest.setContent( rq.getBytes() ); > > + > > + MockHttpServletResponse putResponse = new > MockHttpServletResponse(); > > + > > + cacheServlet.doPut( putRequest, putResponse ); > > + > > + assertEquals( HttpServletResponse.SC_OK, > putResponse.getStatus() ); > > + > > + Thread.sleep( 10 ); > > + > > + // now retrieve the content > > + > > + MockHttpServletRequest getRequest = new > MockHttpServletRequest(); > > + > > + getRequest.setPathInfo( "/bordeaux" ); > > + > > + MockHttpServletResponse getResponse = new > MockHttpServletResponse(); > > + > > + cacheServlet.doGet( getRequest, getResponse ); > > + > > + assertEquals( HttpServletResponse.SC_NO_CONTENT, > getResponse.getStatus() ); > > + > > + > > + } > > + > > + > > + @Test > > + public void storeObjectThenRemove() > > + throws Exception > > + { > > + > > + Serializer serializer = SerializerFactory.createNewSerializer(); > > + > > + Wine bordeaux = new Wine( "Bordeaux", "very great wine" ); > > + > > + DirectMemoryCacheRequest directMemoryCacheRequest = > > + new DirectMemoryCacheRequest().setKey( "bordeaux" > ).setCacheContent( serializer.serialize( bordeaux ) ); > > + > > + String rq = writer.generateJsonRequest( > directMemoryCacheRequest ); > > + > > + MockHttpServletRequest putRequest = new > MockHttpServletRequest(); > > + > > + putRequest.setServletPath( "cache" ); > > + > > + putRequest.setPathInfo( "/bordeaux" ); > > + > > + putRequest.setContent( rq.getBytes() ); > > + > > + MockHttpServletResponse putResponse = new > MockHttpServletResponse(); > > + > > + cacheServlet.doPut( putRequest, putResponse ); > > + > > + assertEquals( HttpServletResponse.SC_OK, > putResponse.getStatus() ); > > + > > + // now retrieve the content > > + > > + MockHttpServletRequest getRequest = new > MockHttpServletRequest(); > > + > > + getRequest.setPathInfo( "/bordeaux" ); > > + > > + MockHttpServletResponse getResponse = new > MockHttpServletResponse(); > > + > > + cacheServlet.doGet( getRequest, getResponse ); > > + > > + assertEquals( HttpServletResponse.SC_OK, > getResponse.getStatus() ); > > + > > + DirectMemoryCacheResponse response = > > + parser.buildResponse( new ByteArrayInputStream( > getResponse.getContentAsByteArray() ) ); > > + > > + Wine wineFromCache = serializer.deserialize( > response.getCacheContent(), Wine.class ); > > + > > + assertEquals( bordeaux.getName(), wineFromCache.getName() ); > > + assertEquals( bordeaux.getDescription(), > wineFromCache.getDescription() ); > > + > > + // now delete the content > > + > > + MockHttpServletRequest deleteRq = new MockHttpServletRequest(); > > + > > + deleteRq.setPathInfo( "/bordeaux" ); > > + > > + MockHttpServletResponse deleteResponse = new > MockHttpServletResponse(); > > + > > + cacheServlet.doDelete( deleteRq, deleteResponse ); > > + > > + assertEquals( HttpServletResponse.SC_OK, > deleteResponse.getStatus() ); > > + > > + // now try again a read MUST be not content > > + > > + getRequest = new MockHttpServletRequest(); > > + > > + getRequest.setPathInfo( "/bordeaux" ); > > + > > + getResponse = new MockHttpServletResponse(); > > + > > + cacheServlet.doGet( getRequest, getResponse ); > > + > > + assertEquals( HttpServletResponse.SC_NO_CONTENT, > getResponse.getStatus() ); > > + > > + } > > + > > +} > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java > > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java > > > ------------------------------------------------------------------------------ > > svn:keywords = Author Date Id Revision > > > > Copied: > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ExtractKeyFromPathTest.java > (from r1291362, > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java) > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ExtractKeyFromPathTest.java?p2=incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ExtractKeyFromPathTest.java&p1=incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java&r1=1291362&r2=1291364&rev=1291364&view=diff > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java > (original) > > +++ > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/ExtractKeyFromPathTest.java > Mon Feb 20 16:52:25 2012 > > @@ -1,5 +1,4 @@ > > package org.apache.directmemory.server.services; > > - > > /* > > * Licensed to the Apache Software Foundation (ASF) under one > > * or more contributor license agreements. See the NOTICE file > > @@ -19,37 +18,32 @@ package org.apache.directmemory.server.s > > * under the License. > > */ > > > > -import org.apache.directmemory.server.commons.DirectMemoryCacheRequest; > > -import org.apache.directmemory.server.commons.DirectMemoryCacheResponse; > > +import org.junit.Test; > > > > -import javax.ws.rs.Consumes; > > -import javax.ws.rs.DELETE; > > -import javax.ws.rs.GET; > > -import javax.ws.rs.PUT; > > -import javax.ws.rs.Path; > > -import javax.ws.rs.PathParam; > > -import javax.ws.rs.Produces; > > -import javax.ws.rs.core.MediaType; > > +import static junit.framework.Assert.assertEquals; > > > > /** > > * @author Olivier Lamy > > */ > > -@Path( "directMemoryService" ) > > -public interface DirectMemoryCacheService > > +public class ExtractKeyFromPathTest > > { > > - @GET > > - @Path( "retrieve/{key}" ) > > - @Produces( MediaType.APPLICATION_JSON ) > > - DirectMemoryCacheResponse retrieve( @PathParam( "key" ) String key > ); > > - > > - @PUT > > - @Path( "store" ) > > - @Produces( MediaType.APPLICATION_JSON ) > > - @Consumes( MediaType.APPLICATION_JSON ) > > - Boolean store( DirectMemoryCacheRequest request ); > > - > > - @DELETE > > - @Path( "delete/{key}" ) > > - Boolean delete( @PathParam( "key" ) String key ); > > > > + private CacheServlet cacheServlet = new CacheServlet(); > > + > > + @Test > > + public void pathEndedWithSlash() > > + throws Exception > > + { > > + String key = cacheServlet.retrieveKeyFromPath( "cache/foo/" ); > > + assertEquals( "foo", key ); > > + } > > + > > + @Test > > + public void pathNotEndedWithSlash() > > + throws Exception > > + { > > + String key = cacheServlet.retrieveKeyFromPath( "/cache/foo" ); > > + assertEquals( "foo", key ); > > + > > + } > > } > > > > Copied: > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/Wine.java > (from r1291362, > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java) > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/Wine.java?p2=incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/Wine.java&p1=incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java&r1=1291362&r2=1291364&rev=1291364&view=diff > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryCacheService.java > (original) > > +++ > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/Wine.java > Mon Feb 20 16:52:25 2012 > > @@ -1,5 +1,4 @@ > > package org.apache.directmemory.server.services; > > - > > /* > > * Licensed to the Apache Software Foundation (ASF) under one > > * or more contributor license agreements. See the NOTICE file > > @@ -19,37 +18,41 @@ package org.apache.directmemory.server.s > > * under the License. > > */ > > > > -import org.apache.directmemory.server.commons.DirectMemoryCacheRequest; > > -import org.apache.directmemory.server.commons.DirectMemoryCacheResponse; > > - > > -import javax.ws.rs.Consumes; > > -import javax.ws.rs.DELETE; > > -import javax.ws.rs.GET; > > -import javax.ws.rs.PUT; > > -import javax.ws.rs.Path; > > -import javax.ws.rs.PathParam; > > -import javax.ws.rs.Produces; > > -import javax.ws.rs.core.MediaType; > > +import java.io.Serializable; > > > > /** > > * @author Olivier Lamy > > */ > > -@Path( "directMemoryService" ) > > -public interface DirectMemoryCacheService > > +public class Wine > > + implements Serializable > > { > > - @GET > > - @Path( "retrieve/{key}" ) > > - @Produces( MediaType.APPLICATION_JSON ) > > - DirectMemoryCacheResponse retrieve( @PathParam( "key" ) String key > ); > > - > > - @PUT > > - @Path( "store" ) > > - @Produces( MediaType.APPLICATION_JSON ) > > - @Consumes( MediaType.APPLICATION_JSON ) > > - Boolean store( DirectMemoryCacheRequest request ); > > - > > - @DELETE > > - @Path( "delete/{key}" ) > > - Boolean delete( @PathParam( "key" ) String key ); > > + private String name; > > + > > + private String description; > > > > + public Wine( String name, String description ) > > + { > > + this.name = name; > > + this.description = description; > > + } > > + > > + public String getName() > > + { > > + return name; > > + } > > + > > + public void setName( String name ) > > + { > > + this.name = name; > > + } > > + > > + public String getDescription() > > + { > > + return description; > > + } > > + > > + public void setDescription( String description ) > > + { > > + this.description = description; > > + } > > } > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/Wine.java > > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > Propchange: > incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/Wine.java > > > ------------------------------------------------------------------------------ > > svn:keywords = Author Date Id Revision > > > > Copied: > incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml > (from r1291362, > incubator/directmemory/trunk/server/directmemory-server-client/pom.xml) > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml?p2=incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml&p1=incubator/directmemory/trunk/server/directmemory-server-client/pom.xml&r1=1291362&r2=1291364&rev=1291364&view=diff > > > ============================================================================== > > --- > incubator/directmemory/trunk/server/directmemory-server-client/pom.xml > (original) > > +++ > incubator/directmemory/trunk/server/directmemory-server/src/test/resources/logback-test.xml > Mon Feb 20 16:52:25 2012 > > @@ -1,37 +1,33 @@ > > -<?xml version="1.0" encoding="UTF-8"?> > > -<!-- > > - ~ 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. > > - --> > > - > > -<project xmlns="http://maven.apache.org/POM/4.0.0" > > - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 > http://maven.apache.org/xsd/maven-4.0.0.xsd"> > > - <parent> > > - <groupId>org.apache.directmemory.server</groupId> > > - <artifactId>server</artifactId> > > - <version>0.5.5-SNAPSHOT</version> > > - </parent> > > - <modelVersion>4.0.0</modelVersion> > > - > > - <artifactId>directmemory-server-client</artifactId> > > - <packaging>war</packaging> > > - <name>Apache DirectMemory :: Server :: Client</name> > > - <description>${project.name}</description> > > - > > - > > -</project> > > \ No newline at end of file > > +<?xml version="1.0" encoding="UTF-8"?> > > +<!-- > > + ~ 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. > > + --> > > +<configuration> > > + > > + <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> > > + <encoder> > > + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %method - > %msg%n</pattern> > > + </encoder> > > + </appender> > > + > > + <logger name="org.apache.directmemory.server" level="INFO"/> > > + <root level="INFO"> > > + <appender-ref ref="CONSOLE"/> > > + </root> > > + > > +</configuration> > > \ No newline at end of file > > > > Modified: incubator/directmemory/trunk/server/pom.xml > > URL: > http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/pom.xml?rev=1291364&r1=1291363&r2=1291364&view=diff > > > ============================================================================== > > --- incubator/directmemory/trunk/server/pom.xml (original) > > +++ incubator/directmemory/trunk/server/pom.xml Mon Feb 20 16:52:25 2012 > > @@ -43,6 +43,11 @@ > > <dependencyManagement> > > <dependencies> > > <dependency> > > + <groupId>commons-lang</groupId> > > + <artifactId>commons-lang</artifactId> > > + <version>2.6</version> > > + </dependency> > > + <dependency> > > <groupId>org.apache.directmemory.server</groupId> > > <artifactId>directmemory-server-commons</artifactId> > > <version>${project.version}</version> > > > > > -- Viele Grüße/Best Regards Daniel Manzke
