DIRECTMEMORY-121, DIRECTMEMORY-122 Added void scheduleDisposalEvery( long period, TimeUnit unit ) to CacheService.java to give users a nice interface to schedule the disposal interval and started documenting the API interfaces

git-svn-id: https://svn.apache.org/repos/asf/directmemory/trunk@1425903 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java b/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java
index 5031483..b61253a 100644
--- a/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java
+++ b/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheService.java
@@ -19,67 +19,188 @@
  * under the License.
  */
 
+import java.io.Closeable;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.directmemory.memory.MemoryManagerService;
 import org.apache.directmemory.memory.Pointer;
 import org.apache.directmemory.serialization.Serializer;
-
-import java.io.Closeable;
-import java.util.concurrent.ConcurrentMap;
+import org.slf4j.Logger;
 
 public interface CacheService<K, V>
     extends Closeable
 {
 
-    void scheduleDisposalEvery( long l );
+    /**
+     * Schedules the disposal event with the given period in milliseconds.
+     * 
+     * @param period The time period in milliseconds
+     */
+    void scheduleDisposalEvery( long period );
 
     /**
-     * @param key
-     * @param payload
-     * @param expiresIn in ms
-     * @return
+     * Schedules the disposal event with the given period with the given {@link TimeUnit}.
+     * 
+     * @param period The time period
+     * @param unit The period's timeunit
      */
-    Pointer<V> putByteArray( K key, byte[] payload, int expiresIn );
+    void scheduleDisposalEvery( long period, TimeUnit unit );
 
+    /**
+     * Stored a preserialized payload with the given key. The expiration is set to the given expiresIn value in
+     * milliseconds. If not enough space found to store the payload the returned pointer is null.
+     * 
+     * @param key The key to save the payload with
+     * @param payload The preserialized payload as bytearray
+     * @param expiresIn The expiration delay
+     * @return The created pointer to directly retrieve the payload or null if not enough space was found
+     */
+    Pointer<V> putByteArray( K key, byte[] payload, long expiresIn );
+
+    /**
+     * Stored a preserialized payload with the given key with no expiration value. If not enough space found to store
+     * the payload the returned pointer is null.
+     * 
+     * @param key The key to save the payload with
+     * @param payload The preserialized payload as bytearray
+     * @return The created pointer to directly retrieve the payload or null if not enough space was found
+     */
     Pointer<V> putByteArray( K key, byte[] payload );
 
-    Pointer<V> put( K key, V value );
-
     /**
-     * @param key
-     * @param value
-     * @param expiresIn in ms
-     * @return
+     * Serializes and stored the given value using the key and sets the expiresIn value for the expiration of the key.
+     * If not enough space found to store the payload the returned pointer is null.
+     * 
+     * @param key The key to save the value with
+     * @param value The value to serialize and store
+     * @param expiresIn The expiration delay
+     * @return The created pointer to directly retrieve the payload or null if not enough space was found
      */
     Pointer<V> put( K key, V value, int expiresIn );
 
+    /**
+     * Serializes and stored the given value using the key with no expiration value. If not enough space found to store
+     * the payload the returned pointer is null.
+     * 
+     * @param key The key to save the value with
+     * @param value The value to serialize and store
+     * @return The created pointer to directly retrieve the payload or null if not enough space was found
+     */
+    Pointer<V> put( K key, V value );
+
+    /**
+     * Retrieves the stored payload for key as a bytearray. If no pointer is found for the given key null is returned.
+     * 
+     * @param key The key to retrieve
+     * @return The payload as bytearray or null if key was not found
+     */
     byte[] retrieveByteArray( K key );
 
+    /**
+     * Retrieves the stored, deserialized value for key. If no pointer is found for the given key null is returned.
+     * 
+     * @param key The key to retrieve
+     * @return The deserialized value or null if key was not found
+     */
     V retrieve( K key );
 
+    /**
+     * Retrieves the accociated {@link Pointer} to the given key or null if no pointer was found.
+     * 
+     * @param key The key to retrieve
+     * @return The pointer of the key or null if key was not found
+     */
     Pointer<V> getPointer( K key );
 
+    /**
+     * Removes the key and frees the underlying memory area.
+     * 
+     * @param key The key to remove
+     */
     void free( K key );
 
+    /**
+     * Removes the pointer and frees the underlying memory area.
+     * 
+     * @param key The pointer to remove
+     */
     void free( Pointer<V> pointer );
 
+    /**
+     * Tells the {@link CacheService} to collect and remove all expired keys. In most cases this is automatically
+     * handled by scheduling a disposal interval using {@link CacheService#scheduleDisposalEvery} and there are very
+     * rare cases where this needs to be called manually.
+     */
     void collectExpired();
 
+    /**
+     * Tells the {@link CacheService} to collect and remove all least frequently used keys. This operation could
+     * possibly clear the whole cache if there were no recent actions. In most cases this is automatically handled by
+     * scheduling a disposal interval using {@link CacheService#scheduleDisposalEvery} and there are very rare cases
+     * where this needs to be called manually.
+     */
     void collectLFU();
 
+    /**
+     * Tells the {@link CacheService} to collect and remove all expired AND least frequently used keys. In most cases
+     * this is automatically handled by scheduling a disposal interval using {@link CacheService#scheduleDisposalEvery}
+     * and there are very rare cases where this needs to be called manually.
+     */
     void collectAll();
 
+    /**
+     * Clears the whole cache by removing all stored keys. It is up to the underlying {@link MemoryManagerService}
+     * implementation to free allocated memory or not.
+     */
     void clear();
 
+    /**
+     * Retrieves the count of the current entries.
+     * 
+     * @return Number of entries
+     */
     long entries();
 
+    /**
+     * Dumps information about the actual internal {@link MemoryManagerService} to the configured {@link Logger} with
+     * info loglevel.
+     */
     void dump();
 
-    ConcurrentMap<K, Pointer<V>> getMap();
+    /**
+     * Retrieves a map of all available keys and their according {@link Pointer}s. It is up to the {@link CacheService}
+     * implementation if the retrieved map is threadsafe or not. The standard implementation uses a
+     * {@link ConcurrentHashMap}.
+     * 
+     * @return A mapping of keys to their according pointers
+     */
+    Map<K, Pointer<V>> getMap();
 
+    /**
+     * Retrieves the internally used {@link Serializer} implementation.
+     * 
+     * @return The used serializer
+     */
     Serializer getSerializer();
 
+    /**
+     * Retrieves the internally used {@link MemoryManagerService} implementation.
+     * 
+     * @return The used memory manager
+     */
     MemoryManagerService<V> getMemoryManager();
 
+    /**
+     * Explicitly allocated a bunch of bytes in the cache using a given key and type and returns the created
+     * {@link Pointer}.
+     * 
+     * @param key The key to store as
+     * @param type The datatype of the underlying data
+     * @param size The size to allocate for this pointer
+     * @return
+     */
     <T extends V> Pointer<V> allocate( K key, Class<T> type, int size );
 
 }
