16.2.2. Configure the Cache Loader using XML
The following example demonstrates cache loader configuration using XML.
Procedure 16.1. Configure the Cache Loader Using XML
Create a New Cache Loader
Create a new cache loader, specifyingpassivation
,shared
, andpreload
settings.passivation
affects the way in which Red Hat JBoss Data Grid interacts with loaders. Passivation removes an object from in-memory cache and writes it to a secondary data store, such as a system or database. Passivation isfalse
by default.shared
indicates that the cache loader is shared by different cache instances. For example, where all instances in a cluster use the same JDBC settings to talk to the same remote, shared database.shared
isfalse
by default. When set totrue
, it prevents duplicate data being written to the cache loader by different cache instances.preload
is set tofalse
by default. When set totrue
the data stored in the cache loader is preloaded into the memory when the cache starts. This allows data in the cache loader to be available immediately after startup and avoids cache operations delays as a result of loading data lazily. Preloaded data is only stored locally on the node, and there is no replication or distribution of the preloaded data. Red Hat JBoss Data Grid will only preload up to the maximum configured number of entries in eviction.
<persistence passivation="false" shared="false" preload="true">
<persistence passivation="false" shared="false" preload="true">
Copy to Clipboard Copied! Set Up Persistence and Purging
fetchPersistentState
determines whether or not to fetch the persistent state of a cache and apply it to the local cache store when joining the cluster. If the cache store is shared the fetch persistent state is ignored, as caches access the same cache store. A configuration exception will be thrown when starting the cache service if more than one cache loader has this property set totrue
. ThefetchPersistentState
property isfalse
by default.purgeSynchronously
controls whether expiration occurs in the eviction thread. When set totrue
, the eviction thread will block until the purge is finished, rather than bring returned immediately. ThepurgeSychronously
property is set tofalse
by default. If the cache loader supports multi-thread purge,purgeThreads
are used to purge expired entries.purgeThreads
is set to1
by default. Check cache loader configuration to determine if multi-thread purge is supported.ignoreModifications
determines whether write methods are pushed to the specific cache loader by allowing write operations to the local file cache loader, but not the shared cache loader. In some cases, transient application data should only reside in a file-based cache loader on the same server as the in-memory cache. For example, this would apply with a further JDBC based cache loader used by all servers in the network.ignoreModifications
isfalse
by default.
<persistence passivation="false" shared="false" preload="true"> <fileStore fetchPersistentState="true" purgerThreads="3" purgeSynchronously="true" ignoreModifications="false" purgeOnStartup="false" location="${java.io.tmpdir}" />
<persistence passivation="false" shared="false" preload="true"> <fileStore fetchPersistentState="true" purgerThreads="3" purgeSynchronously="true" ignoreModifications="false" purgeOnStartup="false" location="${java.io.tmpdir}" />
Copy to Clipboard Copied! Asynchronous Settings
These attributes configure aspects specific to each cache loader. For example, thelocation
attribute points to where the SingleFileStore keeps files containing data. Other loaders may require more complex configuration.<persistence passivation="false" shared="false" preload="true"> <fileStore fetchPersistentState="true" purgerThreads="3" purgeSynchronously="true" ignoreModifications="false" purgeOnStartup="false" location="${java.io.tmpdir}" > <async enabled="true" flushLockTimeout="15000" threadPoolSize="5" /> </fileStore>
<persistence passivation="false" shared="false" preload="true"> <fileStore fetchPersistentState="true" purgerThreads="3" purgeSynchronously="true" ignoreModifications="false" purgeOnStartup="false" location="${java.io.tmpdir}" > <async enabled="true" flushLockTimeout="15000" threadPoolSize="5" /> </fileStore>
Copy to Clipboard Copied! Configure Singletons and Push States
singletonStore
enables modifications to be stored by only one node in the cluster. This node is called the coordinator. The coordinator pushes the caches in-memory states to disk. This function is activated by setting theenabled
attribute totrue
in all nodes. Theshared
parameter cannot be defined withsingletonStore
enabled at the same time. Theenabled
attribute isfalse
by default.pushStateWhenCoordinator
is set totrue
by default. Iftrue
, this property will cause a node that has become the coordinator to transfer in-memory state to the underlying cache loader. This parameter is useful where the coordinator has crashed and a new coordinator is elected.
<persistence passivation="false" shared="false" preload="true"> <fileStore fetchPersistentState="true" purgerThreads="3" purgeSynchronously="true" ignoreModifications="false" purgeOnStartup="false" location="${java.io.tmpdir}" > <async enabled="true" flushLockTimeout="15000" threadPoolSize="5" /> <singletonStore enabled="true" pushStateWhenCoordinator="true" pushStateTimeout="20000" /> </fileStore> </persistence>
<persistence passivation="false" shared="false" preload="true"> <fileStore fetchPersistentState="true" purgerThreads="3" purgeSynchronously="true" ignoreModifications="false" purgeOnStartup="false" location="${java.io.tmpdir}" > <async enabled="true" flushLockTimeout="15000" threadPoolSize="5" /> <singletonStore enabled="true" pushStateWhenCoordinator="true" pushStateTimeout="20000" /> </fileStore> </persistence>
Copy to Clipboard Copied!