org.apache.openjpa.util
Class CacheMap

java.lang.Object
  extended by org.apache.openjpa.util.CacheMap
All Implemented Interfaces:
Map

public class CacheMap
extends Object
implements Map

Fixed-size map that has ability to pin/unpin entries and move overflow to a backing soft map.

Author:
Patrick Linskey, Abe White

Nested Class Summary
 
Nested classes/interfaces inherited from interface java.util.Map
Map.Entry<K,V>
 
Field Summary
protected  SizedMap cacheMap
          The map for non-expired and non-pinned references.
protected  Map pinnedMap
          The set of objects pinned into the cache.
protected  SizedMap softMap
          The map for expired references.
 
Constructor Summary
CacheMap()
          Create a non-LRU (and therefore highly concurrent) cache map with a size of 1000.
CacheMap(boolean lru, int max)
          Create a cache map with the given properties.
CacheMap(boolean lru, int max, int size, float load)
          Create a cache map with the given properties.
 
Method Summary
protected  void cacheMapOverflowRemoved(Object key, Object value)
          Called from SizedMap.overflowRemoved(java.lang.Object, java.lang.Object) in the cache map.
 void clear()
          Removes pinned objects as well as unpinned ones.
 boolean containsKey(Object key)
           
 boolean containsValue(Object val)
           
protected  void entryAdded(Object key, Object value)
          Invoked when an entry is added to the cache.
protected  void entryRemoved(Object key, Object value, boolean expired)
          Invoked when a key-value pair is evicted from this data structure.
 Set entrySet()
           
 Object get(Object key)
           
 int getCacheSize()
          The maximum number of hard references to maintain, or -1 for no limit.
 Set getPinnedKeys()
          The keys pinned into the map.
 int getSoftReferenceSize()
          The maximum number of soft references to maintain, or -1 for no limit.
 boolean isEmpty()
           
 boolean isLRU()
          Whether this cache map uses LRU eviction.
 Set keySet()
           
 boolean pin(Object key)
          Locks the given key and its value into the map.
protected  Object put(Map map, Object key, Object value)
          Put the given entry into the given map.
 Object put(Object key, Object value)
           
 void putAll(Map map)
           
 void readLock()
          Acquire read lock.
 void readUnlock()
          Release read lock.
protected  Object remove(Map map, Object key)
          Remove the given key from the given map.
 Object remove(Object key)
          If key is pinned into the cache, the pin is cleared and the object is removed.
 void setCacheSize(int size)
          The maximum number of hard references to maintain, or -1 for no limit.
 void setSoftReferenceSize(int size)
          The maximum number of soft references to maintain, or -1 for no limit.
 int size()
           
protected  void softMapOverflowRemoved(Object key, Object value)
          Called from SizedMap.overflowRemoved(java.lang.Object, java.lang.Object) in the soft map.
protected  void softMapValueExpired(Object key)
          Called when a value expires from the soft map.
 String toString()
           
 boolean unpin(Object key)
          Undo a pinning.
 Collection values()
           
 void writeLock()
          Acquire write lock.
 void writeUnlock()
          Release write lock.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Map
equals, hashCode
 

Field Detail

cacheMap

protected final SizedMap cacheMap
The map for non-expired and non-pinned references.


softMap

protected final SizedMap softMap
The map for expired references.


pinnedMap

protected final Map pinnedMap
The set of objects pinned into the cache.

Constructor Detail

CacheMap

public CacheMap()
Create a non-LRU (and therefore highly concurrent) cache map with a size of 1000.


CacheMap

public CacheMap(boolean lru,
                int max)
Create a cache map with the given properties.


CacheMap

public CacheMap(boolean lru,
                int max,
                int size,
                float load)
Create a cache map with the given properties.

Method Detail

cacheMapOverflowRemoved

protected void cacheMapOverflowRemoved(Object key,
                                       Object value)
Called from SizedMap.overflowRemoved(java.lang.Object, java.lang.Object) in the cache map.


softMapOverflowRemoved

protected void softMapOverflowRemoved(Object key,
                                      Object value)
Called from SizedMap.overflowRemoved(java.lang.Object, java.lang.Object) in the soft map.


softMapValueExpired

protected void softMapValueExpired(Object key)
Called when a value expires from the soft map.


put

protected Object put(Map map,
                     Object key,
                     Object value)
Put the given entry into the given map. Allows subclasses to take additional actions.


remove

protected Object remove(Map map,
                        Object key)
Remove the given key from the given map. Allows subclasses to take additional actions.


readLock

public void readLock()
Acquire read lock.


readUnlock

public void readUnlock()
Release read lock.


writeLock

public void writeLock()
Acquire write lock.


writeUnlock

public void writeUnlock()
Release write lock.


isLRU

public boolean isLRU()
Whether this cache map uses LRU eviction.


setCacheSize

public void setCacheSize(int size)
The maximum number of hard references to maintain, or -1 for no limit.


getCacheSize

public int getCacheSize()
The maximum number of hard references to maintain, or -1 for no limit.


setSoftReferenceSize

public void setSoftReferenceSize(int size)
The maximum number of soft references to maintain, or -1 for no limit.


getSoftReferenceSize

public int getSoftReferenceSize()
The maximum number of soft references to maintain, or -1 for no limit.


getPinnedKeys

public Set getPinnedKeys()
The keys pinned into the map.


pin

public boolean pin(Object key)
Locks the given key and its value into the map. Objects pinned into the map are not counted towards the maximum cache size, and are never evicted implicitly. You may pin keys for which no value is in the map.

Returns:
true if the givne key's value was pinned; false if no value for the given key is cached

unpin

public boolean unpin(Object key)
Undo a pinning.


entryRemoved

protected void entryRemoved(Object key,
                            Object value,
                            boolean expired)
Invoked when a key-value pair is evicted from this data structure. This is invoked with expired set to true when an object is dropped because of space requirements or through garbage collection of soft references. It is invoked with expired set to false when an object is explicitly removed via the remove(java.util.Map, java.lang.Object) or clear() methods. This may be invoked more than once for a given entry.

Parameters:
value - may be null if the value was a soft reference that has been GCd
Since:
0.2.5.0

entryAdded

protected void entryAdded(Object key,
                          Object value)
Invoked when an entry is added to the cache. This may be invoked more than once for an entry.


get

public Object get(Object key)
Specified by:
get in interface Map

put

public Object put(Object key,
                  Object value)
Specified by:
put in interface Map

putAll

public void putAll(Map map)
Specified by:
putAll in interface Map

remove

public Object remove(Object key)
If key is pinned into the cache, the pin is cleared and the object is removed.

Specified by:
remove in interface Map

clear

public void clear()
Removes pinned objects as well as unpinned ones.

Specified by:
clear in interface Map

size

public int size()
Specified by:
size in interface Map

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface Map

containsKey

public boolean containsKey(Object key)
Specified by:
containsKey in interface Map

containsValue

public boolean containsValue(Object val)
Specified by:
containsValue in interface Map

keySet

public Set keySet()
Specified by:
keySet in interface Map

values

public Collection values()
Specified by:
values in interface Map

entrySet

public Set entrySet()
Specified by:
entrySet in interface Map

toString

public String toString()
Overrides:
toString in class Object


Copyright © 2006-2010 Apache Software Foundation. All Rights Reserved.