I also am long on interest, short on time right now but I'll chime in below.
...
the problem is that since the file system is such a stupid repository,
OT: I have looked into experimenting with the filesystem event notification built into some operating systems (windows and linux both I think) to trigger file system "events". If anyone good with native code and JNI wants to play, it'd be a cool experiment. Non-portable unforunately.
...
Now, the way the event cache works is like this:
a) a cache validity is generated b) pipeline is executed c) result is stored in the cache
then the pipeline is never called, until an event is triggered externally (from an avalon component) that invalidates that particular cache entity.
Now, the problem is: if I am not the one who generates the validity (in linotype, it's the directory generator), how can I invalidate it? how can I have access to it?
I'm not sure I'm correctly interpreting the problem as you state it. If directory generator were made "event aware" either by using the validity delegating generator Unico mentioned or by some new pipeline-level pluggable "Cache Strategy" (which I've wanted to look into) that would be a sort of known contract. Currently the two EventValidity impls are brain dead and so the method for creating an event is vague because I wasn't sure if anything more than this would ever be needed. One could imagine a "FileSystemEventValidity" which uses some internal logic for constructing the proper validity. Does this not get at the problem?
Now, one problem I never solved related to the file system specifically was how to do what I thought of as "wild card" events. In a file system, if your validity is built on /dir/to/your/files/myFile.xml and you delete the entire /dir/to directory tree how do you fire that event? With the current design, you'd have to either fire off an individual event for each file under the deleted tree, or come up with some magic for handling an event like /dir/to/*. Because the event lookups are handled by Hash based collections, which rely on hashCode() and equals() you'd have to examine every event in turn to see if it matched the wild card. I'm sure there is some brilliant solution to this but it hasn't occurred to me yet. ;)
I'm starting to think that the cocoon cache needs a serious redesign to deal with these issues... and this scares me :-( but it's *waay* too important to let go.
Well, spill the beans - what do you have in mind?
Geoff
