You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directmemory.apache.org by si...@apache.org on 2012/02/26 21:51:13 UTC

svn commit: r1293931 - in /incubator/directmemory/trunk: directmemory-cache/src/main/java/org/apache/directmemory/ directmemory-cache/src/main/java/org/apache/directmemory/cache/ directmemory-cache/src/test/java/org/apache/directmemory/cache/ integrati...

Author: simonetripodi
Date: Sun Feb 26 20:51:12 2012
New Revision: 1293931

URL: http://svn.apache.org/viewvc?rev=1293931&view=rev
Log:
[DIRECTMEMORY-75] Create a CacheService builder to simplify the bootstrap process

Added:
    incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java   (with props)
    incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java   (with props)
Modified:
    incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
    incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java
    incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
    incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/cache/CacheServiceImplTest.java
    incubator/directmemory/trunk/integrations/   (props changed)
    incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java
    incubator/directmemory/trunk/integrations/solr/src/main/java/org/apache/directmemory/examples/solr/SolrOffHeapCache.java
    incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/DirectMemoryServlet.java

Added: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java?rev=1293931&view=auto
==============================================================================
--- incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java (added)
+++ incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java Sun Feb 26 20:51:12 2012
@@ -0,0 +1,180 @@
+package org.apache.directmemory;
+
+/*
+ * 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 static com.google.common.base.Preconditions.checkArgument;
+import static java.lang.String.format;
+import static org.apache.directmemory.measures.In.seconds;
+import static org.apache.directmemory.serialization.SerializerFactory.createNewSerializer;
+
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.directmemory.cache.CacheService;
+import org.apache.directmemory.cache.CacheServiceImpl;
+import org.apache.directmemory.measures.Ram;
+import org.apache.directmemory.memory.MemoryManagerService;
+import org.apache.directmemory.memory.MemoryManagerServiceImpl;
+import org.apache.directmemory.memory.Pointer;
+import org.apache.directmemory.serialization.Serializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.MapMaker;
+
+public final class DirectMemory<K, V>
+{
+
+    public static int DEFAULT_CONCURRENCY_LEVEL = 4;
+
+    public static int DEFAULT_INITIAL_CAPACITY = 100000;
+
+    public static int DEFAULT_DISPOSAL_TIME = 10; // seconds
+
+    private final Logger logger = LoggerFactory.getLogger( getClass() );
+
+    private int numberOfBuffers;
+
+    private int size;
+
+    private int initialCapacity = DEFAULT_INITIAL_CAPACITY;
+
+    private int concurrencyLevel = DEFAULT_CONCURRENCY_LEVEL;
+
+    private long disposalTime = seconds( DEFAULT_DISPOSAL_TIME );
+
+    private ConcurrentMap<K, Pointer<V>> map;
+
+    private Serializer serializer;
+
+    private MemoryManagerService<V> memoryManager;
+
+    public DirectMemory()
+    {
+        // does nothing
+    }
+
+    public DirectMemory( DirectMemory<K, V> prototype )
+    {
+        checkArgument( prototype != null, "Impossible to create a DirectMemory instance from a null prototype" );
+
+        numberOfBuffers = prototype.numberOfBuffers;
+        size = prototype.size;
+        initialCapacity = prototype.initialCapacity;
+        concurrencyLevel = prototype.concurrencyLevel;
+        disposalTime = prototype.disposalTime;
+
+        map = prototype.map;
+        serializer = prototype.serializer;
+        memoryManager = prototype.memoryManager;
+    }
+
+    public DirectMemory<K, V> setNumberOfBuffers( int numberOfBuffers )
+    {
+        checkArgument( numberOfBuffers > 0, "Impossible to create a CacheService with a number of buffers lesser than 1" );
+        this.numberOfBuffers = numberOfBuffers;
+        return this;
+    }
+
+    public DirectMemory<K, V> setSize( int size )
+    {
+        checkArgument( size > 0, "Impossible to create a CacheService with a size lesser than 1" );
+        this.size = size;
+        return this;
+    }
+
+    public DirectMemory<K, V> setInitialCapacity( int initialCapacity )
+    {
+        checkArgument( initialCapacity > 0, "Impossible to create a CacheService with an initialCapacity lesser than 1" );
+        this.initialCapacity = initialCapacity;
+        return this;
+    }
+
+    public DirectMemory<K, V> setConcurrencyLevel( int concurrencyLevel )
+    {
+        checkArgument( concurrencyLevel > 0, "Impossible to create a CacheService with a concurrencyLevel lesser than 1" );
+        this.concurrencyLevel = concurrencyLevel;
+        return this;
+    }
+
+    public DirectMemory<K, V> setDisposalTime( long disposalTime )
+    {
+        checkArgument( disposalTime > 0, "Impossible to create a CacheService with a disposalTime lesser than 1" );
+        this.disposalTime = disposalTime;
+        return this;
+    }
+
+    public DirectMemory<K, V> setMap( ConcurrentMap<K, Pointer<V>> map )
+    {
+        checkArgument( map != null, "Impossible to create a CacheService with a null map" );
+        this.map = map;
+        return this;
+    }
+
+    public DirectMemory<K, V> setSerializer( Serializer serializer )
+    {
+        checkArgument( serializer != null, "Impossible to create a CacheService with a null serializer" );
+        this.serializer = serializer;
+        return this;
+    }
+
+    public DirectMemory<K, V> setMemoryManager( MemoryManagerService<V> memoryManager )
+    {
+        checkArgument( memoryManager != null, "Impossible to create a CacheService with a null memoryManager" );
+        this.memoryManager = memoryManager;
+        return this;
+    }
+
+    public CacheService<K, V> newCacheService()
+    {
+        if ( map == null )
+        {
+            map = new MapMaker().concurrencyLevel( concurrencyLevel ).initialCapacity( initialCapacity ).makeMap();
+        }
+        if ( memoryManager == null )
+        {
+            memoryManager = new MemoryManagerServiceImpl<V>();
+        }
+        if ( serializer == null )
+        {
+            serializer = createNewSerializer();
+        }
+
+        logger.info( "******************************** initializing *******************************" );
+        logger.info( "         ____  _                 __  __  ___" );
+        logger.info( "        / __ \\(_)________  _____/ /_/  |/  /___  ____ ___  ____  _______  __" );
+        logger.info( "       / / / / // ___/ _ \\/ ___/ __/ /|_/ // _ \\/ __ `__ \\/ __ \\/ ___/ / / /" );
+        logger.info( "      / /_/ / // /  /  __/ /__/ /_/ /  / //  __/ / / / / / /_/ / /  / /_/ / " );
+        logger.info( "     /_____/_//_/   \\___/\\___/\\__/_/  /_/ \\___/_/ /_/ /_/\\____/_/   \\__, /" );
+        logger.info( "                                                                   /____/   " );
+        logger.info( "********************************************************************************" );
+
+        memoryManager.init( numberOfBuffers, size );
+
+        logger.info( "initialized" );
+        logger.info( format( "number of buffer(s): \t%1d  with %2s each", numberOfBuffers, Ram.inMb( size ) ) );
+        logger.info( format( "initial capacity: \t%1d", initialCapacity ) );
+        logger.info( format( "concurrency level: \t%1d", concurrencyLevel ) );
+
+        CacheService<K, V> cacheService = new CacheServiceImpl<K, V>( map, memoryManager, serializer );
+        cacheService.scheduleDisposalEvery( disposalTime );
+        return cacheService;
+    }
+
+}

Propchange: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/DirectMemory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java?rev=1293931&r1=1293930&r2=1293931&view=diff
==============================================================================
--- incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java (original)
+++ incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/Cache.java Sun Feb 26 20:51:12 2012
@@ -19,6 +19,9 @@ package org.apache.directmemory.cache;
  * under the License.
  */
 
