JBoss.orgCommunity Documentation

Chapter 18. Infinispan Connector

The Infinispan repository connector allows a Infinispan instance to be used as a ModeShape (and thus JCR) repository. This provides a way for the content in a repository to be stored in an effective, scalable, and distributed data grid, and can be federated with other repository sources to provide a distributed repository.

The InfinispanSource class provides a number of JavaBean properties that control its behavior:

Table 18.1. InfinispanSource properties

PropertyDescription
cacheManagerJndiNameOptional property that, if used, specifies the name in JNDI where an existing Infinispan Cache Manager instance can be found. That factory would then be used if needed to create an Infinispan Cache instance. If no value is provided, then the Infinispan DefaultCacheManager class is used.
cacheConfigurationNameOptional property that, if used, specifies the name of the configuration that is supplied to the cache manager when creating a new Infinispan CacheManager instance.
defaultCachePolicyOptional property that, if used, defines the default for how long this information provided by this source may to be cached by other, higher-level components. The default value of null implies that this source does not define a specific duration for caching information provided by this repository source.
defaultWorkspaceNameOptional property that is initialized to an empty string and which defines the name for the workspace that will be used by default if none is specified.
nameThe name of the repository source, which is used by the RepositoryService when obtaining a RepositoryConnection by name.
predefinedWorkspaceNamesOptional property that defines the names of the workspaces that exist and that are available for use without having to create them.
retryLimitOptional property that, if used, defines the number of times that any single operation on a RepositoryConnection to this source should be retried following a communication failure. The default value is '0'.
rootNodeUuidOptional property that, if used, specifies the UUID that should be used for the root node of each workspace. If no value is specified, a random UUID is generated each time that the repository is started.
updatesAllowedDetermines whether the content in the connector is can be updated ("true"), or if the content may only be read ("false"). The default value is "true".

One way to configure the Infinispan connector is to create JcrConfiguration instance with a repository source that uses the InfinispanSource class. For example:



JcrConfiguration config = ...
config.repositorySource("Infinispan Store")
      .usingClass(InfinispanSource.class)
      .setDescription("The repository for our content")
      .setProperty("defaultWorkspaceName", "prod")
      .setProperty("rootNodeUuid", UUID.fromString("84b73fc8-81a8-42ed-aa4b-3905094966f0")
      .setProperty("predefinedWorkspaceNames", new String[] { "staging", "dev"});

Another way to configure the Infinispan connector is to create JcrConfiguration instance and load an XML configuration file that contains a repository source that uses the InfinispanSource class. For example a file named configRepository.xml can be created with these contents:



<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:mode="http://www.modeshape.org/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0">
    <!-- 
    Define the sources for the content.  These sources are directly accessible using the 
    ModeShape-specific Graph API.  In fact, this is how the ModeShape JCR implementation works.  You 
    can think of these as being similar to JDBC DataSource objects, except that they expose 
    graph content via the Graph API instead of records via SQL or JDBC. 
    -->
    <mode:sources jcr:primaryType="nt:unstructured">
        <!-- 
        The 'Infinispan Store' repository is a Infinispan repository with a single default 
        workspace (though others could be created, too).
        -->
        <mode:source jcr:name="Infinispan Store" 
                    mode:classname="org.modeshape.graph.connector.infinispan.InfinispanSource" 
                    mode:description="The repository for our content"
                    mode:defaultworkspaceName="prod"
                    mode:rootNodeUuid="84b73fc8-81a8-42ed-aa4b-3905094966f0"
                    mode:predefinedWorkspaceNames="staging,dev"/>    
    </mode:sources>
    
    <!-- MIME type detectors and JCR repositories would be defined below --> 
</configuration>
 

The configuration can then be loaded from Java like this:



JcrConfiguration config = new JcrConfiguration().loadFrom("/configRepository.xml");