blob: bbf4c5c979fda0894c785626e19d62b612cfa562 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cocoon Source Resolving</title>
<link href="http://purl.org/DC/elements/1.0/" rel="schema.DC">
<meta content="Sylvain Wallez" name="DC.Creator">
</head>
<body>
<h1>The Store Components in Cocoon</h1>
<p>
To keep cached data, Cocoon uses components implementing the
<em>org.apache.excalibur.Store</em> interface. Cocoon uses two
implementations of this interface, the "transient store" and the "store",
and optionally a third one, the "persistent store".
</p>
<h2>The Transient store</h2>
<p>
The transient store (role <em>Store.TRANSIENT_STORE</em> is used for objects
that are not serializable, or whose storage doesn't make sense across server
restart. The transient store lives on its own and has no relation with other
stores. This is a mandatory component within Cocoon (i.e. used by Cocoon's code).
Transient store can drop stored components if system is running low on memory.
</p>
<p>
Cocoon uses the transient store to cache XSLT style sheets, XSP logicsheets, etc.
</p>
<h2>The Store (aka "main Store")</h2>
<p>
The store (role <em>Store.ROLE</em>) can hold not serializable objects also.
It is a mandatory component, as the transient store. If memory is scarce, the
store can drop non serializable objects, and swaps serializable objects to disk.
For efficiency reasons, implementations of the store should swap out (or drop)
least often used objects. On shutdown, store can write out all objects residing
in memory to the disk.
</p>
<p>
Cocoon uses the main store to cache pipeline output.
</p>
<h2>Persistent store (optional)</h2>
<p>
Some store (<em>Store.ROLE</em>) implementations (but not all)
may actually be just an in-memory cache that swap objects by calling
the persistent store (<em>Store.PERSISTENT_STORE</em>) when needed. So
the persistent store is an <em>optional</em> component which is used only
by MRUMemoryStore, and nowhere else in the code.
</p>
<p>
Two examples to illustrate this:
</p>
<ul>
<li>when using JISP, we had this mechanism : the store was a MRUMemoryStore
swapping to the persistent store which was a JISPStore.</li>
<li>JCS has its own in-memory front end to its own persistent storage.
In this configuration Store.ROLE will be a JCSStore and
Store.PERSISTENT_STORE will have no implementation, because we don't
need it.
</li>
</ul>
<h1>Summary</h1>
<ul>
<li>Store.TRANSIENT_STORE : used by Cocoon to store non-serializable objects</li>
<li>Store.ROLE : used by Cocoon to store serializable objects</li>
<li>Store.PERSISTENT_STORE : optional component that may be used by in-memory
implementations of Store.ROLE to delegate persistent storage.</li>
</ul>
</body>
</html>