+import static org.apache.directmemory.DirectMemory.*;
+
+import org.apache.directmemory.DirectMemory;
 import org.apache.directmemory.memory.MemoryManagerService;
 import org.apache.directmemory.memory.OffHeapMemoryBuffer;
 import org.apache.directmemory.memory.Pointer;
@@ -27,7 +30,9 @@ import org.apache.directmemory.serializa
 public class Cache
 {
 
-    private static CacheService<String, Object> cacheService = new CacheServiceImpl<String, Object>();
+    private static final DirectMemory<String, Object> builder = new DirectMemory<String, Object>();
+
+    private static CacheService<String, Object> cacheService = builder.newCacheService();
 
     // olamy chicken and eggs isssue
     // private static CacheService cacheService = new CacheServiceImpl( getMemoryManager());
@@ -39,17 +44,23 @@ public class Cache
 
     public static void scheduleDisposalEvery( long l )
     {
+        // store to builder
+        builder.setDisposalTime( l );
+
         cacheService.scheduleDisposalEvery( l );
     }
 
     public static void init( int numberOfBuffers, int size, int initialCapacity, int concurrencyLevel )
     {
-        cacheService.init( numberOfBuffers, size, initialCapacity, concurrencyLevel );
+        cacheService = builder.setNumberOfBuffers( numberOfBuffers )
+                              .setInitialCapacity( initialCapacity )
+                              .setConcurrencyLevel( concurrencyLevel )
+                              .newCacheService();
     }
 
     public static void init( int numberOfBuffers, int size )
     {
-        init( numberOfBuffers, size, CacheService.DEFAULT_INITIAL_CAPACITY, CacheService.DEFAULT_CONCURRENCY_LEVEL );
+        init( numberOfBuffers, size, DEFAULT_INITIAL_CAPACITY, DEFAULT_CONCURRENCY_LEVEL );
     }
 
     public static Pointer<Object> putByteArray( String key, byte[] payload, int expiresIn )

Modified: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java?rev=1293931&r1=1293930&r2=1293931&view=diff
==============================================================================
--- incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java (original)
+++ incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java Sun Feb 26 20:51:12 2012
@@ -30,13 +30,6 @@ import java.util.concurrent.ConcurrentMa
 public interface CacheService<K, V>
 {
 
-    public static int DEFAULT_CONCURRENCY_LEVEL = 4;
-    public static int DEFAULT_INITIAL_CAPACITY = 100000;
-
-    void init( int numberOfBuffers, int size, int initialCapacity, int concurrencyLevel );
-
-    void init( int numberOfBuffers, int size );
-
     void scheduleDisposalEvery( long l );
 
     Pointer<V> putByteArray( K key, byte[] payload, int expiresIn );

Modified: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java?rev=1293931&r1=1293930&r2=1293931&view=diff
==============================================================================
--- incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java (original)
+++ incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java Sun Feb 26 20:51:12 2012
@@ -19,16 +19,8 @@ package org.apache.directmemory.cache;
  * under the License.
  */
 
-import com.google.common.collect.MapMaker;
-import org.apache.directmemory.measures.Every;
-import org.apache.directmemory.measures.Ram;
-import org.apache.directmemory.memory.MemoryManagerService;
-import org.apache.directmemory.memory.MemoryManagerServiceImpl;
-import org.apache.directmemory.memory.OffHeapMemoryBuffer;
-import org.apache.directmemory.memory.Pointer;
-import org.apache.directmemory.serialization.Serializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkArgument;
+import static java.lang.String.format;
 
 import java.io.EOFException;
 import java.io.IOException;
@@ -36,8 +28,13 @@ import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.ConcurrentMap;
 
-import static java.lang.String.format;
-import static org.apache.directmemory.serialization.SerializerFactory.createNewSerializer;
+import org.apache.directmemory.measures.Ram;
+import org.apache.directmemory.memory.MemoryManagerService;
+import org.apache.directmemory.memory.OffHeapMemoryBuffer;
+import org.apache.directmemory.memory.Pointer;
+import org.apache.directmemory.serialization.Serializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class CacheServiceImpl<K, V>
     implements CacheService<K, V>
@@ -47,28 +44,26 @@ public class CacheServiceImpl<K, V>
 
     private ConcurrentMap<K, Pointer<V>> map;
 
-    private Serializer serializer = createNewSerializer();
+    private Serializer serializer;
 
-    private MemoryManagerService<V> memoryManager = new MemoryManagerServiceImpl<V>();
+    private MemoryManagerService<V> memoryManager;
 
     private final Timer timer = new Timer();
 
-
     /**
      * Constructor
      */
-    public CacheServiceImpl()
-    {
-    }
+    public CacheServiceImpl( ConcurrentMap<K, Pointer<V>> map,
+                             MemoryManagerService<V> memoryManager,
+                             Serializer serializer )
+    {
+        checkArgument( map != null, "Impossible to initialize the CacheService with a null map" );
+        checkArgument( memoryManager != null, "Impossible to initialize the CacheService with a null memoryManager" );
+        checkArgument( serializer != null, "Impossible to initialize the CacheService with a null serializer" );
 
-    /**
-     * Constructor
-     *
-     * @param memoryManager
-     */
-    public CacheServiceImpl( MemoryManagerService<V> memoryManager )
-    {
+        this.map = map;
         this.memoryManager = memoryManager;
+        this.serializer = serializer;
     }
 
     @Override
@@ -79,41 +74,15 @@ public class CacheServiceImpl<K, V>
             public void run()
             {
                 logger.info( "begin scheduled disposal" );
+
                 collectExpired();
                 collectLFU();
+
                 logger.info( "scheduled disposal complete" );
             }
         }, l );
-        logger.info( "disposal scheduled every " + l + " milliseconds" );
-    }
 
