| CMIS server implementation on top of JCR |
| ======================================== |
| |
| Getting started |
| --------------- |
| To get a running instance on top of a transient JCR repository |
| (Apache Jackrabbit) use the develop profile: |
| |
| mvn -o -Dlog4j.configuration=file:./log4j.config -Pdevelop jetty:run |
| |
| This builds the web application with Apache Jackrabbit included and deploys it into |
| Jetty. The JCR repository is now available via CMIS at |
| |
| http://localhost:8080/chemistry-opencmis-server-jcr/atom |
| |
| Use admin/admin to log in. |
| |
| |
| Features and limitations |
| ------------------------ |
| General: |
| - Mapping is implemented as follows: JCR node type nt:file with JCR mixin mix:simpleVersionable |
| is mapped to CMIS object type cmis:document. JCR node type nt:file without JCR mixin |
| mix:simpleVersionable is mapped to CMIS object type cmis:unversioned-document. All other JCR |
| node types are mapped to CMIS object type cmis:folder. |
| |
| Versioning: |
| - Each version of a CMIS document corresponds to a version in JCR |
| |
| - A private working copy in CMIS corresponds to the actual node in JCR |
| |
| - CMIS checkout/in are mapped to JCR checkout/in respectively |
| |
| - CMIS cancelCheckout is mapped to a restore operation of the base version in JCR. |
| This has the side effect of creating a new version when canceling a checkout. |
| |
| - checkin comment is not supported |
| |
| - All versions are major |
| |
| - The JCR version name is mapped to the CMIS version label as follows: |
| if the JCR version name matches (\d+)(\.(\d+))?.* the value of the third group |
| is appended with ".0" and then used for the CMIS version label. Otherwise the JCR |
| version name is used for the CMIS version label. |
| |
| - Deleting of single versions is not supported |
| |
| Query: |
| - CMIS IN_TREE and CMIS IN_FOLDER predicates must not occur more than once in the |
| WHERE clause. |
| |
| - CMIS IN_TREE and CMIS IN_FOLDER predicates may only occur in affirmative position |
| in the WHERE clause. A literal 'p' in a boolean expression 'X'is affirmative if |
| there exists a boolean expression 'Y' such that 'p' AND Y = X'. |
| |
| - <>, <, > comparison operators are not allowed on cmis:name |
| |
| - CRX's Lucene index has some latency until it is up to date. This can cause queries |
| to miss documents right after creating them. |
| |
| - CMIS IN and CMIS ANY operators are not supported. |
| |
| - The following columns are not supported in queries: cmis:baseTypeId, |
| cmis:changeToken |
| |
| - The following columns are not supported in queries for cmis:document and |
| cmis:unversioned-document: cmis:isImmutable, cmis:isLatestVersion, cmis:isMajorVersion, |
| cmis:isLatestMajorVersion, cmis:versionLabel, cmis:versionSeriesId, |
| cmis:isVersionSeriesCheckedOut, cmis:versionSeriesCheckedOutId, |
| cmis:versionSeriesCheckedOutBy, cmis:checkinComment, cmis:contentStreamLength, |
| cmis:contentStreamId |