This addon provides a set of simple / common content store implementations to enhance any installation of Alfresco Community or Enterprise. It also provides a mechanism that supports configuring custom content stores without any need for Spring bean definition / XML manipulation or overriding, just by using properties inside of the alfresco-global.properties file. General information about general aspects and configuration approach can be found in the specific documentation pages in the
docs folder in this project.
This module is built to be compatible with Alfresco 5.2 and above. It may be used on either Community or Enterprise Edition. Separate branches exist for compatibility versions targeting Alfresco 4.2 and 5.0/5.1.
Currently, this addon provides:
- a simple file store
- a tenant routing file store (for backwards compatibility with Alfresco default unencrypted content store)
- a site file store
- a site routing store
- a tenant routing store
- a selector property-based routing store
- a compressing store
- a deduplicating store
- an encrypting store
- a caching store
- an aggregating store
- a dummy store
This project uses a Maven build using templates from the Acosix Alfresco Maven project and produces module AMPs, regular Java classes JARs, JavaDoc and source attachment JARs, as well as installable (Simple Alfresco Module) JAR artifacts for the Alfresco Content Services and Share extensions. If the installable JAR artifacts are used for installing this module, developers / users are advised to consult the 'Dependencies' section of this README.
By inheritance from the Acosix Alfresco Maven framework, this project uses the Maven Toolchains plugin to allow potential cross-compilation against different Java versions. This plugin is used to avoid potentially inconsistent compiler and library versions compared to when only the source/target compiler options of the Maven compiler plugin are set, which (as an example) has caused issues with some Alfresco releases in the past where Alfresco compiled for Java 7 using the Java 8 libraries. In order to build the project it is necessary to provide a basic toolchain configuration via the user specific Maven configuration home (usually ~/.m2/). That file (toolchains.xml) only needs to list the path to a compatible JDK for the Java version required by this project. The following is a sample file defining a Java 7 and 8 development kit.
<?xml version='1.0' encoding='UTF-8'?> <toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd"> <toolchain> <type>jdk</type> <provides> <version>1.8</version> <vendor>oracle</vendor> </provides> <configuration> <jdkHome>C:\Program Files\Java\jdk1.8.0_112</jdkHome> </configuration> </toolchain> <toolchain> <type>jdk</type> <provides> <version>1.7</version> <vendor>oracle</vendor> </provides> <configuration> <jdkHome>C:\Program Files\Java\jdk1.7.0_80</jdkHome> </configuration> </toolchain> </toolchains>
This is used in the branch targeting Alfresco 4.2 which requires Java 7, while the branch for Alfresco 5.0 / 5.1 as well as master (Alfresco 5.2 and newer) all use Java 8.
Docker-based integration tests
In a default build using
mvn clean install, this project will build the extension for Alfresco Content Services, executing regular unit-tests without running integration tests. The integration tests of this project are based on Docker and require a Docker engine to run the necessary components (PostgreSQL database as well as Alfresco Content Services). Since a Docker engine may not be available in all environments of interested community members / collaborators, the integration tests have been made optional. A full build, including integration tests, can be run by executing
mvn clean install -Ddocker.tests.enabled=true
Note: The Docker-based integration tests are currently only available on the master branch. This is due to the fact that official Alfresco Docker images are only available for Alfresco 6.0 and above, and the public ReST API used in the integration tests is only available for Alfresco 5.2 and above. Acosix will work on building custom images for earlier Alfresco versions to be used in integration tests in future versions, while switching over to using - and possibly even providing custom - legacy ReST APIs via web scripts.
Due to OS- and file system specific permission handling, as well as the use of Docker mounted directories to access the Alfresco content store from within unit test classes, the integration tests may also not work on systems with strict file system security in place. The project is currently being developed in a Microsoft Windows environment, and integration tests should work without fail in that environment, while *nix-based environments have been reported as problematic. Acosix will aim to work on finding alternative approaches to verifying files in the content store in future versions to enable integration tests to be run on any environment.
This module depends on the following projects / libraries:
- Tukaani XZ for Java (Public Domain)
- Acosix Alfresco Utility (Apache License, Version 2.0) - core extension
The AMP of this project includes the Tukaani XZ for Java JAR. The Acosix Alfresco Utility project provides the core extension for Alfresco Content Services as a separate artifact from the full module, which needs to be installed in Alfresco Content Services before the AMP of this project can be installed.
When the installable JAR produced by the build of this project is used for installation, the developer / user is responsible to either manually install all the required components / libraries provided by the listed projects, or use a build system to collect all relevant direct / transitive dependencies. Note: The Acosix Alfresco Utility project is also built using templates from the Acosix Alfresco Maven project, and as such produces similar artifacts. Automatic resolution and collection of (transitive) dependencies using Maven / Gradle will resolve the Java classes JAR as a dependency, and not the installable (Simple Alfresco Module) variant. It is recommended to exclude Acosix Alfresco Utility from transitive resolution and instead include it directly / explicitly.
Using SNAPSHOT builds
In order to use a pre-built SNAPSHOT artifact published to the Open Source Sonatype Repository Hosting site, the artifact repository may need to be added to the POM, global settings.xml or an artifact repository proxy server. The following is the XML snippet for inclusion in a POM file.
<repositories> <repository> <id>ossrh</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>