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]>

Reply via email to