CAS systems store and locate files using addresses based on the file's content, rather than a physical location address. CAS systems are typically used for long-term storage of content that does not require frequent access or where it is stored for regulatory purposes.
When a CAS system stores content, it generates a unique key or hash, which is based on the content. The hash is generated from the content properties, such as the name, date, or content itself.
An example hash might be EQM2GC012MC77e72B24N2MMFU59G418ACSAIE70BAS340TN3E1JJL. This hash is then used as the address of the stored content, and which is then used to retrieve the content. When a request is made to the CAS using this address, it returns the associated content.
The Alfresco EMC Centera Connector module addresses the Centera store directly through its native API.
The module uses a series of properties to control the way that you access the store. A feature of this module allows you to set retention policies, such as, preventing content from being deleted for a period of time (for example, retaining invoices for seven years).
The Alfresco EMC Centera Connector module can be applied to Alfresco Enterprise 4.2.0 or later.
The software is available from the EMC Community Network. You will need to register and login to the Community Network before you can access the required software.
Download the following prerequisite software:
To download, go to http://www.microsoft.com/en-us/download/default.aspx [9].
To download, go to https://developer-content.emc.com/downloads/centera/download.htm [10] (login to the site required).
To download, go to https://community.emc.com/docs/DOC-2393 [11].
To download, go to https://community.emc.com/docs/DOC-1038 [12].
On 32-bit systems, the subdirectory structure of the C:\centera directory includes the following directories:
docs include lib lib32 sdk_samples
On 64-bit systems, the subdirectory structure of the C:\centera directory includes the following directories:
docs include lib lib64 sdk_samples
For example, c2armtesting.pea.
10.01.2014 17:55 <DIR> . 10.01.2014 17:55 <DIR> .. 11.12.2013 16:25 2 470 c2armtesting.pea 10.01.2014 17:41 <DIR> docs 10.01.2014 17:41 <DIR> include 10.01.2014 17:41 <DIR> lib 10.01.2014 17:41 <DIR> lib32 10.01.2014 17:41 <DIR> sdk_samples 1 File(s) 2 470 bytes 7 Dir(s) 49 088 593 920 bytes free
The structure of the C:\centera directory is similar to the following example (for 64-bit systems):
10.01.2014 17:55 <DIR> . 10.01.2014 17:55 <DIR> .. 11.12.2013 16:25 2 470 c2armtesting.pea 10.01.2014 17:37 <DIR> docs 10.01.2014 17:37 <DIR> include 10.01.2014 17:37 <DIR> lib 10.01.2014 17:37 <DIR> lib64 10.01.2014 17:37 <DIR> sdk_samples 1 File(s) 2 470 bytes 7 Dir(s) 49 088 593 920 bytes free
The structure of the C:\centera\lib32 directory is similar to the following example:
10.01.2014 17:41 <DIR> . 10.01.2014 17:41 <DIR> .. 29.08.2012 17:33 774 144 FPCore.dll 29.08.2012 17:33 610 304 FPLibrary.dll 29.08.2012 17:33 610 948 FPLibrary.lib 29.08.2012 17:33 323 584 fpos32.dll 29.08.2012 17:33 2 011 136 fpparser.dll 29.08.2012 17:33 184 320 FPStreams.dll 29.08.2012 17:33 438 272 FPUtils.dll 29.08.2012 17:33 184 320 FPXML.dll 10.01.2014 17:41 <DIR> lib 29.08.2012 17:33 262 144 pai_module.dll 9 File(s) 5 399 172 bytes 3 Dir(s) 49 088 593 920 bytes free
The structure of the C:\centera\lib64 directory is similar to the following example:
10.01.2014 17:37 <DIR> . 10.01.2014 17:37 <DIR> .. 29.08.2012 17:34 983 552 FPCore.dll 29.08.2012 17:34 690 688 FPLibrary.dll 29.08.2012 17:34 616 178 FPLibrary.lib 29.08.2012 17:34 412 160 fpos64.dll 29.08.2012 17:34 2 919 424 fpparser.dll 29.08.2012 17:34 165 888 FPStreams.dll 29.08.2012 17:34 483 840 FPUtils.dll 29.08.2012 17:34 168 960 FPXML.dll 10.01.2014 17:37 <DIR> lib 29.08.2012 17:34 63 488 pai_module.dll 9 File(s) 6 504 178 bytes 3 Dir(s) 49 088 593 920 bytes free
A subdirectory structure of the /opt/Centera_SDK directory includes the following directories:
total 20 drwxr-xr-x. 4 root root 4096 Jan 10 21:32 docs drwxr-xr-x. 2 root root 4096 Jan 10 21:32 include drwxr-xr-x. 2 root root 4096 Aug 30 2012 install drwxr-xr-x. 2 root root 4096 Jan 10 21:32 lib drwxr-xr-x. 13 root root 4096 Sep 14 2006 sdk_samples
cd /opt/Centera_SDK/install ./install
The default installation directory is /usr/local/Centera_SDK.
For example, c2armtesting.pea.
total 12 -rw-r--r--. 1 root root 2470 Dec 11 16:25 c2armtesting.pea drwxr-xr-x. 2 root root 4096 Dec 19 22:51 include drwxr-xr-x. 4 root root 4096 Dec 19 22:51 lib
The structure of the /usr/local/Centera_SDK/lib/32 directory is similar to the following example:
total 6316 lrwxrwxrwx. 1 root root 52 Dec 19 22:51 libFPCore32.so -> /usr/local/Centera_SDK/lib/32/libFPCore32.so.3.3.719 -rwxr-xr-x. 1 root root 1063484 Dec 19 22:51 libFPCore32.so.3.3.719 lrwxrwxrwx. 1 root root 44 Dec 19 22:51 libFPCore.so -> /usr/local/Centera_SDK/lib/32/libFPCore32.so lrwxrwxrwx. 1 root root 55 Dec 19 22:51 libFPLibrary32.so -> /usr/local/Centera_SDK/lib/32/libFPLibrary32.so.3.3.719 -rwxr-xr-x. 1 root root 643603 Dec 19 22:51 libFPLibrary32.so.3.3.719 lrwxrwxrwx. 1 root root 47 Dec 19 22:51 libFPLibrary.so -> /usr/local/Centera_SDK/lib/32/libFPLibrary32.so lrwxrwxrwx. 1 root root 53 Dec 19 22:51 libFPParser32.so -> /usr/local/Centera_SDK/lib/32/libFPParser32.so.3.3.50 -rwxr-xr-x. 1 root root 3800245 Dec 19 22:51 libFPParser32.so.3.3.50 lrwxrwxrwx. 1 root root 46 Dec 19 22:51 libFPParser.so -> /usr/local/Centera_SDK/lib/32/libFPParser32.so lrwxrwxrwx. 1 root root 55 Dec 19 22:51 libFPStreams32.so -> /usr/local/Centera_SDK/lib/32/libFPStreams32.so.3.3.719 -rwxr-xr-x. 1 root root 121784 Dec 19 22:51 libFPStreams32.so.3.3.719 lrwxrwxrwx. 1 root root 47 Dec 19 22:51 libFPStreams.so -> /usr/local/Centera_SDK/lib/32/libFPStreams32.so lrwxrwxrwx. 1 root root 53 Dec 19 22:51 libFPUtils32.so -> /usr/local/Centera_SDK/lib/32/libFPUtils32.so.3.3.719 -rwxr-xr-x. 1 root root 648376 Dec 19 22:51 libFPUtils32.so.3.3.719 lrwxrwxrwx. 1 root root 45 Dec 19 22:51 libFPUtils.so -> /usr/local/Centera_SDK/lib/32/libFPUtils32.so lrwxrwxrwx. 1 root root 51 Dec 19 22:51 libFPXML32.so -> /usr/local/Centera_SDK/lib/32/libFPXML32.so.3.3.719 -rwxr-xr-x. 1 root root 129647 Dec 19 22:51 libFPXML32.so.3.3.719 lrwxrwxrwx. 1 root root 43 Dec 19 22:51 libFPXML.so -> /usr/local/Centera_SDK/lib/32/libFPXML32.so lrwxrwxrwx. 1 root root 56 Dec 19 22:51 libPAI_module32.so -> /usr/local/Centera_SDK/lib/32/libPAI_module32.so.3.3.100 -rwxr-xr-x. 1 root root 49036 Dec 19 22:51 libPAI_module32.so.3.3.100 lrwxrwxrwx. 1 root root 48 Dec 19 22:51 libPAI_module.so -> /usr/local/Centera_SDK/lib/32/libPAI_module32.so
The structure of the /usr/local/Centera_SDK/lib/64 directory is similar to the following example:
total 6736 lrwxrwxrwx. 1 root root 52 Dec 19 22:51 libFPCore64.so -> /usr/local/Centera_SDK/lib/64/libFPCore64.so.3.3.719 -rwxr-xr-x. 1 root root 1098829 Dec 19 22:51 libFPCore64.so.3.3.719 lrwxrwxrwx. 1 root root 44 Dec 19 22:51 libFPCore.so -> /usr/local/Centera_SDK/lib/64/libFPCore64.so lrwxrwxrwx. 1 root root 55 Dec 19 22:51 libFPLibrary64.so -> /usr/local/Centera_SDK/lib/64/libFPLibrary64.so.3.3.719 -rwxr-xr-x. 1 root root 671881 Dec 19 22:51 libFPLibrary64.so.3.3.719 lrwxrwxrwx. 1 root root 47 Dec 19 22:51 libFPLibrary.so -> /usr/local/Centera_SDK/lib/64/libFPLibrary64.so lrwxrwxrwx. 1 root root 53 Dec 19 22:51 libFPParser64.so -> /usr/local/Centera_SDK/lib/64/libFPParser64.so.3.3.50 -rwxr-xr-x. 1 root root 4061679 Dec 19 22:51 libFPParser64.so.3.3.50 lrwxrwxrwx. 1 root root 46 Dec 19 22:51 libFPParser.so -> /usr/local/Centera_SDK/lib/64/libFPParser64.so lrwxrwxrwx. 1 root root 55 Dec 19 22:51 libFPStreams64.so -> /usr/local/Centera_SDK/lib/64/libFPStreams64.so.3.3.719 -rwxr-xr-x. 1 root root 134962 Dec 19 22:51 libFPStreams64.so.3.3.719 lrwxrwxrwx. 1 root root 47 Dec 19 22:51 libFPStreams.so -> /usr/local/Centera_SDK/lib/64/libFPStreams64.so lrwxrwxrwx. 1 root root 53 Dec 19 22:51 libFPUtils64.so -> /usr/local/Centera_SDK/lib/64/libFPUtils64.so.3.3.719 -rwxr-xr-x. 1 root root 713762 Dec 19 22:51 libFPUtils64.so.3.3.719 lrwxrwxrwx. 1 root root 45 Dec 19 22:51 libFPUtils.so -> /usr/local/Centera_SDK/lib/64/libFPUtils64.so lrwxrwxrwx. 1 root root 51 Dec 19 22:51 libFPXML64.so -> /usr/local/Centera_SDK/lib/64/libFPXML64.so.3.3.719 -rwxr-xr-x. 1 root root 151395 Dec 19 22:51 libFPXML64.so.3.3.719 lrwxrwxrwx. 1 root root 43 Dec 19 22:51 libFPXML.so -> /usr/local/Centera_SDK/lib/64/libFPXML64.so lrwxrwxrwx. 1 root root 56 Dec 19 22:51 libPAI_module64.so -> /usr/local/Centera_SDK/lib/64/libPAI_module64.so.3.3.100 -rwxr-xr-x. 1 root root 52961 Dec 19 22:51 libPAI_module64.so.3.3.100 lrwxrwxrwx. 1 root root 48 Dec 19 22:51 libPAI_module.so -> /usr/local/Centera_SDK/lib/64/libPAI_module64.so
For example:
centera.url=168.159.214.24?c:/centera/c2armtesting.pea
The centera.url property specifies the details of the EMC Centera server. For example, in this case, it specifies the IP address 168.159.214.24.
The property also includes the location of the Centera c2armtesting.pea file. For example, C:/centera/c2armtesting.pea or /usr/local/Centera_SDK/c2armtesting.pea.
There are various additional properties that can be set to control the Alfresco EMC Centera Connector module. For example, the retention period for storing content is controlled using the xam.archive.retentionPeriodDays=1 property.
On Windows, set the Path environment variable.
For example:
Path=c:\centera\lib64
On Linux, set the PATH and LD_LIBRARY_PATH environment variables.
For example:
export PATH=$PATH:/usr/local/Centera_SDK/lib/64 export LD_LIBRARY_PATH=/usr/local/Centera_SDK/lib/64
Set these properties in the alfresco-global.properties file.
Alfresco can be configured to allow deletes in conflict to the EMC Centera enforce retention periods. A retention period is the time that a C-Clip and its underlying blobs must be stored on an EMC Centera before an application is allowed to delete them. According to configuration, retentionPeriod is set to 1 day. If you switch the server date to 1-2 days ahead on the Alfresco side, this will not result in the expiry of retention periods in the EMC Centera cluster. For this reason, delete is not permitted. You should not change the date/time but wait until this period finished. Change the xam.archive.retentionPeriodDays to be not be greater then system.content.orphanProtectDays. This will prevent the cleaner from deleting non-expired Centera binary content.
java -jar JCASScript.jar
poolOpen 168.159.214.24?/usr/local/Centera_SDK/c2armtesting.pea
An example of the output is as follows:
CASScript>poolOpen 168.159.214.24?/usr/local/Centera_SDK/c2armtesting.pea Attempting to connect to: 168.159.214.24?/usr/local/Centera_SDK/c2armtesting.pea Connected to: 168.159.214.24?/usr/local/Centera_SDK/c2armtesting.pea CASPool Properties: Connection String: 168.159.214.24?/usr/local/Centera_SDK/c2armtesting.pea Cluster Time: 2014.01.10 06:25:31 GMT Buffer Size: 16384 Prefetch Buffer Size: 32768 Connection Timeout: 120000 Multi-Cluster Failover Enabled: True Collision Avoidance Enabled: False
java -jar <installLocation>\bin\alfresco-mmt.jar install <installLocation>\amps\alfresco_centera-connector-1.0.7.amp <installLocation>\tomcat\webapps\alfresco.war
If your Alfresco installation is running within the Tomcat application server, you can use the <installLocation>\bin\apply_amps command to apply all AMP files that are located in the <installLocation>\amps directory.
For example:
log4j.logger.org.alfresco.enterprise.repo.content.centera=DEBUG log4j.logger.org.alfresco.enterprise.repo.centera=DEBUG
For example:
<alfresco-config> <config evaluator="node-type" condition="cm:content"> <forms> <form> <!-- 2 column template --> <edit-form /> <field-visibility> <!-- aspect: cm:storeSelector --> <show id="cm:storeName" /> <!-- aspect: xam:archive --> <show id="xam:dateArchived" for-mode="view" /> <show id="xam:retainUntil" for-mode="view" /> <show id="cm:content" for-mode="view" /> </field-visibility> <appearance> <!-- Store Selector --> <field id="cm:storeName" label="Store Name" description="Content Store Name" /> <set id="xam-archive" appearance="bordered-panel" label="XAM Archived" /> <field id="xam:dateArchived" label="XAM Date Archived" set="xam-archive" /> <field id="xam:retainUntil" label="XAM Retain Until Date" set="xam-archive" /> </appearance> </form> </forms> </config> <config evaluator="string-compare" condition="DocumentLibrary"> <aspects> <visible> <aspect name="xam:archive" label="XAM Archive" /> </visible> </aspects> </config> </alfresco-config>
The new store is shown as xamArchive and the retainedUntil date is set.
For example:
CASScript>clipopen EQM2GC012MC77e72B24N2MMFU59G418ACSAIE70BAS340TN3E1JJL Clip Properties: Name: untitled Creation Date: 2013.11.27 01:35:09 GMT Size: 13474 Number of Tags: 1 Number of Blobs: 1 Retention Class: Retention Seconds: 86396 Modified: False EBR Enabled : False Retention Hold: False
CASScript>clipattribs Number of attributes: 17 Name: creation.poolid Value: 861673fa-1dd2-11b2-b535-b66ede9133c1-7 Name: retention.period Value: 86396 Name: sdk.version Value: 3.3.718 Name: modification.poolid Value: 861673fa-1dd2-11b2-b535-b66ede9133c1-7 Name: type Value: Standard Name: name Value: untitled Name: creation.date Value: 2013.11.27 13:35:09 GMT Name: modification.date Value: 2013.11.27 13:35:12 GMT Name: creation.profile Value: armtesting Name: modification.profile Value: armtesting Name: numfiles Value: 1 Name: totalsize Value: 13474 Name: refid Value: E5S2HABU8PRRBAS340TN3E1JJL Name: clusterid Value: 25c57a54-1dd2-11b2-b87c-ce625a7031f2 Name: prev.clip Value: Name: clip.naming.scheme Value: MD5 Name: numtags Value: 1
Select the first tag of the opened C-Clip. For example:
CASScript>tagfirst CASTag Properties: Name: com.alfresco.content Has Blob: True Blob Size: 13474 Number of Attributes:10 Has Parent: False Has Next Sibling: False Has Child: False
Display all the attributes. For example:
CASScript>tagattribs Number of attributes: 10 Name: modified-date Value: 1385553402696 Name: com.alfresco.xam.archive.node.sys:ref Value: workspace://SpacesStore/51bba786-184b-4d7b-8b2a-da90875e5b16 Name: com.alfresco.xam.archive.app.name Value: Main Repository Name: com.alfresco.xam.archive.node.cm:created Value: 2013-11-27T15:56:27.011+04:00 Name: com.alfresco.xam.archive.app.version Value: 4.2.0 (28) Name: com.alfresco.xam.archive.app.db Value: jdbc:mysql://localhost:3306/alfresco?useUnicode=yes&characterEncoding=UTF-8 Name: com.alfresco.xam.archive.node.sys:path Value: /app:company_home/st:sites/cm:test/cm:documentLibrary/cm: abc.txt Name: com.alfresco.xam.archive.node.cm:creator Value: admin Name: com.alfresco.xam.archive.node.cm:name Value: abc.txt Name: com.alfresco.xam.archive.app.vendor Value: Alfresco Software
This setup relates to new content and cannot be done retrospectively, unless all content is moved from the file system to EMC Centera.
For example, <installLocation>/tomcat/shared/classes/alfresco/extension.
For example:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <bean id="org_alfresco_module_centera_centeraContentStore" class="org.alfresco.enterprise.repo.content.centera.CenteraContentStore" init-method="init"> <property name="readOnly" value="false" /> <property name="centeraConnection" ref="org_alfresco_module_centera_centeraConnection"/> <property name="contentFieldName" value="${xam.archive.contentFieldName}"/> </bean> </beans>
For example:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <bean id="fileContentStore" class="org.alfresco.enterprise.repo.content.centera.CenteraContentStore" init-method="init"> <property name="readOnly" value="false" /> <property name="centeraConnection" ref="org_alfresco_module_centera_centeraConnection"/> <property name="contentFieldName" value="${xam.archive.contentFieldName}"/> </bean> </beans>
xam.archive.contentFieldName=com.alfresco.content
Links:
[1] https://docs.alfresco.com/../concepts/centera-required-software.html
[2] https://docs.alfresco.com/../tasks/centera-setup-windows.html
[3] https://docs.alfresco.com/../tasks/centera-setup-linux.html
[4] https://docs.alfresco.com/../tasks/centera-connection-config.html
[5] https://docs.alfresco.com/../tasks/centera-install-amp.html
[6] https://docs.alfresco.com/../tasks/centera-connector-module-test.html
[7] https://docs.alfresco.com/../tasks/centera-contentstore-primary.html
[8] https://docs.alfresco.com/../concepts/master-ch-install.html
[9] http://www.microsoft.com/en-us/download/default.aspx
[10] https://developer-content.emc.com/downloads/centera/download.htm
[11] https://community.emc.com/docs/DOC-2393
[12] https://community.emc.com/docs/DOC-1038
[13] https://docs.alfresco.com/../concepts/centera-intro.html
[14] https://docs.alfresco.com/../concepts/centera-connector-properties.html
[15] https://docs.alfresco.com/../tasks/centera-connection-test.html
[16] http://download.oracle.com/javase/tutorial/essential/regex/
[17] http://download.oracle.com/javase/6/docs/api/
[18] http://support.alfresco.com
[19] https://docs.alfresco.com/ccs-config.html