-    @Override
-    public void init( int numberOfBuffers, int size, int initialCapacity, int concurrencyLevel )
-    {
-        map = new MapMaker().concurrencyLevel( concurrencyLevel ).initialCapacity( initialCapacity ).makeMap();
-
-        logger.info( "******************************** initializing *******************************" );
-        logger.info( "         ____  _                 __  __  ___" );
-        logger.info( "        / __ \\(_)________  _____/ /_/  |/  /___  ____ ___  ____  _______  __" );
-        logger.info( "       / / / / // ___/ _ \\/ ___/ __/ /|_/ // _ \\/ __ `__ \\/ __ \\/ ___/ / / /" );
-        logger.info( "      / /_/ / // /  /  __/ /__/ /_/ /  / //  __/ / / / / / /_/ / /  / /_/ / " );
-        logger.info( "     /_____/_//_/   \\___/\\___/\\__/_/  /_/ \\___/_/ /_/ /_/\\____/_/   \\__, /" );
-        logger.info( "                                                                   /____/   " );
-        logger.info( "********************************************************************************" );
-
-        memoryManager.init( numberOfBuffers, size );
-
-        logger.info( "initialized" );
-        logger.info( format( "number of buffer(s): \t%1d  with %2s each", numberOfBuffers, Ram.inMb( size ) ) );
-        logger.info( format( "initial capacity: \t%1d", initialCapacity ) );
-        logger.info( format( "concurrency level: \t%1d", concurrencyLevel ) );
-        scheduleDisposalEvery( Every.seconds( 10 ) );
-    }
-
-    @Override
-    public void init( int numberOfBuffers, int size )
-    {
-        init( numberOfBuffers, size, DEFAULT_INITIAL_CAPACITY, DEFAULT_CONCURRENCY_LEVEL );
+        logger.info( "disposal scheduled every {} milliseconds", l );
     }
 
     @Override

