JBoss.org Community Documentation
JBoss Cache ships with several cache loaders that utilise the file system as a data store. They all require
that the
<cacheloader><properties>
configuration element
contains a
location
property, which maps to a directory to be used as a persistent store.
(e.g.,
location=/tmp/myDataStore
). Used mainly for testing and not recommended for production use.
FileCacheLoader
, which is a simple filesystem-based implementation. By default, this cache
loader checks for any potential character portability issues in the
location or tree node names, for example invalid characters, producing
warning messages. These checks can be disabled adding
check.character.portability
property to the
<properties>
element and setting it to
false
(e.g.,
check.character.portability=false
).
The FileCacheLoader has some severe limitations which restrict it's use in a production environment, or if used in such an environment, it should be used with due care and sufficient understanding of these limitations.
Due to the way the FileCacheLoader represents a tree structure on disk (directories and files) traversal is inefficient for deep trees.
Usage on shared filesystems like NFS, Windows shares, etc. should be avoided as these do not implement proper file locking and can cause data corruption.
Usage with an isolation level of NONE can cause corrupt writes as multiple threads attempt to write to the same file.
File systems are inherently not transactional, so when attempting to use your cache in a transactional context, failures when writing to the file (which happens during the commit phase) cannot be recovered.
As a rule of thumb, it is recommended that the FileCacheLoader not be used in a highly concurrent, transactional or stressful environment, and it's use is restricted to testing.
BdbjeCacheLoader
, which is a cache loader implementation based on the Oracle/Sleepycat's
BerkeleyDB Java Edition
.
JdbmCacheLoader
, which is a cache loader
implementation based on the
JDBM engine
, a fast and free alternative to
BerkeleyDB.
Note that the BerkeleyDB implementation is much more efficient than the filesystem-based implementation, and provides transactional guarantees, but requires a commercial license if distributed with an application (see http://www.oracle.com/database/berkeley-db/index.html for details).