HibernateのSoftReference読み取り/書き込みキャッシュ-クラスター実装用の「テール」付き

このトピックでは、CMS ArpSiteでのデータキャッシュシステムの実装についてお話します。 このサブシステムは複数回書き直されましたが、システムが許容可能な応答時間で動作できるようにするのはまさにそれです。



SoftReferenceを使用すると、キャッシュ動作を「偶然」に残すことができます。JVM自体がメモリ消費を監視し、古い要素もクリーンアップします。



「クラスター」とは、キャッシュが値の無効化(エージング、更新)のイベントを個別に監視し、クラスター内の他のサーバーのキャッシュから古い要素が破棄されることを意味します。 他のクラスターキャッシュ定義があります。 たとえば、JBoss Cacheのメイン操作モードでは、現在のマシン上にないアイテムをクラスター内の他のノードから「プル」することもできます。 しかし、別のマシンから要素を受け取る速度が要素を生成する速度よりわずかに遅いシステムでは、障害は十分です。



読み取り/書き込みとは、キャッシュ要素のブロックを使用せず、通常、システムに独立したトランザクションが存在することを(ほとんど)考えないことを意味します。 CMSの場合、これは正常ですが、もちろん、一部のエンタープライズアプリケーションではこれは受け入れられません。



現在、ArpSiteのキャッシュは3つのレベルに分かれています。



残りのキャッシュが誤って中央にあるわけではありません。 生成されたページは、URLとその他のパラメーターが一致する場合に、ユーザーにすぐに提供されます。 このためにデータベースを呼び出す必要はまったくありません。 データキャッシング-これは現在Hibernateで2番目のレベルのキャッシュと呼ばれているものです-個々のデータベース行(キーによる)といくつかの一般的なデータベースクエリ(引数による)がキャッシュされます。 他のキャッシュは、ページ生成の中間結果をキャッシュするためのさまざまなメカニズム、XSLTスタイルシートのキャッシュ、XMLスライスなどとして理解されます。



システムに変更があった場合、キャッシュをクリアする必要があります。 これを行うために、システムはデータが変更されるたびに1つ以上のイベント(イベント)を生成します。 これらのイベントはクラスター内の他のノードに非同期で送信され、その後、キャッシュは個々の要素を完全にクリアまたは無効にすることでこれらのイベントに応答します。



キャッシュへのイベントの影響が小さければ小さいほど、うまく機能します。 明らかに、生成されたページのキャッシュは変更があればクリアさます。特定のデータベース行のページ要素の依存関係を分析しようとすると、コストがかかりすぎます。



各サーバーのデータキャッシュ。 以前、JGroupsにキャッシュを実装する前に、イベントが発生した場合、アプリケーションはコマンドを呼び出してデータキャッシュを無効にするか、着信イベントからの情報に基づいて完全にクリアしました。 同様の手順は機能しましたが、重大な欠点がありました。データキャッシングでは、イベントに対する反応手順を非常に詳細に検討するか、変更ごとにキャッシュをクリアする必要がありました。 「その他」のキャッシュで何が起きているのか。 個々のデータベースクエリのキャッシュを記述することは特に問題でした。クエリで使用されたテーブルを覚えて、これらのテーブルのデータが変更されたときにキャッシュをクリアする必要がありました。 そして、キャッシュしたいリクエストごとに同様のコードを書く必要がありました...



しかし、これはHibernateがすでに独自に行っていることです! Hibernateは、データ変更が行われたときにどのキャッシュをクリアする必要があるかを知っているので、1つのノードで何をするのかを「覗き」、他のノードで同じことをするだけです。



Hibernateの新しいキャッシュAPI



Hibernateの用語では、1つのキャッシュは、同じタイプのデータのセットを含む個別のキャッシュです。 たとえば、1つのテーブルのデータや、たとえば、キャッシュされたすべてのデータベースクエリの直後のデータ。 Hibernateのキャッシュ動作を制御するために、プログラマーは使用するCacheProviderを示します。 たとえば、EhCacheProviderまたは単純なHashtableCacheProviderまたはNoCacheProviderにすることができます。



バージョン3.3では、Hibernateは新しいキャッシュAPIを導入し、1つの古いCacheインターフェースをいくつかに分割しました。

地域

** 一般的なデータ領域

**** クエリ結果領域

**** タイムスタンプ地域

** トランザクションデータ領域

**** 収集地域

**** エンティティリージョン



