eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'CachedValue':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: CachedValue


Inheritance:

   Object
   |
   +--CachedValue

Package:
stx:libbasic2
Category:
Kernel-Processes
Version:
rev: 1.3 date: 2012/11/02 17:14:56
user: cg
file: CachedValue.st directory: libbasic2
module: stx stc-classLibrary: libbasic2
Author:
Claus Gittinger

Description:


Instances of CachedValue can be used for values which are costly to evaluate,
but which can be cached for some time. 
For example, when asking a source code repository for the set of symbolic names,
this query takes a few seconds (a CVS roundtrip). However, this information can easily
be cached and remembered for some time (say 30seconds or so), to speed up followup
repository operations.
You may find more similar uses of this class.


[instance variables:]
    value ..................... the computed (cached value)
    expirationTime ............ timeStamp, when this value becomes obsolete
    validDuration ............. timeDuration, how long a computed value remains valid
    computation ............... a computation block, to recompute the value.

[class variables:]


Related information:



Class protocol:

instance creation
o  compute: actionBlock validityDuration: aTimeduration
return a 'self computing' cachedvalue, which ceases to be valid aTimeduration after
it has computed its value.
If asked again for a value, it will automatically recompute the value.

o  value: valueArg expirationTime: aTimestamp
return a 'one shot' cachedValue, which ceases to be valid at expirationTime.
If asked for the value after that, an exception is raised
(i.e. it does not automatically recompute a value)


Instance protocol:

accessing
o  compute: computationBlock validityDuration: aTimeduration

o  expirationTime: something

o  value
return my value. If not yet computed or expired, recompute using the computation block.
Otherwise return the cacehdValue

o  value: valueArg expirationTime: aTimestamp

o  valueOrIfInvalid: exceptionalValue
return my value, if valid. Otherwise, return the value from exceptionalValue.

private
o  computeCachedValue

queries
o  isValid
true if the cached value is still valid


Private classes:

    ValueExpiredException

Examples:


        |cv exceptionRaised didCompute|

        didCompute := false.
        cv := CachedValue compute:[didCompute := true. Date today dayOfWeek] validityDuration:(2 seconds).
        self assert:(cv isValid not).
        self assert:(didCompute not).
        self assert:(cv value = Date today dayOfWeek).
        self assert:(cv isValid).
        self assert:(didCompute).

        Delay waitForSeconds:3.
        didCompute := false.
        self assert:(cv isValid not).
        self assert:(didCompute not).
        self assert:(cv value = Date today dayOfWeek).
        self assert:(cv isValid).
        self assert:(didCompute).
        |cv exceptionRaised|

        cv := CachedValue value:123 expirationTime:(Timestamp now + 2 seconds).
        self assert:(cv isValid).
        Delay waitForSeconds:3.
        self assert:(cv isValid not).

        exceptionRaised := false.
        ValueExpiredException handle:[:ex |
            exceptionRaised := true.
        ] do:[
            cv value
        ].
        self assert:exceptionRaised.


ST/X 7.1.0.0; WebServer 1.663 at exept.de:8081; Mon, 19 Nov 2018 00:42:53 GMT