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();
//