It looks like ETrade has been assigned a patent based on some component caching architecture it built using an application server in 98 or 99. Patent #6,964,052 is entitled “Caching output from an object in an application server environment”. Read on for more detail…
How about you? You going to stop caching objects?
Here’s how it starts:
“…In one embodiment, objects within a page of data may be written as Java objects. Objects may be components, proxies, or containers of objects. If the page of data has multiple components, the processing costs associated with each start-up are eliminated by processing the caching of the objects in a single request for the page as a whole. A given request is associated with only one start-up expense and all objects are processed during the execution of the request. In one embodiment, a proxy is created in place of the object which executes like the object. At the time the object is to process and stream out its data, the proxy checks input parameters against a cache criteria for the object. If the cache criteria is satisfied and the data is in the cache, the data in the cache is streamed out to the base agent associated with the proxy without creating or processing the object component.”
“If the cache criteria is satisfied and the data is not in the cache, the proxy creates the object and executes it via a caching base agent. The caching base agent captures all the output from the object associated with the proxy into a buffer. When the object finishes streaming data to the buffer, the caching base agent saves the data to the cache. The proxy then streams out the cache to the associated base agent for the proxy, which in turn streams it out to the requesting web client. In one embodiment, an object may contain any number of nested sub-objects to any number of levels of nesting. The objects and nested sub-objects may be components, proxies, or containers. “
The patent itself, claims to cover almost all aspects of maintaining a cache, creating a proxy object that checkes for a matching cache entry, streaming output of a component (object) to a temporary buffer, and the creation of cache keys.