また、各リージョンは、コンテキスト外で作業するためのメソッド(destroy、getSize、getName())、一般データ領域-標準のget / putメソッド、およびトランザクションデータ領域が、ストラテジー-エンティティのコレクション領域およびEntityRegionAccessStrategyの CollectionRegionAccessStrategyパターンを介してデータの処理を整理するようになりました地域 これらのインターフェイスには、とりわけ、トランザクション内のデータロックを管理するためのコマンドが含まれています。



古いAPIに基づいたHibernateのキャッシュはすでにありました。 しかし、古いAPIでは、更新とデータベースからのキャッシュへのデータの追加を区別することができなかったため(古いため)、それを放棄しなければなりませんでした。 したがって、最初のステップは、新しいAPIを実装することでしたが、すでに地域/戦略に基づいています。 Hibernateが新しいAPIから古いAPIへのアダプター実装を持っているという事実は大いに役立ちました。 非トランザクションキャッシュに基づいたEntityRegionAccessStrategyなどの実装をスパイすることができます。 それが行われました。



APIの中核は地域です:

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 .





基本的なメソッドの実装はかなり簡単です。 追加のsetListener()メソッドが含まれているため、 ArpSiteRegionインターフェースを実装します。これは後でクラスターで作業を実装する必要があります。 TimestampRegionImplにはnextTimestamp / getTimeoutメソッドが必要です。 getClearCalls / getBuildCalls / getHitsPercent / clearなどの追加メソッドは、アプリケーションのCacheインターフェースで定義されており、 JMXを介してキャッシュを管理するために必要です。 残念ながら、Hibernateはそのような機能を提供しません。 そして、彼はキャッシュの機能についてどのように知っていますか?)



SoftCollectionRegionSoftEntityRegionは非常に似ているので、そのうちの2番目だけを示します。





  1. クラス SoftEntityRegionはSoftTransactionalDataRegionの実装を拡張します
  2. EntityRegion {
  3. / **
  4. * @param regionName
  5. *キャッシュ領域の名前。
  6. * /
  7. SoftEntityRegion(String regionName、
  8. CacheDataDescription cacheDataDescription){
  9. super(regionName、cacheDataDescription);
  10. }
  11. @Override
  12. public EntityRegionAccessStrategy buildAccessStrategy(AccessType accessType){
  13. 新しい EntityRegionAccessStrategy()を返す {
  14. @Override
  15. public boolean afterInsert(オブジェクトキー、オブジェクト値、オブジェクトバージョン){
  16. falseを 返し ます
  17. }
  18. @Override
  19. public boolean afterUpdate(オブジェクトキー、オブジェクト値、
  20. オブジェクトcurrentVersion、オブジェクトpreviousVersion、SoftLock ロック ){
  21. SoftEntityRegion。 this .remove(キー);
  22. falseを 返し ます
  23. }
  24. @Override
  25. public void evict(オブジェクトキー){
  26. SoftEntityRegion。 this .remove(キー);
  27. }
  28. @Override
  29. public void evictAll(){
  30. SoftEntityRegion。 this .clear();
  31. }
  32. @Override
  33. public Object get(オブジェクトキー、 長い txTimestamp){
  34. SoftEntityRegionを返します。 this .get(キー);
  35. }
  36. @Override
  37. public EntityRegion getRegion(){
  38. SoftEntityRegionを返します。 これ ;
  39. }
  40. @Override
  41. public boolean insert(オブジェクトキー、オブジェクト値、オブジェクトバージョン){
  42. falseを 返し ます
  43. }
  44. @Override
  45. Public SoftLock lockItem(オブジェクトキー、オブジェクトバージョン){
  46. nullを 返し ます
  47. }
  48. @Override
  49. public SoftLock lockRegion(){
  50. nullを 返し ます
  51. }
  52. @Override
  53. public boolean putFromLoad(オブジェクトキー、オブジェクト値、
  54. long txTimestamp、オブジェクトバージョン){
  55. SoftEntityRegion。 this .put(キー、値);
  56. trueを 返し ます
  57. }
  58. @Override
  59. public boolean putFromLoad(オブジェクトキー、オブジェクト値、
  60. long txTimestamp、オブジェクトバージョン、ブール値minimalPutOverride){
  61. if (minimalPutOverride && contains(key)){
  62. falseを 返し ます
  63. }
  64. SoftEntityRegion。 this .put(キー、値);
  65. trueを 返し ます
  66. }
  67. @Override
  68. public void remove(オブジェクトキー){
  69. SoftEntityRegion。 this .remove(キー);
  70. }
  71. @Override
  72. public void removeAll(){
  73. SoftEntityRegion。 this .clear();
  74. }
  75. @Override
  76. public void unlockItem(オブジェクトキー、SoftLock ロック ){
  77. SoftEntityRegion。 this .remove(キー);
  78. }
  79. @Override
  80. public void unlockRegion(SoftLock ロック ){
  81. SoftEntityRegion。 this .clear();
  82. }
  83. @Override
  84. public boolean update(オブジェクトキー、オブジェクト値、
  85. オブジェクトcurrentVersion、オブジェクトpreviousVersion){
  86. SoftEntityRegion。 this .remove(キー);
  87. falseを 返し ます
  88. }
  89. };
  90. }
  91. }