Added: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java?rev=1293931&view=auto
==============================================================================
--- incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java (added)
+++ incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java Sun Feb 26 20:51:12 2012
@@ -0,0 +1,23 @@
+/**
+ * Apache DirectMemory cache APIs.
+ */
+package org.apache.directmemory;
+
+/*
+ * 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.
+ */

Propchange: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: incubator/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/package-info.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/cache/CacheServiceImplTest.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/cache/CacheServiceImplTest.java?rev=1293931&r1=1293930&r2=1293931&view=diff
==============================================================================
--- incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/cache/CacheServiceImplTest.java (original)
+++ incubator/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/cache/CacheServiceImplTest.java Sun Feb 26 20:51:12 2012
@@ -19,13 +19,15 @@ package org.apache.directmemory.cache;
  * under the License.
  */
 
+import static org.junit.Assert.assertTrue;
+
+import org.apache.directmemory.DirectMemory;
 import org.apache.directmemory.measures.Ram;
 import org.apache.directmemory.memory.AllocationPolicy;
 import org.apache.directmemory.memory.MemoryManagerService;
 import org.apache.directmemory.memory.MemoryManagerServiceWithAllocationPolicyImpl;
 import org.apache.directmemory.memory.Pointer;
 import org.apache.directmemory.memory.RoundRobinAllocationPolicy;