diff --git a/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java b/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
index 21e7c74..76b0920 100644
--- a/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
+++ b/directmemory-cache/src/main/java/org/apache/directmemory/cache/CacheServiceImpl.java
@@ -31,6 +31,7 @@
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static java.lang.String.format;
@@ -65,7 +66,13 @@
     }
 
     @Override
-    public void scheduleDisposalEvery( long l )
+    public void scheduleDisposalEvery( long period, TimeUnit unit )
+    {
+        scheduleDisposalEvery( unit.toMillis( period ) );
+    }
+    
+    @Override
+    public void scheduleDisposalEvery( long period )
     {
         timer.schedule( new TimerTask()
         {
@@ -78,9 +85,9 @@
 
                 logger.info( "scheduled disposal complete" );
             }
-        }, l, l );
+        }, period, period );
 
-        logger.info( "disposal scheduled every {} milliseconds", l );
+        logger.info( "disposal scheduled every {} milliseconds", period );
     }
 
     @Override
@@ -90,7 +97,7 @@
     }
 
     @Override
-    public Pointer<V> putByteArray( K key, byte[] payload, int expiresIn )
+    public Pointer<V> putByteArray( K key, byte[] payload, long expiresIn )
     {
         return store( key, payload, expiresIn );
     }
@@ -132,7 +139,7 @@
         }
     }
 
-    private Pointer<V> store( K key, byte[] payload, int expiresIn )
+    private Pointer<V> store( K key, byte[] payload, long expiresIn )
     {
         Pointer<V> pointer = map.get( key );
         if ( pointer != null )