*このソースコードは、 ソースコードハイライターで強調表示されました。




主な作業は、戦略インターフェイスを介して行われます。 個別のインターフェイスを使用するという考え方は、トランザクション実装では、各トランザクションがEntityRegionAccessStrategyの個別のインスタンスを使用するということです。 ただし、当社では、すべてのリクエストをSoftEntityRegionにリダイレクトするだけです。 update()、unlockItem()、unlockRegion()メソッドの実装機能は、EntityAccessStrategyAdapterクラスでスパイされていました。 クラスタの将来の「ねじ込み」の観点から、SoftRegionからのリスナーはremove()およびclear()メソッドにのみ応答することに注意することが重要です。



誰がそれらを呼ぶのですか? Hibernate自体は、個々のオブジェクトでの作業が終了した時点でそれらを呼び出します。 たとえば、クエリを使用して何かをした場合は、常にevict()またはevictAll()を呼び出します。 キャッシュを使用したこのような予測可能な作業により、クリア/削除呼び出しを追跡するだけで、将来的にクラスターサポートを簡単に追加できるようになります。



しかし、QueryCacheの使用はそれほど簡単ではありません。 問題は、Hibernate ...がキャッシュから古いリクエストを削除しないことです。 つまり、何かが起こってもキャッシュ内の値は無効になりません。 その動作はトリッキーです。QueryResultsRegionの横にあるTimestampsRegionは、その名前から判断すると、データベース内の個々のテーブルに対する最近の変更のタイムスタンプを含みます。 したがって、データベースクエリを実行する必要がある場合、Hibernateは以下を実行します。

  1. TimestampsRegionからテーブルのタイムスタンプを取得します
  2. QueryResultsRegionから結果を取得する
  3. 結果からタイムスタンプを取得します。
  4. TimestampsRegionから取得したものと比較してください。 値が大きい場合、QueryResultsRegionの結果は最後の変更よりも新しいと見なされ、使用できます。
  5. 重要-TimestampsRegionに特定のテーブルの値がない場合、Hibernateはデータが変更されていないと判断します
  6. 結果のタイムスタンプがTimestampsRegionから取得したタイムスタンプよりも小さい場合、値は廃止されたと見なされます。 ただし、この場合、値はキャッシュから削除されず、データベースから受信したものに置き換えられます


この場合、UPDATEまたはINSERTのリクエストの場合、テーブルの新しいタイムスタンプはTimestampsRegionに配置されますが、QueryCacheは通知されません!



ちなみに、5番目のポイントから、通常の操作では、クラスターがなくても、SoftReferenceを使用してTimestampsRegionに値を保存することはできません。 UpdateTimestampsCacheの説明でさえ、「 基礎となるキャッシュを期限切れに設定しないことをお勧めします 」-つまり、このキャッシュから値を削除しないでください。 幸いなことに、彼は実際には記憶の多くのスペースを占有しません。



上記の説明から、clear()/ remove()の単純なインターセプトでは何も得られないことは明らかです-それらは単に呼び出されません。 QueryCacheのput()をインターセプトすることは役に立たず、遅すぎる場合があります-タイムスタンプは既に更新されている可能性があります。 したがって、次の2つのオプションが可能です。



残念ながら、CMS Arp.Siteの最初のアプローチは受け入れられないことが判明しました。タイムスタンプの同期は、AtomicLongのような一般的なカウンターを想定していますが、クラスター内で機能しています。 つまり、すべての呼び出しを同期する必要があります-各オブジェクトはQueryCacheキャッシュに追加されます。 そして、これはパフォーマンスに非常に悪い影響を及ぼします-ネットワーク上の同期処理は非同期よりもはるかに高価です。



