- From: Anselm Baird_Smith <abaird@www43.inria.fr>
- Date: Fri, 8 Nov 1996 11:00:27 +0100 (MET)
- To: www-jigsaw@w3.org
Here are some explanations on resource stores, that I sent in private
email, they might be usefull to others...
-----
A resource store is "something", that given a resource identifier (a
String), returns an instance of some subclass of
w3c.jigsaw.resources.Resource. They are two possible meanings for
"cache" in that context:
a) Because creating a resource might be a costly opertaion, most
resource store implementations will keep track of already loaded
resource (in general through some Hashtable), so:
. The first query for "foo" in a resource store, a resource instance
is created, saved in the Hashtable (by adding an entry from "foo"
to the created instance) and returned.
. The next time you ask for "foo" the hashtable is checked, if
already exists, return it, otherwise, proceed as above.
This level of caching ensures that all requests to load "foo" will
return the *same* Java instance for foo (which is not a requirement,
see below).
b) The second level of caching (which always happen), is on a per
resource basis: assuming a resource is an image of something within a
database, the resource can be viewed as a small "cache" for its
attribute values, which are really stored in the database.
Now, I guess a) is easy to understand, it's just general caching.
b) however is more confusing. If you think of a "write-through" resource,
were setValue() would be implemented as a database request to update
the field of that resource corresponding to the given attribute, then,
you can return different Java instances of foo when queried for the
identifier "foo". This spares you the burden of implementing the
following methods:
- lockResource: is no more needed since resource instances are not
shared among resource holders (ie the resource can no longer
disappear behind your back)
- unlockResource (see above)
- lookupResource always returns null
- markModified does nothing
However, in the more common case, where setValue just stores the new
attribute value in the Java instance (without writing through to the
DB) [this is the default behavior of the Resource class], you have to
take care of the "cache-coherency" issue. Note that in this case, the
resource instance has to really be *shared* among all the objects
having a ref to it (ie they have to get the exact same pointer to that
resource)
That's why all the above methods exist: for example
- lockResource: allows someone pointing to that resource to be
notified when someone else wants that resource to be unloaded.
- markModified: mark that resource as requiring a DB update when this
will be possible.
etc
Anselm.
Received on Friday, 8 November 1996 05:00:31 UTC