-import org.junit.Assert;
 import org.junit.Test;
 
 public class CacheServiceImplTest
@@ -37,8 +39,11 @@ public class CacheServiceImplTest
         AllocationPolicy<byte[]> allocationPolicy = new RoundRobinAllocationPolicy<byte[]>();
         MemoryManagerService<byte[]> memoryManager =
             new MemoryManagerServiceWithAllocationPolicyImpl<byte[]>( allocationPolicy, true );
-        CacheService<Integer, byte[]> cache = new CacheServiceImpl<Integer, byte[]>( memoryManager );
-        cache.init( 1, (int) ( Ram.Mb( 1 ) ) );
+        CacheService<Integer, byte[]> cache = new DirectMemory<Integer, byte[]>()
+                        .setMemoryManager( memoryManager )
+                        .setNumberOfBuffers( 1 )
+                        .setSize( Ram.Mb( 1 ) )
+                        .newCacheService();
 
         for ( int i = 0; i < 1000; i++ )
         {
@@ -48,8 +53,7 @@ public class CacheServiceImplTest
                 System.out.println( pointer );
             }
         }
-        Assert.assertTrue( "This test ensures that no unexpected errors/behaviours occurs when heap space is full",
-                           true );
+        assertTrue( "This test ensures that no unexpected errors/behaviours occurs when heap space is full", true );
 
     }
 

Propchange: incubator/directmemory/trunk/integrations/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Feb 26 20:51:12 2012
@@ -0,0 +1 @@
+target

Modified: incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java?rev=1293931&r1=1293930&r2=1293931&view=diff
==============================================================================
--- incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java (original)
+++ incubator/directmemory/trunk/integrations/ehcache/src/main/java/org/apache/directmemory/ehcache/DirectMemoryCache.java Sun Feb 26 20:51:12 2012
@@ -19,8 +19,13 @@ package org.apache.directmemory.ehcache;
  * under the License.
  */
 
+import static org.apache.directmemory.DirectMemory.DEFAULT_CONCURRENCY_LEVEL;
+import static org.apache.directmemory.DirectMemory.DEFAULT_INITIAL_CAPACITY;
+
+import java.util.Set;
+
+import org.apache.directmemory.DirectMemory;
 import org.apache.directmemory.cache.CacheService;
-import org.apache.directmemory.cache.CacheServiceImpl;
 import org.apache.directmemory.memory.MemoryManagerService;
 import org.apache.directmemory.memory.MemoryManagerServiceWithAllocationPolicyImpl;
 import org.apache.directmemory.memory.OffHeapMemoryBuffer;
@@ -28,8 +33,6 @@ import org.apache.directmemory.memory.Po
 import org.apache.directmemory.memory.RoundRobinAllocationPolicy;
 import org.apache.directmemory.serialization.Serializer;
 