ここで非同期アプローチを実装するために、ダーティハックを作成しました。 つまり、Hibernateがどの値を入れるかを知るようにTimestampCacheを作成しました。 Hibernateは次のバージョンで値のタイプを変更する可能性があるため、これは悪いです。 したがって、これはハックと呼ばれます。 しかし、それは動作します:







  1. クラス TimestampRegionImplはSoftRegionを拡張し、ArpSiteTimestampRegionを実装します{
  2. / **
  3. *のデフォルトの無操作実装
  4. * {@link ArpSiteTimestampRegionListener}。 クラスターに置き換えられます
  5. *クラスター拡張機能がインストールされている場合のリスナー
  6. *
  7. * @author vlsergey {at} gmail {dot} com
  8. * /
  9. プライベート 静的最終クラス NoOpListenerが実装します
  10. ArpSiteTimestampRegionListener {
  11. @Override
  12. public void onInvalidate(シリアル化可能なスペース){
  13. //操作なし
  14. }
  15. @Override
  16. public void onPreInvalidate(シリアル化可能なスペース){
  17. //操作なし
  18. }
  19. }
  20. private ArpSiteTimestampRegionListener listener = new NoOpListener();
  21. / **
  22. * @param regionName
  23. *リージョンの名前。
  24. * /
  25. TimestampRegionImpl(String regionName){
  26. super(regionName、 true );
  27. }
  28. @Override
  29. public void evict(オブジェクトキー){
  30. super.remove(キー);
  31. }
  32. @Override
  33. public void evictAll(){
  34. super.clear();
  35. }
  36. @Override
  37. public Object get(オブジェクトキー){
  38. return super.get(キー);
  39. }
  40. @Override
  41. public void invalidate(シリアル化可能なスペース){
  42. Long ts = Long.valueOf(nextTimestamp());
  43. super.put(スペース、ts);
  44. }
  45. @Override
  46. public void preInvalidate(シリアル化可能なスペース){
  47. 長いts = Long.valueOf(nextTimestamp()+ getTimeout());
  48. super.put(スペース、ts);
  49. }
  50. @Override
  51. public void put(オブジェクトキー、オブジェクト値){
  52. super.put(キー、値);
  53. 最終シリアル化可能スペース=(シリアル化可能)キー。
  54. 最終的な長いタイムスタンプ=(長い)値;
  55. 最終的なブールinFuture = timestamp.longValue()> lastTimestamp.get();
  56. if (inFuture){
  57. listener.onPreInvalidate(スペース);
  58. } else {
  59. listener.onInvalidate(スペース);
  60. }
  61. }
  62. @Override
  63. public void setTimstampListener(
  64. ArpSiteTimestampRegionListener timestampListener){
  65. this .listener = timestampListener;
  66. }
  67. }
*このソースコードは、 ソースコードハイライターで強調表示されました。




主な作業はput()メソッドで行われます。 メソッドのロジックを理解するには、Hibernate cタイムスタンプキャッシュの機能について詳しく調べる必要があります。 つまり、3つの操作が実行されます。



実装では、Hibernateが実行する最後の2つのアクションのどちらを追跡しようとしており、将来、このアクションをクラスター内のすべてのノードに拡張します。 もちろん、これを行うには、別のリスナー( ArpSiteTimestampRegionListener )が必要です。 キャッシュに配置された値によって無効化と事前無効化の違いを追跡し、その後リスナーに通知されます。 また、クラスターでは、他のマシンからの通知のために、Hibernateロジックを繰り返す2つのメソッド( ArpSiteTimestampRegionインターフェースからアクセス可能)を無効化およびpreInvalidateにしました。 実装の特性は、クラスター内のキャッシュを無効にするために、異なるマシンの現在のタイムスタンプ値を知る必要がないことです。 たとえば、無効化(領域)メソッドは、 現在のマシンでQueryCacheを無効にするために、 現在のマシンで新しいタイムスタンプを取得します。 彼は、Hibernateが障害を要求したマシンの重要性に興味がありません。



ちなみに、Hibernate自体のロジックは、気にする人は、クラスUpdateTimestampsCacheおよびStandardQueryCacheにあります。 変更された場合、TimestampRegionImplの実装を書き換える必要があります。 これは、ハックに対して支払う価格です。



続く



このトピックでは、ノッチを備えたキャッシュの実装がどのように行われ、別々のマシン上の別々のキャッシュを単一のクラスターソリューションにリンクできるようにするかを説明しました。 ノッチは次のとおりです。

-SoftRegionおよびTimestampRegionImplクラスは、イベントについてクラスター内の他のマシンに通知する必要がある場合、ArpSiteRegionListenerおよびArpSiteTimestampRegionListenerインターフェイスメソッドを呼び出します。

-次に、ArpSiteRegionおよびArpSiteTimestampRegionインターフェースを介して、クラスター内のイベントを通知する機能を提供します。



また、クラスターでの作業についてはまだ説明されていませんが、キャッシュは既に機能しています。



次のトピック-JGroupsを使用してクラスターを作成する方法。



All Articles