Below is a patch that allows the Expires field on the CachedObject to be
set. I also moved the "created" calculation in
RefreshableCachedObject.refresh() before the r.refresh(). This allows
the r.refresh() to change Expires (expiration time) without adversely
affecting when the object becomes stale. I change the calculation for
"created" to "System.currentTimeMillis()" since the "created +
getExpires()" will slip up to cacheCheckFrequency Millis per cycle.
Paul Spencer
Index: CachedObject.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/cache/CachedObject.java,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 CachedObject.java
*** CachedObject.java 16 Aug 2001 05:08:49 -0000 1.1.1.1
--- CachedObject.java 4 Jan 2002 05:22:40 -0000
***************
*** 156,161 ****
--- 156,179 ----
}
/**
+ * Set the expiration interval for the object.
+ *
+ * @param expires Expiration interval in millis ( 1 second = 1000
millis)
+ */
+ public void setExpires( long expires ) {
+ if ( expires == DEFAULT ) {
+ this.expires = defaultage;
+ } else {
+ this.expires = expires;
+ }
+ if(expires == FOREVER){
+ setStale(false);
+ } else {
+ setStale( (System.currentTimeMillis() - created) > expires );
+ }
+ }
+
+ /**
* Set the stale status for the object.
*
* @param stale Whether the object is stale or not.
Index: RefreshableCachedObject.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/java/org/apache/turbine/services/cache/RefreshableCachedObject.java,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 RefreshableCachedObject.java
*** RefreshableCachedObject.java 16 Aug 2001 05:08:50 -0000 1.1.1.1
--- RefreshableCachedObject.java 4 Jan 2002 05:22:45 -0000
***************
*** 147,154 ****
Refreshable r = (Refreshable)getContents();
synchronized (this)
{
r.refresh();
- created = created + getExpires();
}
}
}
--- 147,154 ----
Refreshable r = (Refreshable)getContents();
synchronized (this)
{
+ created = System.currentTimeMillis();
r.refresh();
}
}
}
Paul Spencer wrote:
> I am using the RefreshableCachedObject to store a web page generated by
> a remote server. During refresh(), I will re-retrieve the page and
> update the cache. In addition to the page, I need to use the lifetime
> returned by the server to set the next cache refresh. To do this, I
> need to change the value of CachedObject.expires to reflect the new
> expiration interval, i.e. from 600000( 10 minutes) to 300000( 5
> minutes). The field is private, this not accessible from my class.
>
> The easiest way would be to add setExpire() to RefrshableCachedObject or
> CachedObject. I can supply a patch.
>
> Is their a better way?
>
> Paul Spencer
>
>
> --
> To unsubscribe, e-mail:
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> <mailto:[EMAIL PROTECTED]>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>