-import java.util.Set;
-
 /**
  * @param <K>
  * @param <V>
@@ -38,19 +41,24 @@ import java.util.Set;
 public class DirectMemoryCache<K, V>
 {
 
-    private MemoryManagerService<V> memoryManager =
-        new MemoryManagerServiceWithAllocationPolicyImpl<V>( new RoundRobinAllocationPolicy<V>(), false );
-
-    private CacheServiceImpl<K, V> cacheService = new CacheServiceImpl<K, V>( memoryManager );
+    private final CacheService<K, V> cacheService;
 
     public DirectMemoryCache( int numberOfBuffers, int size, int initialCapacity, int concurrencyLevel )
     {
-        cacheService.init( numberOfBuffers, size, initialCapacity, concurrencyLevel );
+        MemoryManagerService<V> memoryManager =
+                    new MemoryManagerServiceWithAllocationPolicyImpl<V>( new RoundRobinAllocationPolicy<V>(), false );
+
+        cacheService = new DirectMemory<K, V>().setMemoryManager( memoryManager )
+                        .setNumberOfBuffers( numberOfBuffers )
+                        .setSize( size )
+                        .setInitialCapacity( initialCapacity )
+                        .setConcurrencyLevel( concurrencyLevel )
+                        .newCacheService();;
     }
 
     public DirectMemoryCache( int numberOfBuffers, int size )
     {
-        this( numberOfBuffers, size, CacheService.DEFAULT_INITIAL_CAPACITY, CacheService.DEFAULT_CONCURRENCY_LEVEL );
+        this( numberOfBuffers, size, DEFAULT_INITIAL_CAPACITY, DEFAULT_CONCURRENCY_LEVEL );
     }
 
     public void scheduleDisposalEvery( long l )

Modified: incubator/directmemory/trunk/integrations/solr/src/main/java/org/apache/directmemory/examples/solr/SolrOffHeapCache.java
URL: http://svn.apache.org/viewvc/incubator/directmemory/trunk/integrations/solr/src/main/java/org/apache/directmemory/examples/solr/SolrOffHeapCache.java?rev=1293931&r1=1293930&r2=1293931&view=diff
==============================================================================
--- incubator/directmemory/trunk/integrations/solr/src/main/java/org/apache/directmemory/examples/solr/SolrOffHeapCache.java (original)
+++ incubator/directmemory/trunk/integrations/solr/src/main/java/org/apache/directmemory/examples/solr/SolrOffHeapCache.java Sun Feb 26 20:51:12 2012
@@ -19,8 +19,13 @@ package org.apache.directmemory.examples
  * under the License.
  */
 
+import java.io.IOException;
+import java.net.URL;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.directmemory.DirectMemory;
 import org.apache.directmemory.cache.CacheService;
-import org.apache.directmemory.cache.CacheServiceImpl;
 import org.apache.directmemory.measures.Monitor;
 import org.apache.directmemory.measures.Ram;
 import org.apache.directmemory.serialization.Serializer;
@@ -33,11 +38,6 @@ import org.apache.solr.search.CacheRegen
 import org.apache.solr.search.SolrCache;
 import org.apache.solr.search.SolrIndexSearcher;
 
-import java.io.IOException;
-import java.net.URL;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
-
 /**
  * A {@link SolrCache} based on Apache DirectMemory
  */
@@ -78,9 +78,9 @@ public class SolrOffHeapCache<K, V>
 
     private String description = "DM Cache";
 
-    private static CacheService cacheService = new CacheServiceImpl();
+    private CacheService<K, V> cacheService;
 
-    public static CacheService getCacheService()
+    public CacheService<K, V> getCacheService()
     {
         return cacheService;
     }
