📜 ⬆️ ⬇️

SoftReference Read-Write Cache for Hibernate - with “tails” for cluster implementation

In this topic I will try to talk about the implementation of the data caching system in the CMS ArpSite. This subsystem has already been rewritten more than once, but it is precisely what allows the system to work with an acceptable response time in general.

Using SoftReference makes it possible to leave the caching behavior “on the drain” - the JVM itself monitors the memory consumption, it also clears the old elements.

“Cluster” means that the cache independently monitors invalidation events (obsolescence, updates) of values ​​and ensures that obsolete items are discarded from the cache on other servers in the cluster. There are other cluster cache definitions. For example, the main mode of operation of JBoss Cache can even "pull" elements from other nodes of the cluster if they are not on the current machine. But for our system, where the speed of receiving an element from another machine is not much less than the speed of element generation, it is quite invalid.
')
Read-Write means that we do not use blocking of cache elements and generally do not think (almost) that there are any independent transactions in our system. For CMS this is normal, but, of course, for any enterprise application this would be unacceptable.

Currently, caching in ArpSite is divided into three levels:

The remaining caches are not randomly located in the middle. The generated pages are what will be given to the user immediately - if the URL and some other parameters match. Appeals to the database for this is not necessary at all. Data caching is what is now called the second level cache in Hibernate — individual lines of the database are cached (by key) and some popular database queries (by arguments). The remaining caches are understood to be different mechanisms for caching intermediate results of page generation, caching of XSLT style sheets, pieces of XML and others.

In case there is a change in the system, we need to clear the caches. To do this, the system generates one or more events (events) at each data change. These events are sent asynchronously to the rest of the cluster nodes, after which the caches respond to these events by completely clearing or disabling individual items.

The less impact events have on a cache, the better it works. Obviously, the cache of the generated pages is cleared for any change - trying to analyze the dependencies of page elements on specific database rows is too expensive.

Data cache on each server. And earlier, before the introduction of the cache on JGroups, if an event occurred, the application caused the commands to invalidate the data cache or to completely clean it based on information from the incoming event. This procedure worked, but it had a serious drawback - any data caching required either to think in detail about the procedure for reacting to events, or simply to clear the cache for each change. What is happening now in the "other" caches. It was especially problematic to write the caching of individual queries to the database - it was necessary to remember which tables were used in the query and to clear the cache when the data in these tables changed. And such code needed to be written for each request that we want to cache ...

But this is what Hibernate is already doing on its own! Hibernate knows what caches need to be cleared for a particular data change, and you just need to “peep”, what it does on one node, and do the same thing on the others.

New Cache API for Hibernate


In Hibernate terminology, one Cache is a single piece of cache that contains a set of equally typed data. For example, data from one table, or data, for example, immediately for all cached database queries. In order to control the caching behavior in Hibernate, the programmer indicates which CacheProvider to use. This may be, for example, EhCacheProvider or trivial HashtableCacheProvider or NoCacheProvider.

In version 3.3, Hibernate introduced a new caching API, dividing one old Cache interface into several:
Region
** General Data Region
**** Query Results Region
**** Timestamps Region
** Transactional Data Region
**** Collection Region
**** Entity Region

Also, each Region now provides methods for working out of context (destroy, getSize, getName ()), the General Data Region has standard get / put methods, and the transaction data region organizes data handling through the Strategy pattern - CollectionRegionAccessStrategy for the Collection Region and EntityRegionAccessStrategy for Entity Region. These interfaces include, among other things, commands for managing data locks in transactions.

We already had a cache for Hibernate, based on the old API. But he had to be abandoned because the old API did not allow to distinguish the addition of data to the cache from the database from their update (as they are outdated). Therefore, the first step was the implementation of the new API, but on the basis of Region / Strategy. It was a great help that Hibernate has implementations of adapters from the new API to the old one. You can simply peek at the implementation, for example, EntityRegionAccessStrategy based on non-transaction cache. What was done.

The basis of the API is Region:
abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  1. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  2. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  3. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  4. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  5. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  6. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  7. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  8. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  9. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  10. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  11. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  12. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  13. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  14. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  15. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  16. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  17. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  18. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  19. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  20. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  21. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  22. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  23. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  24. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  25. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  26. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  27. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  28. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  29. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  30. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  31. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  32. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  33. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  34. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  35. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  36. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  37. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  38. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  39. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  40. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  41. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  42. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  43. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  44. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  45. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  46. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  47. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  48. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  49. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  50. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  51. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  52. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  53. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  54. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  55. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  56. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  57. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  58. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  59. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  60. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  61. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  62. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  63. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  64. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  65. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  66. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  67. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  68. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  69. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  70. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  71. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  72. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  73. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  74. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  75. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  76. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  77. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  78. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  79. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  80. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  81. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  82. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  83. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  84. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  85. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  86. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  87. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  88. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  89. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  90. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  91. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  92. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  93. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  94. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  95. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  96. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  97. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  98. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  99. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  100. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  101. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  102. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  103. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  104. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  105. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  106. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  107. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  108. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  109. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  110. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  111. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  112. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  113. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  114. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  115. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  116. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  117. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  118. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  119. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  120. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  121. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  122. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  123. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  124. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  125. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  126. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  127. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  128. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  129. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  130. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  131. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  132. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  133. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  134. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  135. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  136. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  137. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  138. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  139. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  140. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  141. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  142. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  143. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  144. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  145. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  146. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  147. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  148. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
  149. abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .
abstract class SoftRegion implements ArpSiteRegion, Cache, SoftRegionMBean { /** * Default no-operation implementation of {@link ArpSiteRegionListener}. * Will be replaced by cluster listener if cluster extension is installed * * @author vlsergey {at} gmail {dot} com */ private static final class NoOpListener implements ArpSiteRegionListener { @Override public void onClear() { // noop } @Override public void onRemove(Object key) { // noop } } private AtomicLong clears = new AtomicLong(0); private AtomicLong hits = new AtomicLong(0); protected final AtomicLong lastTimestamp = new AtomicLong(); protected volatile ArpSiteRegionListener listener = new NoOpListener(); private final Map<Object, Object> map; private AtomicLong miss = new AtomicLong(0); private final String regionName; /** * @param regionName * The name of the cache region. * @param useHardReferences * <code>true</code> if cache must use hard references instead of * {@link java.lang.ref.SoftReference}s. <code>false</code> * otherwise. */ @SuppressWarnings( "unchecked" ) SoftRegion(String regionName, boolean useHardReferences) { this .regionName = regionName; if (useHardReferences) { map = new ConcurrentHashMap<Object, Object>(); } else { map = Collections .<Object, Object> synchronizedMap( new ReferenceMap( ReferenceMap.SOFT, ReferenceMap.SOFT, true )); } } @Override public void clear() { map.clear(); clears.incrementAndGet(); listener.onClear(); } @Override public boolean contains(Object key) { Object value = map.get(key); if (value != null ) { // to let JVM know it shall not GC it because of timeout value.hashCode(); return true ; } return false ; } @Override public void destroy() throws CacheException { map.clear(); } protected Object get(Object key) { final Object result = map.get(key); if (result == null ) { miss.incrementAndGet(); } else { hits.incrementAndGet(); } return result; } @Override public long getBuildCalls() { return miss.get(); } @Override public int getCacheSize() { return map.size(); } @Override public long getClearCalls() { return clears.get(); } @Override public long getElementCountInMemory() { return map.size(); } @Override public long getElementCountOnDisk() { return 0; } @Override public long getGetCalls() { return hits.get() + miss.get(); } @Override public long getHits() { return hits.get(); } @Override public int getHitsPercent() { long hits = this .hits.get(); long total = hits + miss.get(); if (total == 0) { return 0; } return ( int ) (hits * 100 / total); } @Override public String getName() { return regionName; } @Override public long getSizeInMemory() { return -1; } @Override public int getTimeout() { return Timestamper.ONE_MS * 60000; // ie. 60 seconds } @Override public long nextTimestamp() { final long next = Timestamper.next(); lastTimestamp.set(next); return next; } protected void put(Object key, Object value) { map.put(key, value); } @Override public void remove(Object key) { map.remove(key); listener.onRemove(key); } @Override public void setListener(ArpSiteRegionListener listener) { this .listener = listener; } @Override public Map<?, ?> toMap() { return Collections.unmodifiableMap(map); } @Override public String toString() { return "SoftReferenceCache [" + regionName + ", " + this .getSizeInMemory() + ']' ; } } * This source code was highlighted with Source Code Highlighter .

The implementation of the basic methods is rather trivial. We implement the ArpSiteRegion interface, since it contains an additional setListener () method, which we will need later to implement the work in the cluster. We will need the nextTimestamp / getTimeout methods for TimestampRegionImpl. Additional methods like getClearCalls / getBuildCalls / getHitsPercent / clear are defined in the Cache interface of our application and are needed to manage the cache via JMX . Hibernate, unfortunately, does not provide such functionality. And how does he know about the features of our cache;)

SoftCollectionRegion and SoftEntityRegion are very similar, so I’ll give only the second one:
  1. class SoftEntityRegion extends SoftTransactionalDataRegion implements
  2. EntityRegion {
  3. / **
  4. * @param regionName
  5. * The name of the cache region.
  6. * /
  7. SoftEntityRegion (String regionName,
  8. CacheDataDescription cacheDataDescription) {
  9. super (regionName, cacheDataDescription);
  10. }
  11. @Override
  12. public EntityRegionAccessStrategy buildAccessStrategy (AccessType accessType) {
  13. return new EntityRegionAccessStrategy () {
  14. @Override
  15. public boolean afterInsert (Object key, Object value, Object version) {
  16. return false ;
  17. }
  18. @Override
  19. public boolean afterUpdate (Object key, Object value,
  20. Object currentVersion, Object previousVersion, SoftLock lock ) {
  21. SoftEntityRegion. this .remove (key);
  22. return false ;
  23. }
  24. @Override
  25. public void evict (Object key) {
  26. SoftEntityRegion. this .remove (key);
  27. }
  28. @Override
  29. public void evictAll () {
  30. SoftEntityRegion. this .clear ();
  31. }
  32. @Override
  33. public Object get (Object key, long txTimestamp) {
  34. return SoftEntityRegion. this .get (key);
  35. }
  36. @Override
  37. public EntityRegion getRegion () {
  38. return SoftEntityRegion. this ;
  39. }
  40. @Override
  41. public boolean insert (Object key, Object value, Object version) {
  42. return false ;
  43. }
  44. @Override
  45. public SoftLock lockItem (Object key, Object version) {
  46. return null ;
  47. }
  48. @Override
  49. public SoftLock lockRegion () {
  50. return null ;
  51. }
  52. @Override
  53. public boolean putFromLoad (Object key, Object value,
  54. long txTimestamp, Object version) {
  55. SoftEntityRegion. this .put (key, value);
  56. return true ;
  57. }
  58. @Override
  59. public boolean putFromLoad (Object key, Object value,
  60. long txTimestamp, Object version, boolean minimalPutOverride) {
  61. if (minimalPutOverride && contains (key)) {
  62. return false ;
  63. }
  64. SoftEntityRegion. this .put (key, value);
  65. return true ;
  66. }
  67. @Override
  68. public void remove (Object key) {
  69. SoftEntityRegion. this .remove (key);
  70. }
  71. @Override
  72. public void removeAll () {
  73. SoftEntityRegion. this .clear ();
  74. }
  75. @Override
  76. public void unlockItem (Object key, SoftLock lock ) {
  77. SoftEntityRegion. this .remove (key);
  78. }
  79. @Override
  80. public void unlockRegion (SoftLock lock ) {
  81. SoftEntityRegion. this .clear ();
  82. }
  83. @Override
  84. public boolean update (Object key, Object value,
  85. Object currentVersion, Object previousVersion) {
  86. SoftEntityRegion. this .remove (key);
  87. return false ;
  88. }
  89. };
  90. }
  91. }
* This source code was highlighted with Source Code Highlighter .


The main work is performed through the strategy interface. The idea of ​​using a separate interface is that in a transactional implementation, each transaction will use a separate instance of EntityRegionAccessStrategy. However, with us we simply redirect all requests to the SoftEntityRegion. The implementation features of the update (), unlockItem (), and unlockRegion () methods were peeped at the EntityAccessStrategyAdapter class. From the point of view of the future “screwing” of the cluster, it is important to note that the listener from SoftRegion will respond only to the remove () and clear () methods.

Who will call them? Hibernate itself will call them when it's finished working with individual objects. For example, it will always call evict (), or evictAll () - if we did something with requests. It is this predictable work with the cache that will enable us to easily add cluster support in the future - just by tracking the clear / remove calls.

But with QueryCache is not so simple. The problem is that Hibernate ... does not remove old requests from the cache. That is, it does not invalidate the values ​​in the cache if something happens. Its behavior is more cunning: Next to the QueryResultsRegion, there is a TimestampsRegion, which, judging by its name, contains the timestamps of recent changes to individual tables in the database. Therefore, if we need to perform a database query, Hibernate does the following:
  1. Take a timestamp for a table from TimestampsRegion
  2. Get result from QueryResultsRegion
  3. Have a result take a timestamp
  4. Compare with what was taken from TimestampsRegion. If the value is greater, then the result in QueryResultsRegion is considered more recent than the last change, and it can be used.
  5. Important - if there is no value for a particular table in TimestampsRegion, Hibernate considers that its data has not changed.
  6. If the timestamp of the result is less than that taken from TimestampsRegion, then the value is considered obsolete. However, the value is not removed from the cache, but is replaced by what will be received from the database.

In this case, in the case of any requests for UPDATE or INSERT, a new timestamp for the table will be placed in the TimestampsRegion, but the QueryCache will not be notified about this in any way!

From the 5th point, by the way, it follows that for normal operation, even without a cluster, in no case can you use a SoftReference to store values ​​in a TimestampsRegion. Even in the description UpdateTimestampsCache says - " we recommend that you not delete values ​​from this cache at all. Fortunately, it does not take up much space in the memory.

From the description above it is clear that the simple interception clear () / remove () will do nothing - they are simply not called. It is useless to intercept put () from QueryCache, and it may be too late - the timestamp might have already been updated. Therefore, two options are possible:

Unfortunately, the first approach for the CMS Arp.Site turned out to be unacceptable - the synchronization of the Timestamp implies a kind of common counter like AtomicLong, but working within the cluster. That is, all calls to it must be synchronized - every addition of an object to the QueryCache cache. And this would have a very negative impact on performance - synchronous processing on the network is much more expensive than asynchronous.

To implement the asynchronous approach here, we performed a dirty hack. Namely, we wrote TimestampCache in such a way that he knows what values ​​Hibernate puts into it. This is bad because Hibernate in the next version may change the type of values. Therefore, it is called a hack. But it works:

