Author: rmannibucau
Date: Fri May 30 17:24:17 2014
New Revision: 1598677
URL: http://svn.apache.org/r1598677
Log:
fixing bug found by hwaastad regarding expiry, created time rule is a bit
different than update expiry in the jcs backend
Modified:
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/resources/jcache.ccf
Modified:
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
URL:
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java?rev=1598677&r1=1598676&r2=1598677&view=diff
==============================================================================
---
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
(original)
+++
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/java/org/apache/commons/jcs/jcache/JCSCache.java
Fri May 30 17:24:17 2014
@@ -220,7 +220,7 @@ public class JCSCache<K, V> implements C
final Duration duration = update ?
expiryPolicy.getExpiryForUpdate() : expiryPolicy.getExpiryForCreation();
if (isNotZero(duration))
{
- final ICacheElement<K, V> element = createElement(key, v, now,
duration);
+ final ICacheElement<K, V> element = updateElement(key, v,
duration);
try
{
delegate.update(element);
@@ -234,7 +234,7 @@ public class JCSCache<K, V> implements C
return v;
}
- private ICacheElement<K, V> createElement(final K key, final V v, final
long now, final Duration duration)
+ private ICacheElement<K, V> updateElement(final K key, final V v, final
Duration duration)
{
final ICacheElement<K, V> element = new CacheElement<K, V>(name, key,
v);
final IElementAttributes copy = delegate.getElementAttributes().copy();
@@ -242,16 +242,12 @@ public class JCSCache<K, V> implements C
{
copy.setTimeFactorForMilliseconds(1);
final boolean eternal = duration.isEternal();
- if (eternal)
+ copy.setIsEternal(eternal);
+ if (!eternal)
{
- copy.setIsEternal(true);
- }
- else
- {
- copy.setIsEternal(false);
- final long durationMs =
duration.getTimeUnit().toMillis(duration.getDurationAmount());
- copy.setIdleTime(durationMs);
+
copy.setIdleTime(duration.getTimeUnit().toMillis(duration.getDurationAmount()));
}
+ // MaxLife = -1 to use IdleTime excepted if jcache.ccf asked for
something else
}
element.setElementAttributes(copy);
return element;
@@ -343,7 +339,19 @@ public class JCSCache<K, V> implements C
final long start = Times.now(false);
final K jcsKey = storeByValue ? copy(serializer,
manager.getClassLoader(), key) : key;
- final ICacheElement<K, V> element = createElement(jcsKey, value,
start, duration);
+ final ICacheElement<K, V> element = updateElement(jcsKey, value,
created ? null : duration); // reuse it to create basic structure
+ if (created && duration != null) { // set maxLife
+ final IElementAttributes copy = element.getElementAttributes();
+ copy.setTimeFactorForMilliseconds(1);
+ final boolean eternal = duration.isEternal();
+ copy.setIsEternal(eternal);
+ if (!eternal)
+ {
+ copy.setIsEternal(false);
+
element.getElementAttributes().setMaxLife(duration.getTimeUnit().toMillis(duration.getDurationAmount()));
+ }
+ element.setElementAttributes(copy);
+ }
writer.write(new JCSEntry<K, V>(jcsKey, value));
try
{
@@ -484,7 +492,7 @@ public class JCSCache<K, V> implements C
{
try
{
- delegate.update(createElement(key, v, getStart,
expiryForAccess));
+ delegate.update(updateElement(key, v, expiryForAccess));
}
catch (final IOException e)
{
@@ -542,7 +550,7 @@ public class JCSCache<K, V> implements C
{
try
{
- delegate.update(createElement(key, elt.getVal(), getStart,
expiryForAccess));
+ delegate.update(updateElement(key, elt.getVal(),
expiryForAccess));
}
catch (final IOException e)
{
@@ -589,7 +597,7 @@ public class JCSCache<K, V> implements C
{
try
{
- delegate.update(createElement(key, elt.getVal(),
Times.now(false), expiryForAccess));
+ delegate.update(updateElement(key, elt.getVal(),
expiryForAccess));
}
catch (final IOException e)
{
Modified:
commons/proper/jcs/trunk/commons-jcs-jcache/src/main/resources/jcache.ccf
URL:
http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache/src/main/resources/jcache.ccf?rev=1598677&r1=1598676&r2=1598677&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-jcache/src/main/resources/jcache.ccf
(original)
+++ commons/proper/jcs/trunk/commons-jcs-jcache/src/main/resources/jcache.ccf
Fri May 30 17:24:17 2014
@@ -24,7 +24,7 @@ jcs.default.cacheattributes.MaxMemoryIdl
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
jcs.default.elementattributes=org.apache.commons.jcs.engine.ElementAttributes
jcs.default.elementattributes.IsEternal=false
-jcs.default.elementattributes.MaxLifeSeconds=700
+jcs.default.elementattributes.MaxLife=700
jcs.default.elementattributes.IdleTime=1800
jcs.default.elementattributes.IsSpool=true
jcs.default.elementattributes.IsRemote=true