@@ -88,18 +88,17 @@ public class SolrOffHeapCache<K, V>
     @Override
     public Object init( Map args, Object persistence, CacheRegenerator regenerator )
     {
+
+
         Object buffers = args.get( "buffers" );
         String sizeStr = String.valueOf( args.get( "size" ) );
         Integer capacity = Integer.parseInt( String.valueOf( args.get( "initialSize" ) ) );
 
-        int numberOfBuffers = buffers != null ? Integer.valueOf( String.valueOf( buffers ) ) : 1,
-            size = Ram.Mb( Double.valueOf( sizeStr ) / 512 ),
-            initialCapacity = Ram.Mb( Double.valueOf( capacity ) / 512 ),
-            concurrencyLevel = CacheService.DEFAULT_CONCURRENCY_LEVEL;
-
-        cacheService = new CacheServiceImpl();
-        //Cache.init( numberOfBuffers, size, initialCapacity, concurrencyLevel );
-        cacheService.init( numberOfBuffers, size, initialCapacity, concurrencyLevel );
+        cacheService = new DirectMemory<K, V>()
+                        .setNumberOfBuffers( buffers != null ? Integer.valueOf( String.valueOf( buffers ) ) : 1 )
+                        .setInitialCapacity( Ram.Mb( Double.valueOf( capacity ) / 512 ) )
+                        .setSize( Ram.Mb( Double.valueOf( sizeStr ) / 512 ) )
+                        .newCacheService();
 
         String serializerClassName = (String) args.get( "serializerClassName" );
         if ( serializerClassName != null )
@@ -169,7 +168,8 @@ public class SolrOffHeapCache<K, V>
             }
 
             inserts++;
-            return (V) cacheService.put( String.valueOf( key ), value );
+            cacheService.put( key, value );
+            return value;
         }
     }
 
@@ -178,7 +178,7 @@ public class SolrOffHeapCache<K, V>
     {
         synchronized ( this )
         {
-            V val = (V) cacheService.retrieve( String.valueOf( key ) );
+            V val = cacheService.retrieve( key );
             if ( state == State.LIVE )
             {
                 // only increment lookups and hits if we are live.

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=1293931&r1=1293930&r2=1293931&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 20:51:12 2012
@@ -18,9 +18,24 @@ package org.apache.directmemory.server.s
  * under the License.
  */
 
+import static java.lang.Integer.getInteger;
+import static org.apache.directmemory.DirectMemory.DEFAULT_CONCURRENCY_LEVEL;
+import static org.apache.directmemory.DirectMemory.DEFAULT_INITIAL_CAPACITY;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
+
 import org.apache.commons.lang.StringUtils;
+import org.apache.directmemory.DirectMemory;
 import org.apache.directmemory.cache.CacheService;
-import org.apache.directmemory.cache.CacheServiceImpl;
 import org.apache.directmemory.memory.Pointer;
 import org.apache.directmemory.server.commons.DirectMemoryException;
 import org.apache.directmemory.server.commons.DirectMemoryHttpConstants;
@@ -28,16 +43,6 @@ import org.apache.directmemory.server.co
 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 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
  *
@@ -49,7 +54,7 @@ public class DirectMemoryServlet
 
     private Logger log = LoggerFactory.getLogger( getClass() );
 
-    private CacheService cacheService = new CacheServiceImpl();
+    private CacheService<Object, Object> cacheService;
 
     private Map<String, ContentTypeHandler> contentTypeHandlers;
 
@@ -61,13 +66,15 @@ public class DirectMemoryServlet
         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 );
+
+        cacheService = new DirectMemory<Object, Object>()
+                        .setNumberOfBuffers( getInteger( "directMemory.numberOfBuffers", 1000 ) )
+                        .setSize( getInteger( "directMemory.size", 10 ) )
+                        .setInitialCapacity( getInteger( "directMemory.initialCapacity",
+                                                         DEFAULT_INITIAL_CAPACITY ) )
+                        .setConcurrencyLevel( getInteger( "directMemory.concurrencyLevel",
+                                                           DEFAULT_CONCURRENCY_LEVEL ) )
+                        .newCacheService();
 
         //