  1. class TimestampRegionImpl extends SoftRegion implements ArpSiteTimestampRegion {
  2. / **
  3. * Default no-operation implementation of
  4. * {@link ArpSiteTimestampRegionListener}. Will be replaced by cluster
  5. * listener if cluster extension is installed
  6. *
  7. * @author vlsergey {at} gmail {dot} com
  8. * /
  9. private static final class NoOpListener implements
  10. ArpSiteTimestampRegionListener {
  11. @Override
  12. public void onInvalidate (Serializable space) {
  13. // no op
  14. }
  15. @Override
  16. public void onPreInvalidate (Serializable space) {
  17. // no op
  18. }
  19. }
  20. private ArpSiteTimestampRegionListener listener = new NoOpListener ();
  21. / **
  22. * @param regionName
  23. * The name of the region.
  24. * /
  25. TimestampRegionImpl (String regionName) {
  26. super (regionName, true );
  27. }
  28. @Override
  29. public void evict (Object key) {
  30. super.remove (key);
  31. }
  32. @Override
  33. public void evictAll () {
  34. super.clear ();
  35. }
  36. @Override
  37. public Object get (Object key) {
  38. return super.get (key);
  39. }
  40. @Override
  41. public void invalidate (Serializable space) {
  42. Long ts = Long.valueOf (nextTimestamp ());
  43. super.put (space, ts);
  44. }
  45. @Override
  46. public void preInvalidate (Serializable space) {
  47. Long ts = Long.valueOf (nextTimestamp () + getTimeout ());
  48. super.put (space, ts);
  49. }
  50. @Override
  51. public void put (Object key, Object value) {
  52. super.put (key, value);
  53. final Serializable space = (Serializable) key;
  54. final Long timestamp = (Long) value;
  55. final boolean inFuture = timestamp.longValue ()> lastTimestamp.get ();
  56. if (inFuture) {
  57. listener.onPreInvalidate (space);
  58. } else {
  59. listener.onInvalidate (space);
  60. }
  61. }
  62. @Override
  63. public void setTimstampListener (
  64. ArpSiteTimestampRegionListener timestampListener) {
  65. this .listener = timestampListener;
  66. }
  67. }
* This source code was highlighted with Source Code Highlighter .


The main work is done in the put () method. To understand the logic of the method, you need to dwell on what exactly Hibernate does with the timestamp cache. Namely, three operations are performed:

Our implementation is trying to track which of the last two actions Hibernate performs, and, in the future, to extend this action to all nodes in the cluster. For this, of course, we will need another Listener ( ArpSiteTimestampRegionListener ). We track the difference between invalidate and preinvalidate by the value that is placed in the cache, after which the listener is notified accordingly. And for the cluster, for notifications from other machines, we made our two methods (available through the ArpSiteTimestampRegion interface) invalidate and preInvalidate, which repeat the logic of Hibernate. A feature of the implementation is that we do not need to know the current timestamp values ​​on different machines in order to invalidate the caches in the cluster. For example, the invalidate (region) method will take a new timestamp on the current machine in order to disable the QueryCache on the current machine. He is not interested in what the value was on the machine where Hibernate requested the invalidation.

The logic of Hibernate, by the way, who cares, is in the class UpdateTimestampsCache and StandardQueryCache . If they change, our implementation of TimestampRegionImpl may have to be rewritten. This is the price we pay for the hack.

To be continued


In this topic, I described how the implementation of caches with “notches” was made so that you could link separate caches on separate machines into a single cluster solution. The nicks are as follows:
- the classes SoftRegion and TimestampRegionImpl call the methods of the interfaces ArpSiteRegionListener and ArpSiteTimestampRegionListener, if you need to notify other machines in the cluster about the events
- in turn, through the ArpSiteRegion and ArpSiteTimestampRegion interfaces, they provide an opportunity to notify them about events in the cluster.

And although the work with the cluster has not yet been described, the caches are already working.

In the next topic - how to make a cluster using JGroups now.

Source: https://habr.com/ru/post/91333/


All Articles