18.9. Custom Cache Stores
CacheLoader
CacheWriter
AdvancedCacheLoader
AdvancedCacheWriter
ExternalStore
AdvancedLoadWriteStore
Note
AdvancedCacheWriter
is not implemented, the expired entries cannot be purged or cleared using the given writer.
Note
AdvancedCacheLoader
is not implemented, the entries stored in the given loader will not be used for preloading and map/reduce iterations.
SingleFileStore
as an example. To view the SingleFileStore
example code, download the JBoss Data Grid source code.
SingleFileStore
example code from the Customer Portal:
Procedure 18.10. Download JBoss Data Grid Source Code
- To access the Red Hat Customer Portal, navigate to https://access.redhat.com/home in a browser.
- Click.
- In the section labeled JBoss Development and Management, click .
- Enter the relevant credentials in the Red Hat Login and Password fields and click .
- From the list of downloadable files, locate Red Hat JBoss Data Grid ${VERSION} Source Code and click . Save and unpack it in a desired location.
- Locate the
SingleFileStore
source code by navigating throughjboss-datagrid-6.6.1-sources/infinispan-6.4.1.Final-redhat-1-src/core/src/main/java/org/infinispan/persistence/file/SingleFileStore.java
.
18.9.1. Custom Cache Store Maven Archetype
Procedure 18.11. Generate a Maven Archetype
- Ensure the JBoss Data Grid Maven repository has been installed by following the instructions in the Red Hat JBoss Data Grid Getting Started Guide.
- Open a command prompt and execute the following command to generate an archetype in the current directory:
mvn -Dmaven.repo.local="path/to/unzipped/jboss-datagrid-6.6.0-maven-repository/" archetype:generate -DarchetypeGroupId=org.infinispan -DarchetypeArtifactId=custom-cache-store-archetype -DarchetypeVersion=6.4.1.Final-redhat-1
Note
The above command has been broken into multiple lines for readability; however, when executed this command and all arguments must be on a single line.
18.9.2. Custom Cache Store Configuration (Remote Client-Server Mode)
Example 18.2. Custom Cache Store Configuration
<distributed-cache name="cacheStore" mode="SYNC" segments="20" owners="2" remote-timeout="30000"> <store class="my.package.CustomCacheStore"> <property name="customStoreProperty">10</property> </store> </distributed-cache>
18.9.2.1. Option 1: Add Custom Cache Store using deployments (Remote Client-Server Mode)
Procedure 18.12. Deploy Custom Cache Store .jar file to JDG server using deployments
- Add the following Java service loader file
META-INF/services/org.infinispan.persistence.spi.AdvancedLoadWriteStore
to the module and add a reference to the Custom Cache Store Class, such as seen below:my.package.CustomCacheStore
- Copy the jar to the
$JDG_HOME/standalone/deployments/
directory. - If the .jar file is available the server the following message will be displayed in the logs:
JBAS010287: Registering Deployed Cache Store service for store 'my.package.CustomCacheStore'
- In the
infinispan-core
subsystem add an entry for the cache inside acache-container
, specifying the class that overrides one of the interfaces from Section 18.9, “Custom Cache Stores”:<subsystem xmlns="urn:infinispan:server:core:6.2"> [...] <distributed-cache name="cacheStore" mode="SYNC" segments="20" owners="2" remote-timeout="30000""> <store class="my.package.CustomCacheStore"> <!-- If custom properties are included these may be specified as below --> <property name="customStoreProperty">10</property> </store> </distributed-cache> [...] </subsystem>
18.9.2.2. Option 2: Add Custom Cache Store using the CLI (Remote Client-Server Mode)
Procedure 18.13. Deploying Custom Cache Store .jar file to JDG server using the CLI
- Connect to the JDG server by running the below command:
[$JDG_HOME] $ bin/cli.sh --connect=$IP:$PORT
- Deploy the .jar file by executing the following command:
deploy /path/to/artifact.jar
18.9.2.3. Option 3: Add Custom Cache Store using JON (Remote Client-Server Mode)
Procedure 18.14. Deploying Custom Cache Store .jar file to JDG server using JBoss Operation Network
- Log into JON.
- Navigate to
Bundles
along the upper bar. - Click the
New
button and choose theRecipe
radio button. - Insert a deployment bundle file content that references the store, similar to the following example:
<?xml version="1.0"?> <project name="cc-bundle" default="main" xmlns:rhq="antlib:org.rhq.bundle"> <rhq:bundle name="Mongo DB Custom Cache Store" version="1.0" description="Custom Cache Store"> <rhq:deployment-unit name="JDG" compliance="full"> <rhq:file name="custom-store.jar"/> </rhq:deployment-unit> </rhq:bundle> <target name="main" /> </project>
- Proceed with
Next
button toBundle Groups
configuration wizard page and proceed withNext
button once again. - Locate custom cache store
.jar
file using file uploader andUpload
the file. - Proceed with
Next
button toSummary
configuration wizard page. Proceed withFinish
button in order to finish bundle configuration. - Navigate back to the
Bundles
tab along the upper bar. - Select the newly created bundle and click
Deploy
button. - Enter
Destination Name
and choose the proper Resource Group; this group should only consist of JDG servers. - Choose
Install Directory
fromBase Location
's radio box group. - Enter
/standalone/deployments
inDeployment Directory
text field below. - Proceed with the wizard using the default options.
- Validate the deployment using the following command on the server's host:
find $JDG_HOME -name "custom-store.jar"
- Confirm the bundle has been installed in
$JDG_HOME/standalone/deployments
.
18.9.3. Custom Cache Store Configuration (Library Mode)
Example 18.3. Custom Cache Store Configuration
<persistence> <store class="org.infinispan.custom.CustomCacheStore" preload="true" shared="true"> <properties> <property name="customStoreProperty" value="10" /> </properties> </store> </persistence>
Note