Red Hat Training

A Red Hat training course is available for Red Hat JBoss Data Virtualization

10.3. CMIS Connector

This connector exposes the content of a CMIS repository.
The Content Management Interoperability Services (CMIS) standard defines a domain model and Web Services, Restful AtomPub and browser (JSON) bindings that can be used by applications to work with one or more Content Management repositories/systems.
The CMIS connector is designed to be layered on top of existing Content Management systems. It is intended to use Apache Chemistry API to access services provided by Content Management system and incorporate those services into the hierarchical database content repository.
The connector class name is org.modeshape.connector.cmis.CmisConnector, and there are several attributes that should be configured on each external source:
Attribute Name
Description
aclService
URL of the Access list service binding entry point. The ACL Services are used to discover and manage Access Control Lists.
discoveryService
URL of the Discovery service binding entry point. Discovery service executes a CMIS query statement against the contents of the repository.
multifilingService
URL of the Multi-filing service binding entry point. The Multi-filing Services are used to file/un-file objects into/from folders.
navigationService
URL of the Navigation service binding entry point. The Navigation service gets the list of child objects contained in the specified folder.
objectService
URL of the Object service binding entry point. Creates a document object of the specified type (given by the cmis:objectTypeId property) in the (optionally) specified location
policyService
URL of the Policy service binding entry point. Applies a specified policy to an object.
relationshipService
URL of the Relationship service binding entry point. Gets all or a subset of relationships associated with an independent object.
repositoryService
URL of the Repository service binding entry point. Returns a list of CMIS repositories available from this CMIS service endpoint.
versioningService
URL of the Policy service binding entry point. Create a private working copy (PWC) of the document.
readOnly
A boolean flag that specifies whether this source can create/modify/remove files and directories on the file system to reflect changes in the JCR content. By default, sources are not read-only.
cacheTtlSeconds
Optional property that specifies the default maximum number of seconds (i.e., time to live) that a node returned by this connector should be cached in the workspace cache before being expired. By default, the connector will not set a special value, and the repository will determine how long the node is cached in the workspace cache.
isQueryable
Optional property that specifies whether or not the content exposed by this connector should be indexed by the repository. This acts as a global flag, allowing a specific connector to mark its entire content as non-queryable. By default, all content exposed by a connector is queryable.
Here is a sample configuration that projects the CMIS repository into the Modeshape repository under the /cmis/ node
{
    ...
    "externalSources" : {
        "cmis" : {
            "classname" : "org.modeshape.connector.CmisConnector",
            "cacheTtlSeconds" : 5,
            "aclService" : "http://localhost:8080/services/ACLService?wsdl",
            "discoveryService" : "http://localhost:8080/services/DiscoveryService?wsdl",
            "multifilingService" : "http://localhost:8080/services/MultifilingService?wsdl",
            "navigationService" : "http://localhost:8080/services/NavigationService?wsdl",
            "objectService" : "http://localhost:8080/services/ObjectService?wsdl",
            "policyService" : "http://localhost:8080/services/PolicyService?wsdl",
            "relationshipService" : "http://localhost:8080/services/RelationshipService?wsdl",
            "repositoryService" : "http://localhost:8080/services/RepositoryService?wsdl",
            "versioningService" : "http://localhost:8080/services/VersioniongService?wsdl",
            "repositoryId" : "A1",
            "projections" : [ "default:/cmis => /" ]
        }
    }
    ...
}
Here is the same configuration except that a variable is used so that the actual URLs can be set with a system property:
{
    ...
    "externalSources" : {
        "cmis" : {
            "classname" : "org.modeshape.connector.CmisConnector",
            "cacheTtlSeconds" : 5,
            "aclService" : "${custom.cmis.services.url}/ACLService?wsdl",
            "discoveryService" : "${custom.cmis.services.url}/DiscoveryService?wsdl",
            "multifilingService" : "${custom.cmis.services.url}/MultifilingService?wsdl",
            "navigationService" : "${custom.cmis.services.url}/NavigationService?wsdl",
            "objectService" : "${custom.cmis.services.url}/ObjectService?wsdl",
            "policyService" : "${custom.cmis.services.url}/PolicyService?wsdl",
            "relationshipService" : "${custom.cmis.services.url}/RelationshipService?wsdl",
            "repositoryService" : "${custom.cmis.services.url}/RepositoryService?wsdl",
            "versioningService" : "${custom.cmis.services.url}/VersioniongService?wsdl",
            "repositoryId" : "A1",
            "projections" : [ "default:/cmis => /" ]
        }
    }
    ...
}
The Repository structure is defined as follows
Path
Description
/repository_info
The description of the CMIS repository
/filesAndFolders
The structure of the folders and files in the projected repository
Node types used by connectors are specified by JCR specifications or imported from CMIS repository itself. Most important node types are as follows:
Node Type
Description
nt:folder
The primary node type for the node representing CMIS folder
nt:file
The primary node type for the node representing CMIS document
nt:resource
The primary node type for the node representing binary content of the CMIS document
cmis:repository
The primary node type for the node representing information of CMIS repository itself