Alfresco Documentation
Published on Alfresco Documentation (https://docs.alfresco.com)

Home > Alfresco Content Services 6.2 > Configuring

Configuring

Use this information to configure Alfresco Content Services.

Follow these links if you are configuring integrations or modules:
  • Installing and configuring Alfresco Outlook Integration [1]
  • Installing and configuring Alfresco Media Management [2]
  • Configuring Alfresco Governance Services [3]
  • Configuration overview [4]Alfresco Content Services is preconfigured with a set of system configuration parameters. Many of the system configuration parameters are completely exposed as properties, which you can configure for your specific environment requirements.
  • Configuring subsystems [5] A subsystem is a configurable module responsible for a sub-part of Alfresco Content Services functionality. Typically, a subsystem wraps an optional functional area, such as IMAP bindings, or one with several alternative implementations, such as authentication.
  • Configuring databases [6] Use this information to configure supported databases for use with Alfresco Content Services.
  • Configuring the repository [7] Use this information to configure the Alfresco Content Services repository.
  • Configuring file servers [8] The File Server subsystem allows access to the Alfresco Content Services data stores through the FTP protocol. This allows you to browse to the repository using an FTP client.
  • Configuring email [9] Use this information to configure email services, including inbound and outbound email, subscriptions, and email clients.
  • Configuring email templates using v1 REST APIs [10] Use this information to configure customized email templates for your registered applications using the v1 REST APIs.
  • Configuring LibreOffice [11] You can transform a document from one format to another using the OOoJodconverter subsystem. This feature requires you to install LibreOffice.
  • Configuring ActiveMQ [12]Alfresco Content Services requires ActiveMQ for message queuing. ActiveMQ is also used by various other products.
  • Configuring Smart Folders [13]Smart Folders organize your content so that you can store files across your organization, but view them based on information requirement, not location.
  • Content modeling with Model Manager [14] Model Manager allows you to create and manage your own custom models in Alfresco Share. This is a user-friendly tool that enables you to add custom types, aspects, and properties to your models. Alfresco Content Services provides several out-of-the-box content models for specifying the core content types in the repository.
  • Configuring Alfresco Mobile [15]Alfresco Content Services Administrators can easily define the experience for their Alfresco Mobile users by choosing what each user sees in the Alfresco Mobile menu.
  • Configuring the APS Action [16] This section describes how to install and configure the APS Action. The APS Action is an optional Alfresco Content Services extension that installs an additional Start Process action in the Folder Rules mechanism. This allows users that use both Content Services and Alfresco Process Services to automatically start an APS Process, when a new document is added to a Content Services folder. Both systems must be installed for the action to work.
Parent topic: Alfresco Content Services 6.2 [17]

Configuration overview

Alfresco Content Services is preconfigured with a set of system configuration parameters. Many of the system configuration parameters are completely exposed as properties, which you can configure for your specific environment requirements.

Use the following methods to configure Alfresco Content Services:

  • Admin Console
  • Share Admin Tools
  • Editing the global properties
  • Using a JMX client, such as JConsole
CAUTION:
If you use multiple configuration methods, updates made using a JMX client will override any other settings, and updates in the Admin Console and Admin Tools override settings in alfresco-global.properties. These settings also persist in the database, and are not reflected back into the alfresco-global.properties file.

Admin Console

The Admin Console is an administrator's tool to manage your configuration. You can run the Admin Console from a browser without having to start Share. See Using the Admin Console [18] for more information.

Share Admin Tools

Share Admin Tools is an administrator's tool to create and manage users and groups from Alfresco Share, set application preferences, manage categories and tags, and browse the system information in the node browser. See Using the Alfresco Share Admin Tools [19] for more information.

Global properties file

The global properties file (alfresco-global.properties) is used to detect extended properties. For example, when you install Alfresco Content Services, many of the installation settings are saved in the global properties file. The global properties file is used to detect the extended properties. You can use the global properties to set all your property settings; whenever you make a change, you must restart the server to apply those changes. See Using the alfresco-global.properties file [20] for more information.

JMX client

The JMX client allows you to edit the settings while the system is running. The settings you change are automatically persisted in the database and synchronized across a cluster. When you start up Alfresco Content Services, the system initially uses the alfresco-global.properties file to set the properties in the JMX client, but then any changes you make in the JMX client persist in the database but are not reflected back into the alfresco-global.properties file. See Using a JMX client to change settings dynamically [21] for more information.

  • Using the alfresco-global.properties file [22] The global properties alfresco-global.properties file contains the customizations for extending Alfresco Content Services.
  • Disabling Alfresco Content Services features [23] You can disable common product components, if you do not require them for your Alfresco Content Services instance. This summary gives the example property settings for disabling the main components.
  • Using a JMX client to change settings dynamically [24] You can reconfigure Alfresco Content Services by shutting down the server, editing the relevant property in the configuration files, and then restarting the server. If you have installed the Oracle Java SE Development Kit (JDK), and have enabled JMX in your configuration files, there are some support operations that can be performed at runtime without needing to restart the server.
  • Using the Java command line to change settings dynamically [25] All Alfresco Content Services properties can be set using the standard alfresco-global.properties configuration file. There might be circumstances where it is more convenient to change properties on the fly. The Java command line provides an alternative method of setting the properties.
  • Customizing applications [26] You can make basic configuration updates to customize Alfresco Content Services, or modify properties files to apply configuration changes.
  • Customizing individual configuration items [27] Use this information to understand the types of configuration files available in Alfresco Content Services, and how to configure them.
Parent topic: Configuring [28]

Using the alfresco-global.properties file

The global properties alfresco-global.properties file contains the customizations for extending Alfresco Content Services.

If you install manually using the WAR file, you can modify properties in the alfresco-global.properties file.

A sample global properties file is supplied with the installation. By default, the file contains sample settings for running Alfresco Content Services, for example, the location of the content and index data, the database connection properties, the location of third-party software, and database driver properties.

  • Modifying the global properties file [29] Use this information when modifying the alfresco-global.properties file.
  • Setting composite properties in the global properties file [30] The imap.server.mountPoints property is used as an example for setting composite properties.
Parent topic: Configuration overview [4]

Modifying the global properties file

Use this information when modifying the alfresco-global.properties file.

Important: For edits to the alfresco-global.properties file, when specifying paths for Windows systems, you must replace the Windows path separator characters with either the \\ separator or the forward slash / Unix path separator.
If you are installing manually, then you can use the alfresco-global.properties.sample file. The .sample file contains some of the common properties required for setting up Alfresco Content Services.
  1. Locate and open the alfresco-global.properties.sample file.

    For example, for Tomcat, browse to the $TOMCAT_HOME/shared/classes/ directory.

    This file contains sample configuration settings. To enable or modify a setting, remove the comment (#) character. Comment out all the properties you do not want to modify by adding the "#" character.

  2. Ensure that the dir.root= property points to a root location for the storage of content binaries and index files.

    For example, dir.root=/var/data/alfresco/alf_data.

    Note: It is strongly recommended that you always set this value to an absolute file system path as shown above. This ensures that no matter how the instance is started, it will always find the directories where content has previously been written.
  3. Set the database connection properties.
    Property Description
    db.username=alfresco Specifies the name of the main database user. This name is used to authenticate with the database.
    db.password=alfresco Specifies the password for the database user. This password is used to authenticate with the database.

    Additional database properties can be set for further configuration. See Configuring databases [6] for more information.

  4. Specify the locations of the following external software:
    Property Description
    jodconverter.enabled= Specifies whether to use the JODConverter. Set the property to true.
    jodconverter.officeHome= Specifies the location of the LibreOffice installation for JODConverter transformations.
    jodconverter.portNumbers= Specifies the port numbers used by each JODConverter processing thread. The number of process will match the number of ports.
    img.root= Specifies the location of the ImageMagick installation.
    img.coders=

    Specifies the path to the image coders directory. Normally ${img.root}/modules/coders

    img.config=

    Specifies the path to the image config directory. Normally ${img.root} on Windows and ${img.root}/config on Linux.

    img.exe=

    Specifies the path to the convert executable. Normally ${img.root}convert.exe on Windows and /usr/bin/convert on Linux.

    alfresco-pdf-renderer.exe

    Specifies the path to the Alfresco PDF renderer executable. Normally this will be C:\\Alfresco\\alfresco-pdf-rendereralfresco-pdf-renderer.exe on Windows and /usr/bin/alfresco-pdf-renderer on Linux.

  5. Configure your supported database for use. See Configuring databases [6].
  6. Select a JDBC driver used with each connection type.
  7. Add your global custom configurations.

    Note: Ensure that you use single-byte character sets (ISO-8859-1 Latin 1) in your alfresco-global.properties settings, particularly the system.webdav.rootPath setting. If you require other characters, you can use Unicode equivalents. For example, if your root path in Cyrillic was фолдер, which means folder in English, a valid value would be:
    system.webdav.rootPath=/app:company_home/cm:\u0444\u043E\u043B\u0434\u0435\u0440
  8. Save your file without the .sample extension.
You need to restart the server for the configuration changes to take effect.
Parent topic: Using the alfresco-global.properties file [22]

Setting composite properties in the global properties file

The imap.server.mountPoints property is used as an example for setting composite properties.
The ImapConfigMountPointsBean class that holds the component beans has four properties of its own:
  • beanName
  • store
  • rootPath
  • mode
  1. Open the <classpathRoot>/alfresco-global.properties file.
  2. To set some overall defaults for all component instances, use the format:

    <property>.default.<component property>
    These values would show up, for example, when you added a new component instance but did not specify its properties.

    For example:

    imap.server.mountPoints.default.store=${spaces.store}
    imap.server.mountPoints.default.rootPath=/${spaces.company_home.childname}
    imap.server.mountPoints.default.mode=virtual

    This example does not define a default for beanName because there is a way of populating it for each instance.

  3. To set up the imap.server.mountPoints with a composite value, set the master composite property using a comma-separated list.

    For example:

    imap.server.mountPoints=Repository_virtual,Repository_archive

    This defines that the property contains two ImapConfigMountPointsBean instances, named Repository_virtual and Repository_archive. Because ImapConfigMountPointsBean implements the BeanNameAware Spring interface and has a beanName property, these instance names are automatically set as the bean names.

  4. To define component properties specific to each component instance, use the format:

    <property>.value.<component instance name>.<component property>

    For example:

    imap.server.mountPoints.value.Repository_virtual.mode=virtual
    imap.server.mountPoints.value.Repository_archive.mode=archive
    
Parent topic: Using the alfresco-global.properties file [22]

Disabling Alfresco Content Services features

You can disable common product components, if you do not require them for your Alfresco Content Services instance. This summary gives the example property settings for disabling the main components.
Note: If you are unsure of the effect of disabling a feature, contact Alfresco Support for recommendations.
Add the following property settings to the alfresco-global.properties file:
Property Description
system.usages.enabled=false Disables quotas or user usages.

audit.enabled=false Specifies a way to globally enable or disable the auditing framework.
sync.mode=OFF Use this property to disable synchronization permanently.
audit.alfresco-access.enabled=false Disables generation of audit data.
home.folder.creation.eager=false

Use this property to create home folders (unless it is disabled using the home.folder.creation.disabled=true property) when people are created (true) or created lazily (false).

Lazy creation (false) means that the home folder will not be created when the user is created.

home.folder.creation.disabled=true

Disables the creation of home folders.

db.schema.update=false Specifies whether the system bootstrap should create or upgrade the database schema automatically.
activities.feed.notifier.enabled=false Disables the Share Activities email notification.
Note: The system.workflow.engine.activiti.enabled property is no longer available.
Parent topic: Configuration overview [4]

Using a JMX client to change settings dynamically

You can reconfigure Alfresco Content Services by shutting down the server, editing the relevant property in the configuration files, and then restarting the server. If you have installed the Oracle Java SE Development Kit (JDK), and have enabled JMX in your configuration files, there are some support operations that can be performed at runtime without needing to restart the server.

The Java Management Extension (JMX) interface allows you to access Alfresco Content Services through a standard JMX console that supports JMX Remoting (JSR-160). This lets you:

  • Manage subsystems
  • Change log levels
  • Enable or disable file servers (FTP)
  • Set server read-only mode
  • Set server single-user mode
  • Set server maximum user limit, including ability to prevent further logins
  • Count user sessions/tickets
  • User session/ticket invalidation
CAUTION:
Restrict JMX RMI connections to an internal administration group, due to security vulnerabilities. JMX/RMI deserializes data from a client before authentication, which means that password protection does not provide adequate security.

Example consoles include:

  • JConsole (supplied with Java SE 5.0 and higher)
  • MC4J
  • JManage

Some of these consoles also provide basic graphs and/or alerts for monitoring JMX-managed attributes.

There are two types of property that you can edit using a JMX interface:
Type 1: Properties specified directly in XML files
For example:
<bean id="wcm_deployment_receiver"
class="org.alfresco.repo.management.subsystems.ChildApplicationContextFactory"
        <parent="abstractPropertyBackedBean">
        <property name="autoStart">
                <value>true</value>
        </property>
</bean>

The value for the property autoStart is set to true directly in the wcm-bootstrap-context.xml file.

Type 2: Properties set by variables in XML files
For example:
<bean id="jodconverter.shared.instance" class="org.alfresco.repo.content.JodConverterSharedInstance">
    <property name="officeHome">
       <value>${jodconverter.officeHome}</value>
    </property>

The value for the property officeHome is replaced with a variable ${jodconverter.officeHome}.

When Alfresco Content Services starts up, type 1 properties are read from the XML file; type 2 properties get their values read from all the various property files. Then, the database is checked to see if there are any property values set there, and if any property has been changed, this value is used instead.

Some of the type 2 properties can be viewed and changed by the JMX console, some cannot. For example. jodconverter.officeHome can be viewed and changed using the JMX client; index.recovery.mode cannot be viewed or changed using the JMX client.

In a new installation, none of these properties are stored in the database. If you set a property using the JMX interface, Alfresco Content Services stores the value of the property in the database. If you never use JMX to set the value of a property, you can continue using the alfresco-global.properties file to set the value of the property. Once you change the property setting using JMX, and it is therefore stored in the database, you cannot use the properties files to change the value of that property.

Note: For advanced configuration, you can also extend or override the Spring bean definitions that control the Java classes. To do so, add or copy a Spring bean file named *-context.xml to the <extension> directory, or <web-extension> directory to extend Share. For examples of the Spring bean extensions, download the sample extension files.
  • Connecting through JMX [31] Remote JMX functionality is disabled by default. You can connect to the Alfresco Content Services MBean server through a JMX client that supports JSR-160 by editing your settings.
  • Configuring with JConsole [32] If you have installed the Oracle Java SE Development Kit (JDK), you can use the JMX client, JConsole, for runtime administration.
  • JMX monitoring and management extensions [33] This information describes the JMX-based monitoring and management functionality.
Parent topic: Configuration overview [4]

Connecting through JMX

Remote JMX functionality is disabled by default. You can connect to the Alfresco Content Services MBean server through a JMX client that supports JSR-160 by editing your settings.
CAUTION:
Restrict JMX RMI connections to an internal administration group, due to security vulnerabilities. JMX/RMI deserializes data from a client before authentication, which means that password protection does not provide adequate security.
  1. Ensure that you have this setting in your java_opts file:

    -Dcom.sun.management.jmxremote

    This tells the running JVM to start the JMX service.

  2. Ensure that you have the following properties set in the alfresco-global.properties file:

    alfresco.jmx.connector.enabled=true
    alfresco.rmi.services.port=50500
    alfresco.rmi.services.host=<hostname>

    Check that the <hostname> can be resolved from where you are running the JMX client.

  3. Open a JMX client that supports JMX Remoting (JSR-160).
  4. Connect to the JMX URL:

    service:jmx:rmi:///jndi/rmi://<hostname>:50500/alfresco/jmxrmi

    Where <hostname> is the name of a reachable domain name or an IP address. If you running this on the local server, you can use localhost.

  5. Enter the default JMX user name: controlRole
  6. Enter the default JMX password: change_asap

    Important: You must change the default JMX password as soon as possible.

    The user controlRole is the default user name used to access and configure with a JMX client.

    The user monitorRole is the default user name used within monitoring tools, for example, Nagios or Hyperic.

  7. Change the default JMX password as soon as possible. You can set a new password in override configuration files.

    Create two new files called:

    alfresco-jmxrmi.password
    alfresco-jmxrmi.access

    Copy the files to a location of your choice and then add the alfresco.jmx.dir= property to the alfresco-global.properties file to specify the directory path of the configuration files. For example:

    alfresco.jmx.dir=/etc/alfresco/config 

    You can also set this on the command line:

    -Dalfresco.jmx.dir=/etc/alfresco/config 
  8. Open the alfresco-jmxrmi.password file and add the following properties for the monitorRole and controlRole users, where new_pw is your preferred password.

    monitorRole  new_pw
    controlRole  new_pw
  9. Save the file.
  10. Open the alfresco-jmxrmi.access file and add the following properties for the read-only or read/write access levels of each user.

    monitorRole   readonly
    controlRole   readwrite
  11. Save the file.
Note: It is possible to set the JVM (Oracle/Sun JVM-specific) arguments directly:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.access.file=/etc/alfresco/config/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=/etc/alfresco/config/jmxremote.password
-Dcom.sun.management.jmxremote.authenticate=true 
Parent topic: Using a JMX client to change settings dynamically [24]

Configuring with JConsole

If you have installed the Oracle Java SE Development Kit (JDK), you can use the JMX client, JConsole, for runtime administration.
The initial configuration that displays in JConsole is set from the alfresco-global.properties file.
  1. Open a command console.
  2. Locate your JDK installation directory.

    For example, the JDK directory is often java/bin.

  3. Enter the following command:

    jconsole

    The JConsole New Connection window displays.

  4. Double-click on the Alfresco Content Services Java process.

    For Tomcat, this the Java process is usually labelled as org.apache.catalina.startup.Bootstrap start.

    JConsole connects to the managed bean (or MBean) server hosting the subsystems.

  5. Select the MBeans tab.

    The available managed beans display in JConsole.

  6. Navigate to Alfresco > Configuration.

    The available subsystems display in an expandable tree structure. When you select a subsystem, the Attributes and Operations display below it in the tree.

  7. Select Attributes and set the required subsystem attribute values.

    Values that can be edited are shown with blue text.

    When you change a configuration setting, the subsystem automatically stops.

  8. Restart the subsystem:
    1. Navigate to the subsystem.
    2. Select Operations.
    3. Click Start.
  9. To stop the subsystem without editing any properties:
    1. Navigate to the subsystem.
    2. Select Operations.
    3. Click Stop.
  10. To revert back to all the previous edits of the subsystem and restores the default settings:
    1. Navigate to the subsystem.
    2. Select Operations.
    3. Click Revert.
  11. Click Connection > Close.
The settings that you change in a JMX client, like JConsole, are persisted in the database. When you make a dynamic edit to a subsystem:
  1. When a subsystem, that is currently running, is stopped, its resources are released and it stops actively listening for events. This action is like a sub-part of the server being brought down. This ‘stop’ event is broadcast across the cluster so that the subsystem is brought down simultaneously in all nodes.
  2. The new value for the property is persisted to the database.

There are two ways to trigger a subsystem to start:

  • The start operation
  • An event that requires the subsystem
Parent topic: Using a JMX client to change settings dynamically [24]

JMX monitoring and management extensions

This information describes the JMX-based monitoring and management functionality.

The monitoring and management extensions can be subdivided into three categories:

Read-only monitoring beans
Expose a variety of real-time metrics for monitoring health and throughput of your server.
Configuration beans
Provide an easily navigable view of key system configuration for support and diagnostic purposes.
Management beans
Allow control over various subsystems.

For more information on these categories of bean, refer to the reference section JMX bean categories [34].

You can also manage JMX settings in the Admin Console JMX Settings [35].

  • Coexistence with other MBeans [36] If there is an MBean server already running on the Java Virtual Machine (JVM) that Alfresco Content Services is running on, Alfresco Content Services will export its MBeans to that server. Otherwise, Alfresco Content Services will start up its own MBean server. This means that, for example, on Tomcat, the Alfresco Content Services beans will complement those provided by the application server and will be navigable in the same context with a suitable JMX client.
  • Activating the Oracle JMX agent and local JMX connectivity [37] When using Tomcat and a Oracle JVM together for monitoring, you can configure Alfresco Content Services and Tomcat to share the JVM's own platform MBean server. The pre-registered MXBeans give a detailed view of the JVM's health, usage and throughput; in areas including class loading, hot spot compilation, garbage collection, and thread activity.
Parent topic: Using a JMX client to change settings dynamically [24]

Coexistence with other MBeans

If there is an MBean server already running on the Java Virtual Machine (JVM) that Alfresco Content Services is running on, Alfresco Content Services will export its MBeans to that server. Otherwise, Alfresco Content Services will start up its own MBean server. This means that, for example, on Tomcat, the Alfresco Content Services beans will complement those provided by the application server and will be navigable in the same context with a suitable JMX client.
Parent topic: JMX monitoring and management extensions [33]

Activating the Oracle JMX agent and local JMX connectivity

When using Tomcat and a Oracle JVM together for monitoring, you can configure Alfresco Content Services and Tomcat to share the JVM's own platform MBean server. The pre-registered MXBeans give a detailed view of the JVM's health, usage and throughput; in areas including class loading, hot spot compilation, garbage collection, and thread activity.
Oracle's MBean server also provides a convenient local connection method, allowing the process to be automatically 'discovered' by a JMX client such as JConsole without manual configuration of connection details.
The Oracle JMX agent can also be activated in remote mode (where a connection is made through an RMI lookup). However, since Alfresco Content Services is always preconfigured to allow a secure remote JMX connection on any JVM, it is most likely that you will choose to activate the Oracle JMX agent in local mode. This means the platform MBean Server is shared by Alfresco Content Services and still be available for remote connections through the RMI connector.
CAUTION:
Restrict JMX RMI connections to an internal administration group, due to security vulnerabilities. JMX/RMI deserializes data from a client before authentication, which means that password protection does not provide adequate security.
  • To activate the Oracle JMX agent in local mode, ensure that the following system property is set:

    com.sun.management.jmxremote

    For example, in your Tomcat startup script, you could use the following line:

    export JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote"

  • Refer to the Oracle documentation for more information on all the possible configuration options.
Parent topic: JMX monitoring and management extensions [33]

Using the Java command line to change settings dynamically

All Alfresco Content Services properties can be set using the standard alfresco-global.properties configuration file. There might be circumstances where it is more convenient to change properties on the fly. The Java command line provides an alternative method of setting the properties.

The most common use of the Java command line is in a multiple-machine environment where the basic, common customizations are set using standard properties and the machine-specific values are set using command line options.

For example, an administrator is likely to configure all installs to behave similarly by setting properties in the configuration files, but will use the Java command line to vary settings like the database connection and Content Store locations.

You can use the -D options for setting properties on the Java command line. Add a -Dprop=value to JAVA_OPTS, or for anything that is sent to the Java command line, for example:
-Ddir.root=/alfresco/data -Ddb.url=xxxx
Parent topic: Configuration overview [4]

Customizing applications

You can make basic configuration updates to customize Alfresco Content Services, or modify properties files to apply configuration changes.
  • Updating system configuration parameters [38]: You can configure Alfresco Content Services for your specific environment requirements either by using the Admin Console, or by editing the alfresco-global.properties file, or by using a JMX client.
  • Configuring Alfresco Share [39]: A number of options are available to customize Share. To configure Share, use the configuration file named share-config-custom.xml.
  • Solr configuration [40]: When you install Alfresco Content Services, several Solr-related configuration files are made available to you. To configure Solr, use the configuration file named solrcore.properties.
Note: Remember not to use the default user names, URLs, or passwords with different environment.
Note: You can customize or scale up to meet your login and security requirements. See Setting up authentication and security [41] for more information.
Parent topic: Configuration overview [4]

Customizing individual configuration items

Use this information to understand the types of configuration files available in Alfresco Content Services, and how to configure them.

Configuration is implemented using three types of files:
  • Extension files
  • Bean files
  • Spring bean definitions
  • Customizing extension files [42] Extension files end with the extension .xml, and define <config> tags. A typical configuration file is <web-extension>/share-config-custom.xml.
  • Modifying Spring bean definition files [43] For advanced configuration, you can also extend or override the Spring bean definitions that control the Alfresco Content Services Java classes.
  • Customizing the Activity Email Summary [44] The Activity Email Summary ignores certain activity types by default. Use this information to override the Spring bean definition to include these activity types.
  • Customizing bean files [45] Bean files end with the extension .xml and contain <bean> tags. You can modify <bean> tags to define properties or point to customized files.
Parent topic: Configuration overview [4]

Customizing extension files

Extension files end with the extension .xml, and define <config> tags. A typical configuration file is <web-extension>/share-config-custom.xml.

A configuration file contains <alfresco-config> tags outside the <config> tags. You must preserve these tags in your customized file.
  1. Open the configuration file that you want to customize.
  2. Edit each pair of <config> </config> tags that you want to modify.

    Replacing a configuration

    To replace the configuration, add a replace="true" attribute to the configuration element. For example: <config evaluator="xx" condition="yy" replace="true">

    Attention: Any configuration within a section marked this way completely replaces any configuration found in the Alfresco Content Services-maintained files.

    Modifying one property

    The attribute replace completely replaces the configuration. To modify one property, add the changed piece.

  3. Save your customized file.
Parent topic: Customizing individual configuration items [27]

Modifying Spring bean definition files

For advanced configuration, you can also extend or override the Spring bean definitions that control the Alfresco Content Services Java classes.

The Spring bean definitions are within configuration files in the following directories:
  • The <extension> directory contains the configuration files for extending Alfresco Content Services.
  • The <web-extension> directory contains the configuration files for extending Alfresco Share.
  1. Browse to the <extension> directory. For example, for Tomcat:
    • (Windows) C:\Alfresco\tomcat\shared\classes\alfresco\extension
    • (Linux) tomcat/shared/classes/alfresco/extension

    Each file has a copy with a .sample extension.

  2. Open the configuration file with the .sample extension.
  3. Add your configurations to the file.
  4. Save the file without the .sample extension.
Parent topic: Customizing individual configuration items [27]
Related concepts
System path conventions [46]

Customizing the Activity Email Summary

The Activity Email Summary ignores certain activity types by default. Use this information to override the Spring bean definition to include these activity types.

The Spring bean definition for the ActivitiesFeed subsystem is called activities-feed-context.xml and can be downloaded from the Alfresco SVN: activities-feed-context.xml [47].
  1. Download the file and save to the <subsystems/ActivitiesFeed/default> directory.

    The file contains the following bean override for the file-previewed and file-downloaded values:

    <?xml version='1.0' encoding='UTF-8'?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
     <bean id="feedModelBuilderPrototype" class="org.alfresco.repo.activities.feed.DefaultActivitiesFeedModelBuilder" scope="prototype">
     <property name="ignoredActivityTypes">
      <set>
       <value>org.alfresco.documentlibrary.file-previewed</value>
       <value>org.alfresco.documentlibrary.file-downloaded</value>
      </set>
     </property>
     </bean>
    </beans>
  2. Remove or comment out the following lines to include the file-previewed and file-downloaded entries in your Activity Email Summary:

    <property name="ignoredActivityTypes">
     <set>
     <value>org.alfresco.documentlibrary.file-previewed</value>
     <value>org.alfresco.documentlibrary.file-downloaded</value>
     </set>
    </property>
  3. Save your file.
Parent topic: Customizing individual configuration items [27]

Customizing bean files

Bean files end with the extension .xml and contain <bean> tags. You can modify <bean> tags to define properties or point to customized files.

There are two common uses of beans:
  • To define properties
  • To point to one or more of your customized files

A typical bean file is <extension>/custom-repository-context.xml. A bean file contains <?xml> and <!DOCTYPE> headers, and <beans> tags outside the <bean> tags. You must preserve these items in your customized file.

Important:

When you override a <bean>, the entire effects of the original bean are lost. The effect is the same as if you had overridden a <config> by using replace="true". Therefore, the overriding <bean> must contain any information from the default bean that you want to keep, as well as any additional information.

For example, if a core bean has four values, and you want to modify a single value, the resultant bean must still have four values. However, if you want to add a value, then the resultant bean must have five values - the original four values plus the added value.

  1. Open the bean file that you want to customize.

    For example, the following <bean> is from the <configRoot>/classes/alfresco/action-services-context.xml file:

    <bean id="mail" class="org.alfresco.repo.action.executer.MailActionExecuter" 
     parent="action-executer">
       <property name="publicAction">
          <value>true</value> <!-- setting to true -->
       </property>
       <property name="mailService">
          <ref bean="mailService"></ref>
       </property>
    </bean>
  2. Delete each pair of <bean> </bean> tags that you do not want to modify.
  3. Modify the contents of the remaining <bean> tags.

    For example, the following overrides the publicAction property from the previous example:

    <bean id="mail" class="org.alfresco.repo.action.executer.MailActionExecuter" 
     parent="action-executer">
       <property name="publicAction">
          <value>false</value> <!-- setting to false -->
       </property>
       <property name="mailService">
          <ref bean="mailService"></ref>
       </property>
    </bean>
  4. Save the file.
Parent topic: Customizing individual configuration items [27]

Configuring subsystems

A subsystem is a configurable module responsible for a sub-part of Alfresco Content Services functionality. Typically, a subsystem wraps an optional functional area, such as IMAP bindings, or one with several alternative implementations, such as authentication.

A subsystem can be considered as a server embedded within the main server. A subsystem can be started, stopped, and configured independently, and it has its own isolated Spring application context and configuration.

The application context is a child of the main context. This means that it can reference all the beans in the main application context. However, the subsystem beans cannot be seen by the main application context and communication with the subsystem must be through explicitly imported interfaces. The main features of subsystems are:

Multiple ‘instances’ of the same type
The same template spring configuration can be used with different parameters in different instances. For example, this allows you to chain, or combine functions of more than one subsystem, through property file edits.
Dynamic existence
The subsystem has JMX-based server configuration capabilities.
Own bean namespace
You do not need unique bean names if you use multiple instances of the same subsystem. This simplifies the problem of building an authentication chain as there is no need to edit a template Spring configuration.
Clearly defined interfaces with the rest of the system
The subsystem interfaces must be imported to be used anywhere else in the system. This is done by mounting them as dynamic proxies.
Hidden implementation specifics
Implementation specifics are not visible because beans are hidden in a private container.
Swapping of alternative implementations
To switch from native Alfresco Content Services authentication to Kerberos PAC Validation [48], you switch to a Kerberos authentication subsystem and the correct components are swapped in.
Separate product from configuration
A subsystem binds its configuration settings to properties. There is no need to edit or extend a prepackaged Spring configuration to configure a subsystem for your own needs.
  • Subsystem categories [49] Every subsystem has a category and a type.
  • Subsystem configuration files [50] The prepackaged subsystem configuration files form part of the core product and should not be edited.
  • Subsystem properties [51] A subsystem declares default values for all the properties it requires in one or more .properties files in its subsystem directory.
  • Mounting a subsystem [52] A subsystem can be mounted, that is, its existence can be declared to the main server. To mount a subsystem, use the ChildApplicationContextFactory bean. This is an object that wraps the Spring application context that owns the subsystem and its beans. It initializes its application context as a child of the main Alfresco Content Services context with an appropriate PropertyPlaceholderConfigurer that will expand its configuration parameters.
  • Mounting a subsystem with composite properties [53] A subsystem is limited to flat property sets for its configuration, therefore it is difficult to allow structured data in this configuration. A composite property is a special property whose value is a list of beans.
  • Extension classpath [54] The alfresco-global.properties file can only be used to define properties that are global to the whole system. You can also control the properties of subsystems that have multiple instances, for example, the Authentication subsystems. To do this, you need to target different values for the same properties, to each subsystem instance. You can use the extension classpath mechanism.
Parent topic: Configuring [28]

Subsystem categories

Every subsystem has a category and a type.
  • Category is a broad description of the subsystem's function, for example, Authentication.
  • Type is a name for the particular flavor of implementation, where multiple alternative implementations exist, for example, ldap. Where a subsystem has only one implementation, you can use the default type name of default.
The supplied subsystem categories are:
Subsystem name Functional area More information
ActivitiesFeed Activities notifications Configuring the Activities Feed [55]
Audit Audit related functions Auditing [56]
Authentication Authentication related functions Setting up authentication and security [41]
ContentStore Properties for the encrypted and non-encrypted Content Stores Setting up content stores [57]
email Outbound and inbound SMTP property settings Configuring inbound and outbound email [58]
fileServers Properties for the FTP servers. Configuring file servers [59]
googledocs Properties for Google Docs integration Installing and configuring Google Docs Integration [60]
imap Properties for the IMAP service Configuring the email client with IMAP [61]
OOoDirect OpenOffice transformations settings (use LibreOffice where possible) Configuring OpenOffice transformations in place of LibreOffice [62]
OOoJodconverter Default settings for LibreOffice transformations Configuring LibreOffice [63]
Replication Settings for the replication jobs tool Setting up and managing content replication [64]
Search Search mechanism Alfresco Search Services [65]
Subscriptions Settings for the activities feeds Enabling the Subscription Service [66]
Synchronization Synchronization of local user and group information with the user registry exporters (usually LDAP directories) in the authentication chain Configuring synchronization [67]
sysAdmin Properties for server administration Configuring server administration settings [68]
thirdparty Properties for third-party software, for example, ImageMagick Changing the OOoJodconverter subsystems [69]
Transformers Properties for the transformation server Managing transformations [70]
wcm_deployment_receiver Properties for WCM Deployment Receiver The Workflow Console [71]
Parent topic: Configuring subsystems [5]

Subsystem configuration files

The prepackaged subsystem configuration files form part of the core product and should not be edited.

The prepackaged subsystems are found in the <configRoot>/classes/alfresco/subsystems directory.

Each subsystem directory should contain one or more Spring XML bean definition metadata files, with names matching the *-context.xml pattern. These files are loaded by the child application context that belongs to the subsystem instance.

The XML bean definitions can contain place holders for properties that correspond to configuration parameters of the subsystem. As per standard Spring conventions, these place holders begin with ${ and end with }. In the following example, the value of the ooo.user configuration parameter will be substituted into the bean definition when it is loaded:

<bean id="userInstallationURI" class="org.alfresco.util.OpenOfficeURI">
      <constructor-arg>
         <value>${ooo.user}</value>
      </constructor-arg>
   </bean>

There is no need to declare a PropertyPlaceholderConfigurer bean. An appropriate one is added into the application context automatically.

Parent topic: Configuring subsystems [5]

Subsystem properties

A subsystem declares default values for all the properties it requires in one or more .properties files in its subsystem directory.

For example, there could be a mysubsystem.properties file, containing the following:

ooo.user=${dir.root}/oouser

Place holders are used for system-wide properties, such as dir.root in the -context.xml and .properties files, as the child application context will recursively expand place holders for its own properties and all the place holders recognized by its parent.

Properties files in the subsystem directory declare the configuration parameters and provide default values where these have not been supplied elsewhere. These files should not be edited in order to configure the subsystem.

Use the following methods to modify the subsystem properties:

  • Subsystems and all their composite properties show under the Alfresco:Type=Configuration tree in JConsole.
  • See Modifying global properties [29] for more information on how to configure a prepackaged subsystem.
  • -D options
Parent topic: Configuring subsystems [5]

Mounting a subsystem

A subsystem can be mounted, that is, its existence can be declared to the main server. To mount a subsystem, use the ChildApplicationContextFactory bean. This is an object that wraps the Spring application context that owns the subsystem and its beans. It initializes its application context as a child of the main Alfresco Content Services context with an appropriate PropertyPlaceholderConfigurer that will expand its configuration parameters.
Note: Any instances that you define should extend the abstractPropertyBackedBean definition. The identifier that you define for the bean automatically becomes the subsystem category and defines where the factory will look for configuration files, in the search paths.
  1. Open the core bootstrap-context.xml file (the file that controls the startup of beans and their order).
  2. Locate the following bean definition:

    <!--  Third party transformer Subsystem -->
     <bean id="thirdparty" class="org.alfresco.repo.management.subsystems.ChildApplicationContextFactory" 
                                                                       parent="abstractPropertyBackedBean">
         <property name="autoStart">
             <value>true</value>
         </property>
     </bean>
    The autoStart property is set to true, meaning that the child application context will be refreshed when the server boots up, activating the beans it contains. For subsystems containing background processes or daemons (for example, the file server subsystem), it is very important to set this property, otherwise the subsystem will never activate.
  3. Save your file.
Parent topic: Configuring subsystems [5]

Mounting a subsystem with composite properties

A subsystem is limited to flat property sets for its configuration, therefore it is difficult to allow structured data in this configuration. A composite property is a special property whose value is a list of beans.
  • For example, the IMAP subsystem is mounted as:

    <!-- IMAP Subsystem -->
     <bean id="imap" class="org.alfresco.repo.management.subsystems.ChildApplicationContextFactory" 
                                                             parent="abstractPropertyBackedBean">
         <property name="autoStart">
             <value>true</value>
         </property>
         <property name="compositePropertyTypes">
             <map>
                 <entry key="imap.server.mountPoints">
                     <value>org.alfresco.repo.imap.config.ImapConfigMountPointsBean</value>
                 </entry>
             </map>
         </property>
     </bean>

    The subsystem declares a single composite property called imap.server.mountPoints with component type org.alfresco.repo.imap.config.ImapConfigMountPointsBean.

  • The configured value of this composite property is materialized in the child application context as a ListFactoryBean. The bean's ID should match the name of the composite property. So, for example, in the IMAP subsystem configuration:

     <!--The configurable list of mount points - actually a post-processed composite property! -->
        <bean id="imap.server.mountPoints" class="org.springframework.beans.factory.config.ListFactoryBean">
            <property name="sourceList">
                <list>
                    <!-- Anything declared in here will actually be ignored and replaced by the configured composite propery value, resolved on initialization -->
                    <bean id="Repository_virtual" class="org.alfresco.repo.imap.config.ImapConfigMountPointsBean">
                        <property name="mode">
                            <value>virtual</value>
                        </property>
                        <property name="store">
                            <value>${spaces.store}</value>
                        </property>
                        <property name="path">
                            <value>/${spaces.company_home.childname}</value>
                        </property>
                    </bean>
                    <bean id="Repository_archive" class="org.alfresco.repo.imap.config.ImapConfigMountPointsBean">
                        <property name="mode">
                            <value>archive</value>
                        </property>
                        <property name="store">
                            <value>${spaces.store}</value>
                        </property>
                        <property name="path">
                            <value>/${spaces.company_home.childname}</value>
                        </property>
                    </bean>
                </list>
            </property>
        </bean>

    Other beans in the subsystem application context can use imap.server.mountPoints as though it were a regular list of ImapConfigMountPointsBeans.

Parent topic: Configuring subsystems [5]

Extension classpath

The alfresco-global.properties file can only be used to define properties that are global to the whole system. You can also control the properties of subsystems that have multiple instances, for example, the Authentication subsystems. To do this, you need to target different values for the same properties, to each subsystem instance. You can use the extension classpath mechanism.
  1. Add a property file to your application server's global classpath.

    For example, under $TOMCAT_HOME/shared/classes.

  2. Create the path to match the following pattern to override specific properties of a subsystem instance:

    alfresco/extension/subsystems/<category>/<type>/<id>/*.properties
    The <id> is the subsystem instance identifier, which will be default for single instance subsystems, or the provided identifier for chained subsystems.
For example, if your authentication chain looked like this:
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap

Then you could put property overrides for alfrescoNtlm1 in the following file:

alfresco/extension/subsystems/Authentication/alfrescoNtlm/alfrescoNtlm1/mychanges.properties

The default type and ID of non-chained subsystems is default, so you could put overrides for file server properties in the following file:

alfresco/extension/subsystems/fileServers/default/default/mychanges.properties
Parent topic: Configuring subsystems [5]

Configuring databases

Use this information to configure supported databases for use with Alfresco Content Services.

  • Configuring Amazon RDS databases [72] Amazon Relational Database Service (RDS) makes it easy to set up, operate, and scale a relational database in the cloud.  
  • Configuring the MariaDB database connection [73] Use this information to configure the connection to the MariaDB database for use with Alfresco Content Services.
  • Configuring the MySQL database [74] Use this information to configure a MySQL database for use with Alfresco Content Services.
  • Configuring an Oracle database [75] Use this information to configure an Oracle RDBMS database for use with Oracle.
  • Configuring a PostgreSQL database [76] Use this information to configure a PostgreSQL database for use with Alfresco Content Services.
  • Configuring a SQL Server database [77] Use this information to configure a Microsoft SQL Server database for use with Alfresco Content Services. To modify the default database configuration, you must edit values in the <classpathRoot>\alfresco-global.properties file.
  • Advanced database configuration properties [78] As an administrator, you need to edit some advanced properties to customize your database configuration. Many properties, however, do not need to be edited.
  • Validating your database [79] Validate your database to ensure that it meets the prerequisites for an Alfresco Content Services installation.
Parent topic: Configuring [28]

Configuring Amazon RDS databases

Amazon Relational Database Service (RDS) makes it easy to set up, operate, and scale a relational database in the cloud.  

It is a web service running in the cloud and provides relational database for use in Alfresco Content Services. Amazon RDS supports and gives you online access to the capabilities of a MySQL, Oracle, Microsoft SQL Server, PostgreSQL, or Amazon Aurora relational database management system.

As a good practice, when using Amazon EC2 environment you may want to use S3 bucket for content store. For more information, see Alfresco Content Connector for AWS S3 [80].

For configuring different databases for Amazon RDS, see the topics below.

  • Configuring an Aurora database on Amazon RDS [81] Use this information to configure an Aurora database on Amazon RDS for use with Alfresco Content Services. Amazon Aurora is a MySQL-compatible relational database management system.
  • Configuring the MySQL database on Amazon RDS [82] Use this information to configure a MySQL database on Amazon RDS for use with Alfresco Content Services.
  • Configuring an Oracle database on Amazon RDS [83] Use this information to configure an Oracle database on Amazon RDS for use with Alfresco Content Services.
  • Configuring a PostgreSQL database on Amazon RDS [84] Use this information to configure a PostgreSQL database on Amazon RDS for use with Alfresco Content Services.
  • Configuring a SQL Server database on Amazon RDS [85] Use this information to configure a SQL Server database on Amazon RDS for use with Alfresco.
Parent topic: Configuring databases [6]

Configuring an Aurora database on Amazon RDS

Use this information to configure an Aurora database on Amazon RDS for use with Alfresco Content Services. Amazon Aurora is a MySQL-compatible relational database management system.
Prerequisites:
  • Aurora support is only available when running in AWS.
  • Setup Amazon RDS using the AWS Management Console. For more information, see the AWS documentation [86].
  • Alfresco Content Services is deployed on an Amazon EC2 instance
  1. Use the ssh command to connect to the Amazon EC2 instance using a provided .ppk key.

    For Amazon Linux, the user name is ec2-user. For RHEL5, the user name is either root or ec2-user. For Ubuntu, the user name is ubuntu. For SUSE Linux, the user name is root. 

  2. Execute sudo su to change to root.
  3. Download the Alfresco Content Services installer for Linux from the Support Portal [87].
  4. Install the downloaded installer using the following commands:

    chmod 777 alfresco-enterprise-5.N.x-installer-linux-x64.bin
    sudo ./alfresco-enterprise-5.N.x-installer-linux-x64.bin
  5. Install the Aurora database connector.

    This release requires mysql-connector-java-5.1.40.jar for compatibility with the SQL Server database.

    1. Download the mysql-connector driver from the MySQL JDBC driver download site.
    2. Copy the JDBC driver into the <TOMCAT_HOME>/lib directory.
  6. Install and use a database tool to connect to the Amazon RDS.
  7. Create a database named alfresco.
  8. Create a user named alfresco.
  9. Set the new user's password to alfresco.
  10. Open the <classpathRoot>/alfresco-global.properties file.
  11. Locate the following property:

    dir.root=

  12. Edit the line with an absolute path to point to the directory in which you want to store Alfresco Content Services data. For example: dir.root=C:/Alfresco/alf_data
  13. Set and uncomment the database connection properties as shown below:

    db.name=alfresco2
    db.username=alfresco
    db.password=alfresco
    db.host=auroraqadb-cluster.cluster-clqevmd2v8y9.us-east-1.rds.amazonaws.com
    db.port=13306
    db.prefix=mysql
    db.pool.max=275
    
    # MySQL database connection
    
    db.driver=org.gjt.mm.mysql.Driver
    db.url=jdbc:mysql://${db.host}/${db.name}?${db.params} 
    OR
    db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?${db.params} 
  14. Save the file.
  15. Restart the Alfresco Content Services server.
Parent topic: Configuring Amazon RDS databases [72]

Configuring the MySQL database on Amazon RDS

Use this information to configure a MySQL database on Amazon RDS for use with Alfresco Content Services.

Prerequisites:
  • Setup Amazon RDS using the AWS Management Console. For more information, see the AWS documentation [86].
  • Amazon EC2 instance
  1. Use the ssh command to connect to the Amazon EC2 instance using a provided .ppk key.

    For Amazon Linux, the user name is ec2-user. For RHEL5, the user name is either root or ec2-user. For Ubuntu, the user name is ubuntu. For SUSE Linux, the user name is root. 

  2. Execute sudo su to change to root.
  3. Download the Alfresco Content Services installer for Linux from the Support Portal [87].
  4. Install the downloaded installer using the following commands:

    chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin
    sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin      
  5. Install the MySQL database connector.

    The MySQL database connector is required when installing with MySQL. The database connector allows MySQL database to talk to the server.

    1. Download mysql-connector-java-5.1.32 from the MySQL download site: http://dev.mysql.com/ [88].
    2. Copy the JAR file into the /lib directory.

      For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.

  6. Install and use a database tool to connect to the Amazon RDS.
  7. Create a database named alfresco.
  8. Create a user named alfresco.
  9. Set the new user's password to alfresco.
  10. Open the <classpathRoot>/alfresco-global.properties file.
  11. Edit the following line with an absolute path to point to the directory in which you want to store Alfresco Content Services data.

    For example: dir.root=C:/Alfresco/alf_data

  12. Set and uncomment the database connection properties as shown below:

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=alfqa-mysql5-6-19a.cw4mo3qj8qdu.us-east-1.rds.amazonaws.com
    db.port=3306
    db.pool.max=275
    
    # MySQL connection
    
    db.driver=org.gjt.mm.mysql.Driver
    db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?useUnicode=yes&characterEncoding=UTF-8
    Note: Ensure that these database connection properties are not commented out.
  13. Save the file.
  14. Restart the Alfresco Content Services server.
Parent topic: Configuring Amazon RDS databases [72]

Configuring an Oracle database on Amazon RDS

Use this information to configure an Oracle database on Amazon RDS for use with Alfresco Content Services.
Prerequisites:
  • Setup Amazon RDS using the AWS Management Console. For more information, see the AWS documentation [86].
  • Amazon EC2 instance
The Oracle database is case sensitive, so any configuration setting that you add into the alfresco-global.properties file must match the case used in Oracle.
  1. Use the ssh command to connect to the Amazon EC2 instance using a provided .ppk key.

    For Amazon Linux, the user name is ec2-user. For RHEL5, the user name is either root or ec2-user. For Ubuntu, the user name is ubuntu. For SUSE Linux, the user name is root. 

  2. Execute sudo su to change to root.
  3. Download the Alfresco Content Services installer for Linux from the Support Portal [87].
  4. Install the downloaded installer using the following commands:

    chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin
    sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin
  5. Install the Oracle database connector. The database connector allows Oracle database to talk to the server.
    1. Download ojdbc7.jar from the Oracle download site [89].

      Use the ojdbc7.jar in the Oracle Database 12c Release 1 (12.1.0.1) drivers.

    2. Copy the JAR file into the /lib directory.

      For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.

  6. Install and use a database tool to connect to the Amazon RDS.
  7. Increase the available connections.

    1. In the SQL*Plus Console, run these commands:

      alter system set processes=275 scope=spfile sid='*';
      alter system set sessions=305 scope=spfile sid='*';
      alter system set transactions=330 scope=spfile sid='*';
    2. Restart the database.
  8. Create a database named alfresco.
  9. Create a user named alfresco.
  10. Set the new user's password to alfresco.
  11. Open the <classpathRoot>/alfresco-global.properties.sample file.
  12. Edit the following line with an absolute path to point to the directory in which you want to store Alfresco Content Services data.

    For example: dir.root=C:/Alfresco/alf_data

  13. Set and uncomment the database connection properties as shown below:

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=alfrescoora12.cw4mo3qj8qdu.us-east-1.rds.amazonaws.com
    db.port=1433
    db.pool.max=275
    db.txn.isolation=4096
    
    # Oracle database connection
    
    db.driver=oracle.jdbc.OracleDriver
    db.url=jdbc:oracle:thin:@${db.host}:${db.port}:${db.name}
    Note: Ensure that these database connection properties are not commented out.
  14. Save the file without the .sample extension.
  15. Restart the Alfresco Content Services server.
Parent topic: Configuring Amazon RDS databases [72]

Configuring a PostgreSQL database on Amazon RDS

Use this information to configure a PostgreSQL database on Amazon RDS for use with Alfresco Content Services.
Prerequisites:
  • Setup Amazon RDS using the AWS Management Console. For more information, see the AWS documentation [86].
  • Amazon EC2 instance
  1. Use the ssh command to connect to the Amazon EC2 instance using a provided .ppk key.

    For Amazon Linux, the user name is ec2-user. For RHEL5, the user name is either root or ec2-user. For Ubuntu, the user name is ubuntu. For SUSE Linux, the user name is root. 

  2. Execute sudo su to change to root.
  3. Download the Alfresco Content Services installer for Linux from the Support Portal [87].
  4. Install the downloaded installer using the following commands:

    chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin
    sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin 
  5. Install the PostgreSQL database connector. The database connector allows PostgreSQL database to talk to the server.
    1. Download postgresql-9.3-xxxx.jdbc4.jar from the PostgreSQL download site: http://www.postgresql.org/download/ [90].
    2. Copy the JAR file into the /lib directory.

      For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.

  6. Install and use a database tool to connect to the Amazon RDS Postgresql datasource. If Alfresco Content Services is installed as standard with no configuration then psql from the installation folder can be used.
  7. Create a database named alfresco.
  8. Create a user named alfresco.

    This user must have write permissions on all tables and sequences.

  9. Set the new user's password to alfresco.
  10. Open the <classpathRoot>/alfresco-global.properties file.
  11. Locate the following line:

    dir.root=./alf_data

  12. Edit the line with an absolute path to point to the directory in which you want to store Alfresco Content Services data. For example: dir.root=C:/Alfresco/alf_data
  13. Uncomment and set the database connection properties.

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=postgressql-alfresco.cw4mo3qj8qdu.us-east-1.rds.amazonaws.com
    db.port=5432
    db.pool.max=275
    
    # PostgreSQL connection (requires postgresql-8.2-504.jdbc3.jar or equivalent)
    #
    db.driver=org.postgresql.Driver
    db.url=jdbc:postgresql://${db.host}:${db.port}/${db.name}
    Note: Ensure that these database connection properties are not commented out.
  14. Save the file.
  15. Restart the Alfresco Content Services server.
Parent topic: Configuring Amazon RDS databases [72]

Configuring a SQL Server database on Amazon RDS

Use this information to configure a SQL Server database on Amazon RDS for use with Alfresco.
Prerequisites:
  • Setup Amazon RDS using the AWS Management Console. For more information, see the AWS documentation [86].
  • Amazon EC2 instance
  1. Use the ssh command to connect to the Amazon EC2 instance using a provided .ppk key.

    For Amazon Linux, the user name is ec2-user. For RHEL5, the user name is either root or ec2-user. For Ubuntu, the user name is ubuntu. For SUSE Linux, the user name is root. 

  2. Execute sudo su to change to root.
  3. Download the Alfresco installer for Linux from the Alfresco Support Portal [87].
  4. Install the downloaded Alfresco installer using the following commands:

    chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin
    sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin      
  5. Install the Microsoft SQL Server database connector. The database connector allows SQL Server database to talk to the Alfresco server.

    This release requires Microsoft JDBC Driver 6.0 for SQL Server for compatibility with the SQL Server database.

    1. Download sqljdbc4.jar from the Microsoft SQL Server download site.
    2. Copy the JDBC driver into the <TOMCAT_HOME>/lib directory.
  6. Install and use a database tool to connect to the Amazon RDS.
  7. Create a database named alfresco.
  8. Enable snapshot isolation mode with the following command:

    ALTER DATABASE alfresco SET ALLOW_SNAPSHOT_ISOLATION ON;
  9. Create a user named alfresco.
  10. Set the new user's password to alfresco.
  11. Open the <classpathRoot>/alfresco-global.properties file.
  12. Locate the following property:

    dir.root=

  13. Edit the line with an absolute path to point to the directory in which you want to store Alfresco Content Services data. For example: dir.root=C:/Alfresco/alf_data
  14. Set and uncomment the database connection properties as shown below:

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=sql-alfresco.cw4mo3qj8qdu.us-east-1.rds.amazonaws.com
    db.port=1433
    db.pool.max=275
    db.txn.isolation=4096
    
    # SQL Server connection
    
    db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
    db.url=jdbc:sqlserver://${db.host}:${db.port};databaseName=${db.name}
  15. Save the file.
  16. Restart the Alfresco Content Services server.
Parent topic: Configuring Amazon RDS databases [72]

Configuring the MariaDB database connection

Use this information to configure the connection to the MariaDB database for use with Alfresco Content Services.

To configure a MariaDB database connection, use the MySQL JDBC driver and follow instructions in Configuring the MySQL database [74].

Parent topic: Configuring databases [6]

Configuring the MySQL database

Use this information to configure a MySQL database for use with Alfresco Content Services.

  1. Install the MySQL database connector.

    The MySQL database connector is required when installing Alfresco Content Services with MySQL. The database connector allows MySQL database to talk to the server.

    1. Download mysql-connector-java-5.1.32 from the MySQL download site: http://dev.mysql.com/ [88].
    2. Copy the JAR file into the /lib directory.

      For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.

  2. Create a database named alfresco.

    If you are using MySQL and require the use of non-US-ASCII characters, you need to set the encoding for internationalization. This allows you to store content with accents in the repository. The database must be created with the UTF-8 character set and the utf8_bin collation. Although MySQL is a unicode database, and Unicode strings in Java, the JDBC driver might corrupt your non-English data. Ensure that you keep the ?useUnicode=yes&characterEncoding=UTF-8 parameters at the end of the JDBC URL.

    Note: You also must ensure that the MySQL database is set to use UTF-8 and InnoDB. Refer to Optimizing MySQL to work with Alfresco Content Services [91].
  3. Increase the maximum connections setting in the MySQL configuration file.
    1. Locate the configuration file:

      • Linux: /etc/my.cnf
      • Windows: c:\Users\All Users\MySQL\MySQL Server 5.6\my.ini
    2. In the mysqld section, add or edit the max_connections property:

      max_connections = 275
    3. Restart the database.
  4. Create a user named alfresco.
  5. Set the new user's password to alfresco.
  6. Navigate to the <ALFRESCO_HOME>/alf_data/ directory and empty the <contentstore> directory.

    This is because the contentstore must be consistent with the database. Step 2 created an empty database, and so the contentstore must also be empty.

  7. Open the <classpathRoot>/alfresco-global.properties.sample file.
  8. Edit the following line with an absolute path to point to the directory in which you want to store Alfresco Content Services data.

    For example: dir.root=C:/Alfresco/alf_data

  9. Uncomment the following properties:

    db.driver=com.mysql.jdbc.Driver
    db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?useUnicode=yes&characterEncoding=UTF-8 
  10. Set the other database connection properties.

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=localhost
    db.port=3306
    db.pool.max=275
    Note: Ensure that these database connection properties are not commented out.
  11. Copy the keystore directory from the alf_data directory at the old location to the alf_data directory at the new location, which is specified in Step 7.
  12. (Optional) Enable case sensitivity.

    The default, and ideal, database setting for Alfresco Content Services is to be case-insensitive. For example, the user name properties in the <configRoot>\classes\alfresco\repository.properties file are:

    # Are user names case sensitive?
    user.name.caseSensitive=false
    domain.name.caseSensitive=false
    domain.separator=

    If your preference is to set the database to be case-sensitive, add the following line to the alfresco-global.properties file:

    user.name.caseSensitive=true

  13. Save the file without the .sample extension.
  14. Restart the Alfresco Content Services server.

    If you receive JDBC errors, ensure the location of the MySQL JDBC drivers are on the system path, or add them to the relevant lib directory of the application server.

  • Optimizing MySQL to work with Alfresco Content Services [91] There are some settings that are required for MySQL to work with Alfresco Content Services.
Parent topic: Configuring databases [6]

Optimizing MySQL to work with Alfresco Content Services

There are some settings that are required for MySQL to work with Alfresco Content Services.

The following table represents the specific settings in the MySQL configuration wizard that enable MySQL to work effectively.

Configuration wizard dialog Setting for Alfresco Content Services
Server Type Choose Dedicated MySQL Server Machine. The option selected determines the memory allocation.
Database usage Choose Transactional Database Only. This creates a database that uses InnoDB as its storage engine.
InnoDB Tablespace Accept the default drive and path.
Concurrent Connections Select Decision Support (DSS) OLAP. This sets the approximate number of concurrent connections to the server.
Networking and Strict Mode Options Accept the default networking options (Enable TCP/IP Networking, Port Number 3306), and the default server SQL mode (Enable Strict Mode).
Character Set Select Best Support for Multilingualism. This sets the default character set to be UTF-8 (set in character-set-server).
Security Options Select Modify Security Settings. Type the root password admin, then retype the password.

By default, table aliases are case sensitive on Unix but not on Windows or Mac OS X. Use the following variable setting to enable MySQL server to handle case sensitivity of database and table names:

 lower_case_table_names=1  

Using this variable setting allows MySQL to convert all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases. This setting also prevents data transfer problems between platforms and between file systems with varying case sensitivity.

Refer to the http://dev.mysql.com/ [92] website for more information on this variable.

Parent topic: Configuring the MySQL database [74]

Configuring an Oracle database

Use this information to configure an Oracle RDBMS database for use with Oracle.
The Oracle database is case sensitive, so any configuration setting that you add into the alfresco-global.properties file must match the case used in Oracle.
Note: The Oracle database must be created with the AL32UTF8 character set.
Note: Alfresco supports RAC as a single instance Oracle database as the customers will benefit from high availability and resiliency. As Alfresco Content Services requires a sequentially ordered transaction ID, customers will not see a performance improvement from deploying on Oracle RAC.
Note: The Oracle Thin driver is recommended. Check the Supported platforms [93] page for the correct driver.
  1. Create a database named alfresco.
  2. Create a user named alfresco.

    The alfresco user must have Connect and Resource privileges in Oracle.

    This user must have write permissions on all tables and sequences.

  3. Set the new user's password to alfresco.
  4. Ensure the alfresco user has the required privileges to create and modify tables.

    You can remove these privileges once the server has started, but they might also be required for upgrades.

    Note: When connecting to Oracle Database 12c, you must configure privileges on tablespace "USERS" to avoid the following error:
    ORA-01950: no privileges on tablespace 'USERS'
    You can do this by using one of the following commands:
    ALTER USER <username> QUOTA <QUOTE_M> ON <tablespace name>
    or
    GRANT UNLIMITED TABLESPACE TO <username>
  5. Open the <classpathRoot>/alfresco-global.properties.sample file.
  6. Locate the following line:

    dir.root=./alf_data

  7. Edit the line with an absolute path to point to the directory in which you want to store Alfresco data. For example: dir.root=C:/Alfresco/alf_data
  8. Set and uncomment the Oracle database connection properties as shown below:

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=localhost
    db.port=1521
    db.pool.max=275
    
    # Oracle connection
    
    db.driver=oracle.jdbc.OracleDriver
    db.url= jdbc:oracle:thin:@${db.host}:${db.port}:${db.name}
    If using the oci configuration, change the URL syntax as shown below:
    db.url=jdbc:oracle:oci:@${db.host}:${db.port}:${db.name}

    The Oracle connection URL in this example is basic. Typical Oracle connection strings can be used with the Oracle driver (Thin/OCI). The Thin driver is recommended over the OCI driver.

    For database URLs and specifiers, see the Oracle documentation at Database URLs and Database Specifiers [94] and Thin-style Service Name Syntax [95].

    You can use standard (OCI/Thin) connection URL, Oracle service, and Oracle DNS service URL without any issues.

    Note: If you are using the OCI URL, you need an Oracle client on the Alfresco host. For more information, see Oracle Instant Client [96].
  9. Save the file without the .sample extension.
  10. Copy the Oracle JDBC driver JAR into /lib.

    CAUTION:
    Do not put multiple driver jars in the application or the application server lib directory. Only include the driver jar which is advised in these instructions. Remove any others, if present.
  11. Restart the Alfresco server.

    Note: If you receive JDBC errors:
    • Ensure the location of the Oracle JDBC drivers are on the system path or added to the relevant lib directory of the application server.
    • Check if you have LD_LIBRARY_PATH in use in your environment to remove the old Oracle client (for example, /home/oracle/app/oracle/product/11.2.0/client_1/lib) and add the full path to the current ojdbc7.jar. If you do not have this environment variable, do not add it.
    Note: The JDBC driver for Oracle is in the JAR file: ojdbc7.jar. However, if you see the following error, then add the Doracle.jdbc.thinLogonCapability=o3 parameter to JAVA_OPTS:
    java.sql.SQLException: OAUTH marshaling failure
Parent topic: Configuring databases [6]

Configuring a PostgreSQL database

Use this information to configure a PostgreSQL database for use with Alfresco Content Services.
  1. Install the PostgreSQL database connector.

    The database connector is a JAR file, for example postgresql-9.3-xxxx.jdbc4.jar.

    1. Download the latest database connector JAR file from the PostgreSQL download site: http://www.postgresql.org/download/ [90].
    2. Copy the JAR file into the /lib directory.

      For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.

  2. Increase the maximum connections setting in the PostgreSQL configuration file.
    1. Locate the configuration file:

      • Linux: /var/lib/pgsql/<version of PostgreSQL>/data/postgresql.conf
      • Windows: C:\Program Files\PostgreSQL\<version of PostgreSQL>\data\postgresql.conf
    2. Add or edit the max_connections property:

      max_connections = 275
    3. Restart the database.
  3. Create a database named alfresco.
  4. Create a user named alfresco.

    This user must have write permissions on all tables and sequences.

  5. Set the new user's password to alfresco.
  6. Ensure the alfresco user has the required privileges to create and modify tables.
  7. Open the <classpathRoot>/alfresco-global.properties.sample file.
  8. Locate the following line:

    dir.root=./alf_data

  9. Edit the line with an absolute path to point to the directory in which you want to store Alfresco Content Services data. For example: dir.root=C:/Alfresco/alf_data
  10. Uncomment the following properties:

    # PostgreSQL connection (requires postgresql-8.2-504.jdbc3.jar or equivalent)
    #
    db.driver=org.postgresql.Driver
    db.url=jdbc:postgresql://${db.host}:${db.port}/${db.name} 
  11. Set the other database connection properties.

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=localhost
    db.port=5432
    db.pool.max=275
    Note: Ensure that these database connection properties are not commented out.
  12. Save the file without the .sample extension.
  13. To allow password-authenticated connections through TCP/IP, ensure that the PostgreSQL configuration file, pg_hba.conf, contains the following line:

    host all all 127.0.0.1/32 password
  14. Restart the Alfresco Content Services server.

    If you receive JDBC errors, ensure the location of the PostgreSQL JDBC drivers are on the system path, or add them to the relevant lib directory of the application server.

Parent topic: Configuring databases [6]

Configuring a SQL Server database

Use this information to configure a Microsoft SQL Server database for use with Alfresco Content Services. To modify the default database configuration, you must edit values in the <classpathRoot>\alfresco-global.properties file.
  1. Install the Microsoft SQL Server database connector. The database connector allows SQL Server database to talk to the Alfresco Content Services server.

    This release requires Microsoft JDBC Driver 6.0 for SQL Server for compatibility with the SQL Server database.

    1. Download the JDBC driver from the Microsoft SQL Server download site.
    2. Copy the JDBC driver into the <TOMCAT_HOME>/lib directory.
  2. Increase the available connections setting in the Microsoft SQL Server configuration file.

    Follow these instructions to update the setting: Configuring the user connections option [97].

  3. Create a database named alfresco.

    Create the database using default collation settings.

  4. Create a user named alfresco.

    This user must have write permissions on all tables and sequences. For example, you can provide these permissions by granting your database user (in this case, the alfresco user) the db_owner role. See Database-Level Roles [98] for more information.

  5. Set the new user's password to alfresco.
  6. Ensure the alfresco user has the required privileges to create and modify tables.

    This can be removed once the server has started, but may be required during upgrades.

  7. Enable snapshot isolation mode with the following command:

    ALTER DATABASE alfresco SET ALLOW_SNAPSHOT_ISOLATION ON;

  8. Ensure that the TCP connectivity is enabled on the fixed port number 1433.
  9. Open the <classpathRoot>/alfresco-global.properties.sample file.
  10. Locate the following property:

    dir.root=

  11. Edit the line with an absolute path to point to the directory in which you want to store Alfresco Content Services data. For example: dir.root=C:/Alfresco/alf_data
  12. Set the database connection properties.

    db.name=alfresco
    db.username=alfresco
    db.password=alfresco
    db.host=localhost
    db.port=1433
    db.pool.max=275
  13. Add the following properties to register the driver and set up the connection:

    db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
    db.url=jdbc:sqlserver://${db.host}:${db.port};databaseName=${db.name};lockTimeout=1000;
    db.txn.isolation=4096
  14. Save the file without the .sample extension.
  15. Restart the Alfresco Content Services server.

    If you receive JDBC errors, ensure the location of the SQL Server JDBC drivers are on the system path, or add them to the relevant lib directory of the application server.

  • Optimizing Microsoft SQL Server to work with Alfresco Content Services [99] Make sure you manage Microsoft SQL Server to optimise performance.
Parent topic: Configuring databases [6]

Optimizing Microsoft SQL Server to work with Alfresco Content Services

Make sure you manage Microsoft SQL Server to optimise performance.
To ensure that your performance does not degrade, it is useful to carry out the following weekly maintenance operations on your SQL server, especially in repositories with a high transaction count and frequency:
  • Recompute statistics by running the command: EXEC sp_updatestats
  • Clear the buffers by running the command: DBCC DROPCLEANBUFFERS
  • Clear the cache by running the command: DBCC FREEPROCCACHE
  • Run an index fragmentation check and:
    • Rebuild anything that is >30% fragmented
    • Reorganize anything that is between 5 and 30% fragmented
    See Reorganize and Rebuild Indexes [100] for more information.
Parent topic: Configuring a SQL Server database [77]

Advanced database configuration properties

As an administrator, you need to edit some advanced properties to customize your database configuration. Many properties, however, do not need to be edited.

Alfresco Content Services 6.2 supports Oracle, Microsoft SQL Server, as well as MySQL and PostgreSQL.

The advanced database configuration properties are categorized into two groups based on their relevance:
  • properties that you SHOULD edit
  • properties that you COULD edit

The following table describes the properties that you SHOULD edit:

Property name Description Default value
db.txn.isolation The JDBC code number for the transaction isolation level, corresponding to those in the java.sql.Connection class. The value of -1 indicates that the database's default transaction isolation level should be used. For the Microsoft SQL Server JDBC driver, the special value of 4096 should be used to enable snapshot isolation. -1
db.pool.initial The number of connections opened when the pool is initialized. 10
db.pool.validate.query The SQL query that is used to ensure that your connections are still alive. This is useful if your database closes long-running connections after periods of inactivity. For Oracle database, use SELECT 1 from dual

For MySQL database, use SELECT 1

For SQL Server database, use SELECT 1

For PostgreSQL database, use SELECT 1

The following table describes the properties that you COULD edit:

Property name Description Default value
db.pool.statements.enable A Boolean property. When set to true it indicates that all pre-compiled statements used on a connection will be kept open and cached for reuse. true
db.pool.statements.max The maximum number of pre-compiled statements to cache for each connection. The default is 40. Note that Oracle does not allow more that 50 by default. 40
db.pool.idle The maximum number of connections that are not in use kept open. 10
db.pool.max The maximum number of connections in the pool. See the note below for more information on this property. 275
db.pool.min The minimum number of connections in the pool. 10
db.pool.wait.max Time (in milliseconds) to wait for a connection to be returned before generating an exception when connections are unavailable. A value of 0 or -1 indicates that the exception should not be generated. 5000
db.pool.validate.borrow A Boolean property. When set to true it indicates that connections will be validated before being borrowed from the pool. true
db.pool.validate.return A Boolean property. When set to true it indicates that connections will be validated before being returned to the pool. false
db.pool.evict.interval Indicates the interval (in milliseconds) between eviction runs. If the value of this property is zero or less, idle objects will not be evicted in the background. 600000
db.pool.evict.idle.min The minimum number of milliseconds that a connection may remain idle before it is eligible for eviction. 1800000
db.pool.evict.validate A Boolean property. When set to true it indicates that the idle connections will be validated during eviction runs. false
db.pool.abandoned.detect A Boolean property. When set to true it indicates that a connection is considered abandoned and eligible for removal if it has been idle longer than the db.pool.abandoned.time. false
db.pool.abandoned.time The time in seconds before an abandoned connection can be removed. 300

The db.pool.max property is the most important. By default, each Alfresco Content Services instance is configured to use up to a maximum of 275. All operations require a database connection, which places a hard upper limit on the amount of concurrent requests a single instance can service (that is, 40), from all protocols, by default.

Most Java application servers have higher default settings for concurrent access (Tomcat allows up to 200 concurrent HTTP requests by default). Coupled with other threads in Alfresco Content Services (non-HTTP protocol threads, background jobs, and so on) this can quickly result in excessive contention for database connections, manifesting as poor performance for users.

If you are using Alfresco Content Services in anything other than a single-user evaluation mode, increase the maximum size of the database connection pool to at least the following setting.
[number of application server worker threads] + 75. 
For a Tomcat default HTTP worker thread configuration, and with all other thread pools left at the defaults, this means this property should be set to at least 275.
To increase the database connection pool, add the db.pool.max property to the alfresco.global.properties file and set it to the recommended value of 275, for example:
db.pool.max=275
For clarity, add this property immediately after the other database properties.
Important: After increasing the size of the database connection pools, you must also increase the number of concurrent connections your database can handle to at least the size of the cumulative connection pools. In a cluster, each node has its own independent database connection pool. You must configure sufficient database connections for all of the cluster nodes to be able to connect simultaneously. We recommend that you configure at least 10 more connections to the database than are configured cumulatively across all of the connection pools to ensure that you can still connect to the database even if Alfresco Content Services saturates its own connection pools. Remember to factor in cluster nodes (which can each use up to 275 database connections) as well as connections required by other applications that are using the same database server as Alfresco Content Services.

The precise mechanism for reconfiguring your database's connection limit depends on the relational database product you are using; contact your DBA for configuration details.

Parent topic: Configuring databases [6]

Validating your database

Validate your database to ensure that it meets the prerequisites for an Alfresco Content Services installation.
Note: We are unable to provide specialized support for maintaining or tuning your relational database. You MUST have an experienced, certified DBA on staff to support your installation(s). Typically this is not a full time role once the database is configured and tuned and automated maintenance processes are in place. However an experienced, certified DBA is required to get to this point.

Maintenance and Tuning:

As with any application that uses a relational database, regular maintenance and tuning of the database and schema is necessary. Specifically, all of the database servers that Alfresco Content Services supports require a minimum level of index statistics maintenance at frequent, regular intervals. Unless your DBA suggests otherwise, Alfresco recommends daily maintenance.
Note: Relying on your database's automated statistics gathering mechanism might not be optimal – consult an experienced, certified DBA for your database to confirm this.
Note: Index maintenance on most databases is an expensive, and in some cases blocking, operation that can severely impact performance while in progress. Consult your experienced, certified DBA regarding best practices for scheduling these operations in your database.

The following table describes example commands for specific databases. These commands are for illustration only. You must validate the commands required for your environment with your DBA.

Database Example maintenance commands
MySQL ANALYZE - consult with an experienced, certified MySQL DBA who has InnoDB experience (Alfresco Content Services cannot use a MyISAM database and hence an InnoDB-experienced MySQL DBA is required).

Refer to the following link: https://dev.mysql.com/doc/refman/5.6/en/analyze-table.html [101].

PostgreSQL VACUUM and ANALYZE – consult with an experienced, certified PostgreSQL DBA.

Refer to the following link: https://www.postgresql.org/docs/10/maintenance.html [102].

Oracle Depends on version – consult with an experienced, certified Oracle DBA.

Refer to the following link: https://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#g49431 [103].

Microsoft SQL Server ALTER INDEX REBUILD (Transact-SQL [104])

UPDATE STATISTICS (Transact-SQL [105])

Consult with an experienced, certified MS SQL Server DBA

Parent topic: Configuring databases [6]

Configuring the repository

Use this information to configure the Alfresco Content Services repository.

  • Running Alfresco in read-only mode [106] You may want to run Alfresco in read-only mode, for example, if you are using Alfresco for Solr to track in order to maintain indexes.
  • Deploying with a different context path [107] There are a number of updates that you need to make if you want to deploy to a context path that isn't /alfresco.
  • Tuning the JVM [108] The hardware requirements for the repository and Alfresco Share are variable and depend on the number of concurrent users that access the system. You can tune the memory and garbage collection parameters for the JVM to be appropriate for your situation.
  • Command line configuration [109] The beans that load the alfresco-global.properties will give preferential treatment to any JVM-set properties.
  • Configuring Alfresco Content Services to work with a web proxy [110] There are standard JVM system properties that you can use to set proxies for various protocol handlers, such as HTTP and HTTPS. These properties are used by Surf and all other parts of the system that make http call-outs.
  • Configuring server administration properties [111] The sysAdmin subsystem allows real time control across some of the general repository properties. The sysAdmin subsystem replaces the RepoServerMgmt management bean.
  • Controlling JVM system properties [112] Use these techniques to control JVM system properties.
  • Secure Sockets Layer (SSL) and the repository [113] There are a number of ways to handle SSL communication when connecting to the repository, and some information that you should know about automatic configuration.
  • Configuring the repository cache [114] The repository provides in-memory caches. These caches are transaction safe and can be clustered. Caches greatly improve repository performance but they use Java heap memory.
  • Adding a MIME type [115] Use this information to add a MIME type definition.
  • Configuring metadata extraction [116] Metadata extraction automatically extracts metadata information from inbound and/or updated content and updates the corresponding nodes properties with the metadata values.
  • About aspects [117] Aspects allow you to add functionality to existing content types.
  • About versioning [118] Versioning allows you to track content history. By default, when content is created in the repository, versioning is not applied. When creating content, users must specify versionable on a case-by-case basis.
  • Setting up database replication [119] Replication allows you to continuously copy a database to a different server.
  • Customizing content transformations [120] This task describes how to customize content transformations.
  • Controlling indexes [121] You can use the cm:indexControl aspect to control the indexing of content in Alfresco Share. Using this aspect you can choose to disable repository-wide indexing. This can prove useful in certain situations, such as bulk loading.
  • Deferring the start of cron based jobs [122] You can configure alfresco-global.properties and dev-log4j.properties to implement a global delay to cron based jobs; for example, until after the server has fully started.
  • CORS configuration [123] Cross Origin Resource Sharing (CORS) can be enabled and configured in the alfresco-global.properties file.
Parent topic: Configuring [28]

Running Alfresco in read-only mode

You may want to run Alfresco in read-only mode, for example, if you are using Alfresco for Solr to track in order to maintain indexes.
To set Alfresco to read-only mode, use one of the following methods:
  • Using the alfresco-global.properties file
  • Using a JMX client, such as JConsole

Using the alfresco-global.properties file

The server.allowWrite property specifies that the repository will allow write operations. If set to false, the repository is in read-only mode.
  1. Open the alfresco-global.properties file.
  2. Add the following property:
    server.allowWrite=false
  3. Save the file.
  4. Restart the Alfresco server.

Using a JMX client, such as JConsole

  1. Login to JConsole.
  2. Using the MBean tab, go to JMX MBeans > Alfresco > Configuration > sysAdmin > Attributes.
  3. Set the value of the server.allowWrite=false attribute to read-only.
  4. Click Refresh.
Follow these steps to check if Alfresco is set to read-only mode or not:
  1. Go to the Alfresco Admin Console [124].
  2. Under General, click System Settings.
  3. Under Alfresco Content Services Repository Settings, check the value of Server Allow Writes.
Parent topic: Configuring the repository [7]

Deploying with a different context path

There are a number of updates that you need to make if you want to deploy to a context path that isn't /alfresco.
The context path is the path that is used by applications (for example, Alfresco Share, SOLR, SharePoint, and others) to access the repository. If you change this value, you must reflect the change in your application server configuration.
Note: You cannot install at the server root (/). In other words, the context path cannot be the server root.
Follow these steps if you want to deploy to a context path that is not /alfresco. The string new-context-path is used to represent the name of the context path that you are using:
  1. Deploy the alfresco.war file to a different context path; for example, if you are using Tomcat, rename the alfresco.war file to new-context-path.war and then deploy it. For other application servers, set the context path in the Admin Console during deployment.
  2. Update alfresco-global.properties with the name of the context path: alfresco.context=new-context-path.
  3. Update share-config-custom.xml as described in Configuring the Share default port [125].
  4. Update the context path setting in the _vti_bin application:
    1. Unpack the _vti_bin.war file.
    2. Locate the WEB-INF/web.xml file in the _vti_bin application.
    3. Replace the <param-value> value with /new-context-path/aos to update the context parameter with the new context path. The example shows the default values in the WEB-INF/web.xml file:

      <context-param>
         <param-name>org.alfresco.enterprise.repo.officeservices.dispatch.SERVICES</param-name>
         <param-value>/alfresco/aos</param-value>
         <description>A space separated list of url-encoded context paths of SharePoint protocol enabled applications (e.g. Alfresco Content Services, Alfresco Office Workdesk)</description>
      </context-param>
    4. Repack the contents of the _vti_bin application into a _vti_bin.war file and deploy it.
  5. Unpack ROOT.war and edit the index.jsp file to set the context path:

    Change /alfresco to /new-context-path:

    if(request.getMethod().equals("PROPFIND") || request.getMethod().equals("OPTIONS"))
    { ServletContext alfrescoContext = application.getContext("/alfresco"); ... }
  6. Repack the contents of ROOT.war and deploy it.
  7. Update the Solr configuration to specify the new context path:

    If you are using Solr, modify the following files:

    solr/workspace-SpacesStore/conf/solrcore.properties
    solr/archive-SpacesStore/conf/solrcore.properties
    to specify the properties relevant to your configuration:
    alfresco.host=localhost
    alfresco.port=8080
    alfresco.port.ssl=8443
    alfresco.baseUrl=/alfresco
Parent topic: Configuring the repository [7]

Deploying with a reverse proxy

Follow this guidance if you want to run Alfresco Content Services with a reverse proxy.

If the reverse proxy maps the target server to a different context path, or if you deployed specifically to a different context path, you need to follow the steps in Deploying with a different context path [126], with the following changes:
  1. In step 2 [127], update the values in the alfresco-global.properties file:

    alfresco.context=xxx
    alfresco.host=xxx 
    alfresco.port=xxx
    alfresco.protocol=xxx
    
    where xxx are the externally visible context, host name, port number and protocol values.
  2. You must specify the context path that is externally visible in all steps, and not the context path that the repository is actually running on. Exceptions are in step 1 [128] and in step 3 [129] if Share is connecting to the repository directly and not through the reverse proxy. The other exception is in step 7 [130] if Solr is contacted directly and not through the reverse proxy.

Tuning the JVM

The hardware requirements for the repository and Alfresco Share are variable and depend on the number of concurrent users that access the system. You can tune the memory and garbage collection parameters for the JVM to be appropriate for your situation.
Important: This information suggests metrics and estimates, but your system may vary.
Note: In the following sections, the terms concurrent users and casual users are used. Concurrent users are users who are constantly accessing the system with only a small pause between requests (3-10 seconds maximum) with continuous access 24/7. Casual users are users occasionally accessing the system through the Alfresco Content Services or WebDAV interfaces with a large gap between requests (for example, occasional document access during the working day).

Hardware

Alfresco Content Services degrades gracefully on low-powered hardware, and small installations can run well on any modern server. However, for optimum performance, we recommend the following:

  • Use 64 bit systems only.
  • Use a system with a clock speed above 2.0 GHz.
  • Reserve enough RAM for your operating system beyond the memory required for your JVM.
  • Keep search indexes on your local disk instead of on network storage.

Disk space usage

The size of your repository defines how much disk space you will need; it is a very simple calculation. Content is stored directly on the disk by default. Therefore, to hold 1000 documents of 1 MB will require 1000 MB of disk space. You should also make sure there is sufficient space overhead for temporary files and versions. Each version of a file (whether in DM or WCM) is stored on disk as a separate copy of that file, so make allowances for that in your disk size calculations (for DM, use versioning judiciously).
Note: The disk space usage calculation above is only for content storing. It does not take into account any indexes (Lucene or Solr).

Use a server class machine with SCSI Raid disk array. The performance of reading/writing content is almost solely dependent on the speed of your network and the speed of your disk array. The overhead of the server itself for reading content is very low as content is streamed directly from the disks to the output stream. The overhead of writing content is also low but if Solr is installed on the same machine, additional overhead should be allowed for the indexing process.

Virtualization

Alfresco Content Services runs well when virtualized, but you should expect a reduction in performance. When using the rough sizing requirements given, it might be necessary to allocate twice as many resources for a given number of users when those resources are virtual. Para-virtualization, or virtualized accesses to native host volumes do not require as many resources. Benchmarking your environment is necessary to get a precise understanding of what resources are required.

JVM memory and CPU hardware for multiple users

The repository L2 Cache, plus initial VM overhead, plus basic Alfresco Content Services system memory, is setup with a default installation to require a maximum of approximately 1024 MB.

This means that you can run the repository and web client with many users accessing the system with a basic single CPU server and only 1024 MB of memory assigned to the JVM. However, you must add additional memory as your user base grows, and add CPUs depending on the complexity of the tasks you expect your users to perform, and how many concurrent users are accessing the client.

Note: Note that for these metrics, N concurrent users is considered equivalent to 10xN casual users that the server could support.

Number of users

Recommended memory / CPU settings per server

For 50 concurrent or up to 500 casual users 2.0 GB JVM RAM

2x server CPU (or 1xDual-core)

For 100 concurrent users or up to 1000 casual users 4.0 GB JVM RAM

4x server CPU (or 2xDual-core)

For 200 concurrent users or up to 2000 casual users 8.0 GB JVM RAM

8x server CPU (or 4xDual-core)

Note: For full performance tuning, contact Alfresco Support or Consulting.
  • JVM settings [131] There are a number of typical JVM settings that you can use in your repository configuration.
Parent topic: Configuring the repository [7]

JVM settings

There are a number of typical JVM settings that you can use in your repository configuration.

The standard JVM settings are as follows:

-Xms1G
-Xmx2G
-Dcom.sun.management.jmxremote

Tune the JVM using the following three steps:

  1. Use as much RAM as possible for the JVM (-Xmx32GB).
  2. Do not add any other configuration settings.

To avoid memory swapping, -Xmx should never exceed the available RAM in the system. Remember to leave room for memory used by the operating system and other applications, like LibreOffice using JOD (JOD often uses 1 GB of RAM per OO instance).

In general, if you do not give the JVM enough heap, adjusting the other JVM settings will not make any difference. Once the JVM has enough heap, you should not need to change the other JVM settings.

The remaining information on this page might help in exceptional circumstances only. It is unlikely to apply to your use case, and we advise against JVM tuning beyond what has already been discussed here.

Maximum JVM heap size 32/64 bit

An important calculation to keep in mind is:
(Managed Heap + native heap + (thread stack size * number of threads)) cannot exceed 2 GB on 32bit x86 Windows or Linux systems

This is a limitation of the Oracle Java VM. It means that even if you install 4 GB of RAM into your server, a single instance of the JVM cannot grow beyond 2 GB on a 32 bit server machine.

Note: A 64 bit OS/JVM has much bigger values. It is recommended that a 64 bit OS with large memory hardware (>2 GB assigned to the JVM) is used for deployments of >250 concurrent or >2500 casual users.

You can also set up your machine to cluster if you prefer to solve multi-user access performance issues with additional machines rather than a single powerful server.

Setting debug mode for troubleshooting

To debug your JVM server:
  • If you are a Linux user, edit the JVM options used to start the Tomcat instance, set by the tomcat/scripts/ctl.sh script. See Controlling JVM system properties [132] for detailed information.
    For example, set the following:
    JAVA_OPTS=%JAVA_OPTS% -server -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8082
    where address is a port for your system.
  • If you are a Windows user, register Tomcat as a Windows service:
    • In the installation directory, locate the properties.ini file and copy the value of the tomcat_unique_service_name parameter (for example, alfrescoTomcatnum1).
    • From the /tomcat/bin directory, run the following command at a command prompt:
      tomcat7w.exe //ES//<alfrescoTomcatnum1>
      where <alfrescoTomcatnum1> is the value from your tomcat_unique_service_name parameter.
    • Open the alfrescoTomcatnum1 Properties window, select the Java tab, and the Java Options field and add the following lines of code on two separate lines:
      -Xdebug 
      -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
      where address is a port for your system.
  • Low end machines [133] Use this information if you have less than 2 GB memory available.
  • Effects of NewSize [134] Use this information to understand the settings for OldGen.
Parent topic: Tuning the JVM [108]

Low end machines

Use this information if you have less than 2 GB memory available.

The stack size of 1024 KB (-Xss1024K) is generous. Some installations might require a little over 512 KB. Many use only 256 KB. If the per-thread memory consumption is too high for your installation, reduce the stack size to 512 KB and then to 256 KB and note any memory-related errors in the logs.

The NewSize should be kept as large as possible. It can be reduced, but the memory consumption should be watched on a monitoring tool, for example, JConsole, to ensure that the rate of spillover of temporary objects is kept down. If the machine is supporting 500 simultaneous operations, for instance, then the spillover of temporary objects (from NewSize being too small) will cause hold-ups on memory assignment as the garbage collector does sweeps.

Parent topic: JVM settings [131]

Effects of NewSize

Use this information to understand the settings for OldGen.

Given that the OldGen is composed primarily of cache data of up to about 520 MB, at least 1 GB should be reserved for OldGen. Once -Xmx increases, the OldGen can be increased to 2 GB. 512 MB should be left as a buffer to account for miscellaneous (PermGen, and so on). So the following variations might be applied:

-Xmx2G -Xms1G -XX:NewSIze=512M (OldGen at least 1 GB) 
-Xmx3G -Xms1G -XX:NewSize=512M (OldGen at least 2 GB) 
-Xmx4G -Xms2G -XX:NewSize=1G (OldGen at least 2.5 GB) 
-Xmx6G -Xms3G -XX:NewSize=2G (OldGen at least 3.5 GB) 
-Xmx8G -Xms4G -XX:NewSize=3G (OldGen at least 4.5 GB)

If you need these levels, you will need to run JConsole (and Java 6) to observe the rate of spillover from Eden space to Survivor to OldGen. If, after the system has been running for a while, the OldGen size stabilizes, then the NewSize can be increased appropriately. The following diagram (using VisualGC) shows how varying the NewSize value affects overall garbage collection activity:

Parent topic: JVM settings [131]

Command line configuration

The beans that load the alfresco-global.properties will give preferential treatment to any JVM-set properties.

  • Setting properties on the JVM [135] Use this information to set the JVM properties.
  • Mixing global properties and system property settings [136] You can use a combination of global properties and system properties for certain customizations. For example, if you wish to distribute a system that has a core set of properties overridden but need to customize the last few for each installation.
Parent topic: Configuring the repository [7]

Setting properties on the JVM

Use this information to set the JVM properties.

  • (Windows) At a command prompt, enter the following:

    Set JAVA_OPTS=-Ddir.root=e:/alfresco/data

  • (Linux) At a command prompt, enter the following:

    export JAVA_OPTS=-Ddir.root=/srv/alfresco/data

Parent topic: Command line configuration [109]

Mixing global properties and system property settings

You can use a combination of global properties and system properties for certain customizations. For example, if you wish to distribute a system that has a core set of properties overridden but need to customize the last few for each installation.

  1. Activate the properties in the <classpathRoot>/alfresco-global.properties file.
  2. Set all common defaults for your system.
  3. On each installation, add the final configuration values. For example:

    -Ddb.username=alfresco
    -Ddb.password=alfresco 
    -Dindex.tracking.cronExpression='0/5 * * * * ?' 
    -Dindex.recovery.mode=AUTO 
    -Dalfresco.cluster.name=ALFRESCO_DEV
Parent topic: Command line configuration [109]

Configuring Alfresco Content Services to work with a web proxy

There are standard JVM system properties that you can use to set proxies for various protocol handlers, such as HTTP and HTTPS. These properties are used by Surf and all other parts of the system that make http call-outs.

All proxies are defined by a host name and a port number. The port number is optional and if not specified, a standard default port will be used.

The following two properties can be set to specify the proxy that will be used by the HTTP protocol handler:

System Properties Description
http.proxyHost Specifies the host name or IP address for the proxy server.
http.proxyPort Specifies the port number for the proxy server. The default port number is 80.
http.nonProxyHosts Specifies the hosts that should be accessed without going through the proxy.
Note: These properties can be added as a part of JAVA_OPTS environment variable so that content transfer uses a proxy rather than a direct connection.

The following two properties can be set to specify the proxy that will be used by the HTTPS protocol handler:

System Properties Description
https.proxyHost Specifies the host name or IP address for the proxy server when using https (http over SSL).
https.proxyPort Specifies the port number for the proxy server when using https (http over SSL). The default port number is 443.

For example, the following command directs all http connections to go through the proxy server with the IP address 172.21.1.130, and the port number 8080:

java -Dhttp.proxyHost=172.21.1.130 -Dhttp.proxyPort=8080

In addition, you can also set the following non-standard properties for authenticated proxies:

Non-standard Properties Description
http.proxyUser Specifies the user name to use with an authenticated proxy used by the HTTP protocol handler. It should be left unset if the proxy does not require authentication.
http.proxyPassword Specifies the password to use with an authenticated proxy used by the HTTP protocol handler. It should be left unset if the proxy does not require authentication.
https.proxyUser Specifies the user name to use with an authenticated proxy used by the HTTPS protocol handler. It should be left unset if the proxy does not require authentication.
https.proxyPassword Specifies the password to use with an authenticated proxy used by the HTTPS protocol handler. It should be left unset if the proxy does not require authentication.
Parent topic: Configuring the repository [7]
Related concepts
Controlling JVM system properties [132]

Configuring server administration properties

The sysAdmin subsystem allows real time control across some of the general repository properties. The sysAdmin subsystem replaces the RepoServerMgmt management bean.

  • Configuring server administration settings [68] The System Settings page shows your server settings, the Alfresco Content Services web application repository settings, and the Alfresco Share application settings.
  • sysAdmin subsystem properties [137] The following properties can be configured for the sysAdmin subsystem.
Parent topic: Configuring the repository [7]

Configuring server administration settings

The System Settings page shows your server settings, the Alfresco Content Services web application repository settings, and the Alfresco Share application settings.

  1. Open the Admin Console.
  2. In the General section, click System Settings.

    You see the System Settings page showing the details of your installation.

  3. Set the Repository Settings properties:

    These properties are read-only and are set in the alfresco-global.properties file only. See the properties starting with alfresco in sysAdmin subsystem properties [137].

    Repository Settings property Example setting What is it?
    Repository Context alfresco This property specifies the context path of the web application URL. The default value is alfresco. The context path is the path that is used by applications (for example, IMAP, SharePoint, and email) to access Alfresco Content Services. If you change this value, it must be defined with the same name as the directory name specified by your application server. For example, if you are using Tomcat, this is the /webapps/alfresco directory in Tomcat, where alfresco is the name of the proxy server or specific server that you are using.
    Repository Hostname ${localname} This property is the host name of the web application that is used by external applications. Alfresco Content Services attempts to auto-detect the host name in place of ${localname}. If auto-detection fails, ${localname} is replaced with the IP address.
    Server Allow Writes true Write access is permitted to the repository, as long as the license is valid. When this property is set to false, the repository is in read-only mode.
    Protocol http This property is the protocol component of the web application. The default is http. If you require HTTPS support you will need to configure this in the host application server.
    Port 8080 This property is the port number of the web application URL that is resolved by external applications. The default is 8080.
  4. Set the Server Settings properties:

    Server Settings property Example setting What is it?
    Allowed Users   This property allows you to specify which users can log in. By default, all users can log in. Enter a comma-separated list of users to allow only those users to log in. If you do not include the administrator user setting up this list (that is, the current user), then this will added automatically.
    Maximum Users -1 The maximum number of simultaneous users allowed to log in. The default value -1 allows an unlimited number of users.
  5. Set the Share Application Settings properties:

    Share Application Settings property Example setting What is it?
    Share Context share This property sets the context path of the Share web application URL. The default is share. You can set this context to a name that is appropriate.
    Protocol http This property sets the protocol for the Share web application. The default is http. HTTPS support requires additional configuration within the host application server.
    Share Hostname 127.0.0.1 This property sets the externally resolvable host name of the Share web application URL. The default value is ${localname}.
    Port 8080 This property sets the externally resolvable port number of the web application URL. The default is 8080.
    Site Public Group GROUP_EVERYONE This property is the name of the group that controls user to access Public sites. The default is GROUP_EVERYONE, which contains all users.
  6. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

Parent topic: Configuring server administration properties [111]

sysAdmin subsystem properties

The following properties can be configured for the sysAdmin subsystem.
server.maxusers
The maximum number of users who are allowed to log in or -1 if there is no limit.
server.allowedusers
A comma-separated list of users who are allowed to log in. Leave empty if all users are allowed to log in.
server.allowWrite
A Boolean property that when true indicates that the repository will allow write operations (provided that the license is valid). Set this property to false to put the repository in to read-only mode.

The following properties specify the parameters that control how Alfresco Content Services generates URLs to the repository and Alfresco Share. These parameters might need to be edited from their default values to allow the URLs to be resolved by an external computer.

alfresco.context
Specifies the context path of the repository web application. The default is alfresco.
alfresco.host
Specifies the externally resolvable host name of the web application. The default value is ${localname}. If this is used for the value of this property, the token ${localname} will be automatically replaced by the domain name of the repository server.
alfresco.port
Specifies the externally resolvable port number of the web application URL. The default is 8080.
alfresco.protocol
Specifies the protocol component of the web application. The default is http.
share.context
Specifies context path component of the Alfresco Share web application URL The default is share.
share.host
Specifies the externally resolvable host name of the Alfresco Share web application URL. The default value is ${localname}.
share.port
Specifies the externally resolvable port number of the Alfresco Share web application URL. The default is 8080.
share.protocol
Specifies the protocol to use. The default is http.
Parent topic: Configuring server administration properties [111]

Controlling JVM system properties

Use these techniques to control JVM system properties.
In a standard Linux/Unix installation, system properties can be specified in -Dname=value format (separated by spaces) in the JAVA_OPTS variable set by the script:
tomcat/scripts/ctl.sh 
In a standard Windows installation, system properties can be listed in -Dname=value format (separated by semicolons) before ;-Dalfresco.home in:
tomcat/bin/service.bat
Once edited, the following commands must be run to re-register the service with the new options:
tomcat/scripts/serviceinstall.bat REMOVE
tomcat/scripts/serviceinstall.bat INSTALL
Parent topic: Configuring the repository [7]

Secure Sockets Layer (SSL) and the repository

There are a number of ways to handle SSL communication when connecting to the repository, and some information that you should know about automatic configuration.

When you install Alfresco Content Services, port 8443 is automatically configured for SSL communication between Solr and the repository. This means that the default setting is set to use client certificates for any authentication (the connector on port 8443 is configured with certificateVerification="required").

This causes complications when there is communication between a browser protocol and the repository, because Tomcat requests a client certificate for that communication too; for example, when you are using Alfresco Office Services to connect between a Microsoft application and the repository. For more information see Installing and configuring Alfresco Office Services [138].

You can still connect to the repository without a client certificate, however if a certificate is present (for example, if you have installed certificates in your Windows certificate store), then the certificate must be signed by the same Certificate Authority that is used for authentication between the repository and Solr. If you select one of the Windows installed certificates, you will not be able to progress, because the certificate is not one that is expected for the Solr to repository communication. In this situation, you need to cancel the certificate window and then you can proceed. If you have no client certificates, you can use port 8443 without issues.

These topics discuss how to set up SSL for non-Solr communication with the repository, and the method that you use to configure SSL varies depending on whether you are configuring your production or test environments. For example, if you are setting up a production environment, use a proxy server to handle SSL communication. If you are configuring a test environment, you might want to edit your configuration files directly (and listen for SSL on a port that is not port 8443; for example, port 443).

If you are interested in setting up SSL and security for Solr, this is discussed in detail in Solr security [139].

  • Configuring SSL for a production environment [140] This scenario provides a set of forwarding rules that your proxy needs to meet and the corresponding configuration, with sample configuration files for Apache HTTP Server.
  • Configuring SSL for a test environment [141] If you are configuring SSL in a development or test environment, you can edit some configuration files to enable SSL.
Parent topic: Configuring the repository [7]

Configuring SSL for a production environment

This scenario provides a set of forwarding rules that your proxy needs to meet and the corresponding configuration, with sample configuration files for Apache HTTP Server.

Several proxy application servers are available to configure for SSL communications; for example, Apache HTTP Server, HAProxy or Nginx. Using a proxy server means that you do not have to edit your configuration files directly.

A client machine connects to the proxy server instead of the application server directly.  As a result, Alfresco Content Services and Alfresco Share must be configured to use an externally available URL, rather than an internal machine name. This external URL can then be passed to other parts of the Share application; for example, when Share creates a link to Alfresco Office Services for online editing.

For security reasons, configure your proxy to forward only requests to the resources that you want to expose to the outside world. In this scenario, the applications need to use the internal machine name when talking to each other but use the external name when creating links for the user.

  1. Set your proxy to forward the following URL extensions:

    /share  
    /share/*
    /alfresco/api/*/public/cmis/versions/*
    /alfresco/api/*/public/alfresco/versions/*
    /alfresco/api/cmis/versions/*
    /alfresco/service/api/server
    /alfresco/cmisatom/*
    /alfresco/service/cmis/*
  2. If you are using WebDAV, add these URL extensions to your proxy:

    /alfresco/webdav  
    /alfresco/webdav/*
  3. For Alfresco Office Services, add these URL extensions to your proxy:

    /_vti_inf.html
    /_vti_bin/*
    /alfresco/aos
    /alfresco/aos/*
    and for OPTIONS and PROPFIND requests:
    /
    /alfresco
    /alfresco/
  4. Block requests with these URL patterns:

    /share/*/proxy/alfresco/api/solr/*
    /share/-default-/proxy/alfresco/api/*
    The communication between Solr and Alfresco Content Services is, by default, protected by SSL. These patterns need to be explicitly blocked to protect the API endpoints.
  5. Edit the alfresco-global.properties file with these values:

    alfresco.context=alfresco
    alfresco.host=<external-proxy-host-name>
    alfresco.port=443
    alfresco.protocol=https
    share.context=share
    share.host=<external-proxy-host-name>
    share.port=443
    share.protocol=https
    opencmis.context.override=false
    opencmis.context.value=
    opencmis.servletpath.override=false
    opencmis.servletpath.value=
    opencmis.server.override=true
    opencmis.server.value=https://<external-proxy-host-name>

    Note: Port 443 and the HTTPS protocol settings must be enabled in alfresco-global.properties in Alfresco Content Services and Share. This is because if a proxy is serving https, and then proxying back to Tomcat using http, Tomcat determines that HTTP traffic is being served. This in turn informs the applications running in Tomcat that they are serving traffic over HTTP, and when Share or Alfresco Content Services internally generate URLs for page assets, they are generated with an http link (when the client browser expects https). Setting the following properties ensures that the applications generate URLs as HTTPS links:
    alfresco.port=443
    alfresco.protocol=https
    share.port=443
    share.protocol=https
  6. If you are using a proxy server other than Apache with AJP, follow these steps:
    1. Add this line to your alfresco-global.properties file:

      aos.baseUrlOverwrite=https://<external-proxy-host-name>/alfresco/aos
    2. Configure proxy redirect responses sent by the application server.

      The server behind the proxy uses the http schema because it is not aware of SSL. Here is an example of an nginx configuration:

      proxy_redirect http://example.com/alfresco/ https://example.com/alfresco/;
      Note: The proxy_redirect configuration shows the change from http to https.
  7. Use the following sample httpd.conf configuration file for Apache HTTP Server:

    # -------
    # General
    # -------
    
    ServerName  yourserver.example.com
    PidFile     /path/to/your/http.pid
    ErrorLog    /path/to/your/apache/log/error_log
    LogLevel    info
    
    LoadModule  unixd_module       /path/to/your/apache/modules/mod_unixd.so
    LoadModule  authn_core_module  /path/to/your/apache/modules/mod_authn_core.so
    LoadModule  authz_host_module  /path/to/your/apache/modules/mod_authz_host.so
    LoadModule  authz_core_module  /path/to/your/apache/modules/mod_authz_core.so
    LoadModule  rewrite_module     /path/to/your/apache/modules/mod_rewrite.so
    
    <IfModule unixd_module>
        User _www
        Group _www
    </IfModule>    
    
    # ------------------
    # Block API requests
    # ------------------
    
    LoadModule     rewrite_module      /path/to/your/apache/modules/mod_rewrite.so
    RewriteEngine  on
    RewriteBase    /
    RewriteRule    ^/share/(.*)/proxy/alfresco/api/solr/(.*)$   -   [F]
    RewriteRule    ^/share/-default-/proxy/alfresco/api/(.*)$   -   [F]
    
    
    # -------
    # Proxy
    # --------
    
    LoadModule     jk_module /path/to/your/apache/modules/mod_jk.so
    JkWorkersFile  /path/to/your/workers.properties
    JkLogFile      /path/to/your/apache/log/mod_jk.log
    JkLogLevel     info
    JkShmFile      /path/to/your/apache/log/jk-runtime-status  
    
    
    # -------
    # SSL
    # --------
    
    LoadModule ssl_module /path/to/your/apache/modules/mod_ssl.so
    Listen 443
    <VirtualHost *:443>
        SSLEngine           on
        SSLProtocol         all -SSLv2
        SSLCipherSuite      HIGH:!aNULL:!MD5
        SSLVerifyClient     none
        SSLCertificateFile  /path/to/your/certificate.pem
        ErrorLog            /path/to/your/apache/log/ssl_error_log
        LogLevel            warn
        JkMount /share alfresco-worker
        JkMount /share/* alfresco-worker
        JkMount /alfresco/webdav alfresco-worker
        JkMount /alfresco/webdav/* alfresco-worker
        JkMount / alfresco-worker
        JkMount /_vti_inf.html alfresco-worker
        JkMount /_vti_bin/* alfresco-worker
        JkMount /alfresco alfresco-worker
        JkMount /alfresco/ alfresco-worker
        JkMount /alfresco/aos alfresco-worker
        JkMount /alfresco/aos/* alfresco-worker
        JkMount /alfresco/images/* alfresco-worker 
        JkMount /alfresco/css/* alfresco-worker
        # Un-comment these lines for public API access
        # JkMount /alfresco/api/*/cmis/versions/* 
        # JkMount /alfresco/api/*/public/cmis/versions/* alfresco-worker
        # JkMount /alfresco/api/*/public/alfresco/versions/* alfresco-worker
        # JkMount /alfresco/service/api/server alfresco-worker     
        # JkMount /alfresco/cmisatom/* alfresco-worker     
        # JkMount  /alfresco/service/cmis/* alfresco-worker
        # JkMount /alfresco/api/cmis/versions/* alfresco-worker
        # Un-comment these lines for Desktop Sync
        # JkMount /alfresco/api/*/private/alfresco/versions/* alfresco-worker
    </VirtualHost>
    This configuration file has been tested with Apache httpd 2.4. Replace the values in bold font with the file names and directories that are relevant to your system.
  8. Use the following sample worker.properties configuration file for Apache HTTP Server:

    worker.list=alfresco-worker
    worker.alfresco-worker.port=8009
    worker.alfresco-worker.host=your-internal-alfresco-host-name
    worker.alfresco-worker.type=ajp13
    worker.alfresco-worker.lbfactor=1

    In this example, Apache is configured to accept strong encryption only. Adapt SSLCipherSuite if this causes you problems.

  9. (Optional) Only required if configuring Share. Add and set the -Dhttp.secured.session property to be true and the -Dcookies.sameSite property to be None. These parameters should be added to the JAVA_OPTS environmental variable referenced by the Share application and are required at Share start up time.

    When using chromium based browsers (Google Chrome or the latest releases of Microsoft Edge) and Share with either the Salesforce Connector or the SAML SSO module, the share web must be secured using a https (SSL/TLS) certificate.

    -Dhttp.secured.session=true
    -Dcookies.sameSite=None
  10. (Optional) Only required if configuring Share. Add and set the -Dhttp.secured.session property to be true to the JAVA_OPTS corresponding to the JVM of the Tomcat instance when deploying Share.

    This property secures the JESSIONID cookie. It is not enabled by default because it would break HTTP-only (non-secure) environments.

    -Dhttp.secured.session=true

    For more on how to set the JAVA_OPTS for Tomcat deployments see Controlling JVM system properties [112].

Parent topic: Secure Sockets Layer (SSL) and the repository [113]

Configuring SSL for a test environment

If you are configuring SSL in a development or test environment, you can edit some configuration files to enable SSL.

Note: These instructions should only be used for configuring a test environment. If you are configuring a production environment, you should use a proxy server to handle all SSL communication. See Configuring SSL for a production environment [142] for more information.

Here is an example of how to configure Tomcat 8.5 to work with HTTPS for your development or test system. At this point, we assume that:
  • You've already set up Alfresco Content Services with Tomcat 8.5, running HTTP on port 8080.
    • Follow the steps in Installing using distribution zip [143] if you haven't already done so.
  • You may have already setup HTTPS on port 8443 for Alfresco Content Services to communicate with Alfresco Search Services.
    • See Installing and configuring Alfresco Search Services [144] to learn more about the Search Services setup.
  • In our documentation, such as Secure Sockets Layer (SSL) and the repository [113], port 8443 is generally provided as an example when setting up secure HTTPS connections. This is recommended only for use with Search Services as it should use real client certificates, where certificateVerification="required". For this development or test setup, we won't necessarily use client certificates, so we'll setup a separate HTTPS connector on a different port. You can have multiple connectors in Tomcat that use HTTPS and different ports.
  1. Copy the alf_data/keystore folder from the distribution zip to <CATALINA_BASE>/alf_data/keystore.

    See Installing the Alfresco WARs [145] to review the structure of the distribution zip.

    In the alf_data/keystore folder, you'll find sample self-signed generated certificates that you can use to configure an HTTPS connection for development or test purpose.

  2. Open your Tomcat settings file <CATALINA_BASE>/conf/settings.xml and add an entry for a new connector:

    <Connector port="7070" 
            protocol="org.apache.coyote.http11.Http11Nio2Protocol"
            sslImplementationName="org.apache.tomcat.util.net.jsse.JSSEImplementation"
            maxThreads="150"
            SSLEnabled="true">
        <SSLHostConfig certificateVerification="none" 
            truststoreFile="<CATALINA_BASE>/alf_data/keystore/ssl.truststore" 
            truststorePassword="kT9X6oe68t" 
            truststoreType="JCEKS" >
        <Certificate certificateKeystoreFile="<CATALINA_BASE>/alf_data/keystore/ssl.keystore"
            certificateKeystorePassword="kT9X6oe68t"
            certificateKeystoreType="JCEKS" />
        </SSLHostConfig>
    </Connector>
  3. Replace <CATALINA_BASE>/alf_data/keystore/ with the actual path to those certificates.
  4. Change the password, if required.

    You can find the password in the .properties files from the sample alf_data/keystore folder.

  5. Replace the port 7070 with the one that you want to use.

    Avoid using port 8443 as that is generally configured for Search Services.

    1. On Linux systems, if you want to use the default HTTPS port 443, you can edit the server iptables configuration to specify the redirection:

      # Redirect external packets
      -A PREROUTING -j NAT-Port-Redirect
                                      
      # redirect http traffic
      -A NAT-Port-Redirect -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
      # redirect https traffic
      -A NAT-Port-Redirect -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 7070

      However, you also need to add proxyPort="443" to the Connector xml tag (from above) as shown:

      <Connector port="7070" 
              proxyPort="443"
      ...

      Note: If you use the 443 redirect, you'll need to override the value for Alfresco Office Services in alfresco-global.properties:
      aos.baseUrlOverwrite=https://localhost/alfresco/aos
    2. On Windows, you can just use port 443 without any proxy.

    Note that we use the certificateVerification="none" setting. See the official Tomcat 8.5 page [146] to learn more about the HTTPS security settings for the connector.

    If you're using an older version of Tomcat (which we don't recommend and don't support), the security settings are specified in a different format. See example for Tomcat 7.0 [147].

  6. Edit alfresco-global.properties and replace the relevant values for your case:

    dir.keystore=${dir.root}/keystore
    
    alfresco.context=alfresco
    alfresco.protocol=https
    alfresco.host=localhost
    alfresco.port=7070
    
    share.host=localhost
    share.port=7070
    share.context=share
    share.protocol=https
    
    aos.baseUrlOverwrite=https://localhost:7070/alfresco/aos
  7. (Optional) Only required if configuring Share. Add and set the -Dhttp.secured.session property to be true and the -Dcookies.sameSite property to be None. These parameters should be added to the JAVA_OPTS environmental variable referenced by the Share application and are required at Share start up time.

    When using chromium based browsers (Google Chrome or the latest releases of Microsoft Edge) and Share with either the Salesforce Connector or the SAML SSO module, the share web must be secured using a https (SSL/TLS) certificate.

    -Dhttp.secured.session=true
    -Dcookies.sameSite=None
  8. (Optional) Only required if configuring Share. Add and set the -Dhttp.secured.session property to be true to the JAVA_OPTS corresponding to the JVM of the Tomcat instance when deploying Share.

    This property secures the JESSIONID cookie. It is not enabled by default because it would break HTTP-only (non-secure) environments.

    -Dhttp.secured.session=true

    For more on how to set the JAVA_OPTS for Tomcat deployments see Controlling JVM system properties [112].

  9. Restart your Tomcat server.

    Access Alfresco Content Services and Alfresco Share using HTTPS:

    • https://localhost:7070/alfresco
    • https://localhost:7070/share

    If you installed the Alfresco Office Services AMP, you'll also be able to edit files from your Microsoft Office applications.

    See Considerations when using Alfresco Office Services [148] and AOS registry settings [149] for more details.

Parent topic: Secure Sockets Layer (SSL) and the repository [113]

Configuring the repository cache

The repository provides in-memory caches. These caches are transaction safe and can be clustered. Caches greatly improve repository performance but they use Java heap memory.
Tuning the caches in a wrong way may lead to out of memory issues. The optimal settings to use on the caches depend on your usage and the amount of memory available to your server.
An important indicator that you need to tune or increase your caches is when you see a warning message in your alfresco.log file indicating that some specific caches are full, for example:
2016-04-26 17:51:37,127 WARN [org.alfresco.repo.cache.TransactionalCache.org.alfresco.cache.node.nodesTransactionalCache] 
[http-apr-22211-exec-42] Transactional update cache 'org.alfresco.cache.node.nodesTransactionalCache' is full (125000).
From Alfresco Content Services version 5.0 and later, the caches can be configured by setting the cache properties in the alfresco-global.properties file. In both clustered and non-clustered cases, caching is configured and used in the same unified way.
Note: It is advisable not to change the cache values unless you have performance issues.
  1. Download the tx-cache-context.xml [150] file and caches.properties [151] file.

    The caches.properties file lists a series of properties for configuring a cache. The cache properties are used for both clustered and non-clustered configurations.

  2. Check your alfresco.log file to locate the caches shown in the warning message.

    For example, if you see the following warning message in alfresco.log:

    2016-04-26 17:51:37,127 WARN [org.alfresco.repo.cache.TransactionalCache.org.alfresco.cache.node.nodesTransactionalCache] 
    [http-apr-22211-exec-42] Transactional update cache 'org.alfresco.cache.node.nodesTransactionalCache' is full (125000).

    search for the bean that matches the class org.alfresco.repo.cache.TransactionalCache in the tx-cache-context.xml file.

    Here's an example of the cache:

    <!-- The transactional cache for Nodes -->
       
       <bean name="node.nodesCache" class="org.alfresco.repo.cache.TransactionalCache">
          <property name="sharedCache">
             <ref bean="node.nodesSharedCache" />
          </property>
          <property name="name">
             <value>org.alfresco.cache.node.nodesTransactionalCache</value>
          </property>
          <property name="maxCacheSize" value="${cache.node.nodesSharedCache.tx.maxItems}" />
          <property name="mutable" value="true" />
          <property name="allowEqualsChecks" value="true" />
          <property name="disableSharedCache" value="${system.cache.disableMutableSharedCaches}" />
          <property name="cacheStats" ref="cacheStatistics"/>
          <property name="cacheStatsEnabled" value="${cache.node.nodesSharedCache.tx.statsEnabled}"/>
       </bean>

    Note: As shown above, the nodesCache cache uses variables with the cache.node.nodesSharedCache.* syntax, for example, cache.node.nodesSharedCache.tx.maxItems.
    The caches.properties file uses properties that align with the cache.node.nodesSharedCache syntax.
    cache.node.nodesSharedCache.tx.maxItems=125000
    cache.node.nodesSharedCache.tx.statsEnabled=${caches.tx.statsEnabled}
    cache.node.nodesSharedCache.maxItems=250000
    cache.node.nodesSharedCache.timeToLiveSeconds=300
    cache.node.nodesSharedCache.maxIdleSeconds=0
    cache.node.nodesSharedCache.cluster.type=invalidating
    cache.node.nodesSharedCache.backup-count=1
    cache.node.nodesSharedCache.eviction-policy=LRU
    cache.node.nodesSharedCache.merge-policy=
    cache.node.nodesSharedCache.readBackupData=false
  3. Add the *.tx.maxItems and *.maxItems properties to the alfresco-global.properties file.
  4. Increase the value of the *.tx.maxItems and *.maxItems properties for the cache you want to tune.

    For example, in the alfresco-global.properties file change the default setting from:

    #cache.node.nodesSharedCache.tx.maxItems=125000
    #cache.node.nodesSharedCache.maxItems=250000
    to
    cache.node.nodesSharedCache.tx.maxItems=250000
    cache.node.nodesSharedCache.maxItems=2500000
    Note: Make sure that:
    • cache.node.nodesSharedCache.tx.maxItems is not be greater than cache.node.nodesSharedCache.maxItems, and
    • cache.node.nodesSharedCache.maxItems is greater than or equal to cache.node.nodesSharedCache.tx.maxItems.
  5. Restart Alfresco Content Services to apply the configuration changes.
  • Individual cache settings [152]Alfresco Content Services uses cache properties for both clustered and non-clustered configurations.
Parent topic: Configuring the repository [7]

Individual cache settings

Alfresco Content Services uses cache properties for both clustered and non-clustered configurations.

To configure a cache, specify a series of properties where the property names begin with the cache name as specified in the Spring cache definition. For example, if the cache name is cache.myCache, then the properties should all start with cache.myCache.

For example:
cache.myCache.maxItems=20000
cache.myCache.timeToLiveSeconds=0 

The following properties are supported by both clustered and non-clustered (for example, cluster.type=local) caches:

maxItems
The maxItems attribute is the maximum size a cache can reach. Use zero to set to Integer.MAX_VALUE.
eviction-policy
When the eviction-policy attribute is set to NONE, the cache will not have a bounded capacity and the maxItems attribute will not apply. Any other value will cause the maxItems attribute to be enabled.
Also, use LRU (Least Recently Used) or LFU ( Least Frequently Used) algorithm with clustered caches so that the value is compatible in both modes (required during startup). Note that the actual value (for example, LRU) is of no consequence for the non-clustered caches and eviction is performed as for any Google Guava CacheBuilder created cache.
timeToLiveSeconds
The timeToLiveSeconds attribute specifies that the cache items will expire once this time has passed after creation.
maxIdleSeconds
The maxIdleSeconds attribute specifies that the cache items will expire when not accessed for this period.
tx.maxItems
The overflowToDisk attribute is not a fully supported property as TransactionalCache is a separate entity but where a TransactionalCache bean has been defined, use {cacheName}.tx.maxItems to specify its capacity.

The following properties are available for fully-distributed caches and are not supported by the other cache types:

cluster.type
The cluster.type attribute determines what type of cache is created when clustering is available. The acceptable values are:
  • fully-distributed: Uses a Hazelcast IMap backed distributed cache. The cache values can be stored on any member of the cluster, hence the term fully-distributed.
  • local: Always use a non-clustered cache. The cache values will not reflect updates made to the equivalent cache on another cluster member.
  • invalidating: Uses a local cache, but when an update or a removal is issued to the cache, an invalidation message is broadcast to all members of the cluster and those members will remove the value from their cache. This value is useful where frequent reads are causing performance problems (due to remote reads) or where values are non-serializable.
backup-count:
The backup-count attribute controls how many cluster members should hold a backup of the key/value pair.
merge-policy
The merge-policy attribute determines how Hazelcast recovers from split brain syndrome, for example:
  • com.hazelcast.map.merge.PassThroughMergePolicy
  • com.hazelcast.map.merge.PutIfAbsentMapMergePolicy (the default)
  • com.hazelcast.map.merge.HigherHitsMapMergePolicy
  • com.hazelcast.map.merge.LatestUpdateMapMergePolicy
See Network Partitioning (Split-Brain Syndrome) [153] for more information.
Parent topic: Configuring the repository cache [114]

Adding a MIME type

Use this information to add a MIME type definition.

The MIME type default definitions are in the mimetype-map.xml [154] file.
  1. Copy the default definition file and place it in a file called <extension>/mimetype/mimetypes-extension-map.xml.
  2. Modify the inserted MIME type to match your requirements. For example:

    <alfresco-config area="mimetype-map">
    
       <config evaluator="string-compare" condition="Mimetype Map">
          <mimetypes>
    
             <mimetype mimetype="application/xxx" display="My Example Mimetype">
                <extension>ex</extension>
             </mimetype>
    
          </mimetypes>
       </config>
    
    </alfresco-config>          
            

    An example file is provided in <extension>/mimetype/mimetypes-extension-map.xml.sample. You can include multiple files and each one is loaded automatically.

  3. Save the file.
  4. Restart Alfresco Content Services.
The MIME type is available in the repository.
Parent topic: Configuring the repository [7]

Configuring metadata extraction

Metadata extraction automatically extracts metadata information from inbound and/or updated content and updates the corresponding nodes properties with the metadata values.

Metadata extractors offer server-side extraction of values from added or updated content.
  1. Download the content-services-context.xml [155] file.
  2. Copy the file to <extension> and save it with the name custom-repository-context.xml.

    This file contains definitions of the default set of extractors.

  3. Declare a new extractor in the <extension>/custom-repository-context.xml file.

    The following example shows a new extractor written in class com.company.MyExtracter:

    <bean id="com.company.MyExtracter" class="com.company.MyExtracter" parent="baseMetadataExtracter" />

  4. Save the file and then restart the Alfresco Content Services server.
Parent topic: Configuring the repository [7]

About aspects

Aspects allow you to add functionality to existing content types.

Aspects can have properties that, when added, can enhance the content types. You can also attach behaviors and workflows to aspects. The following table lists the aspects available.

Aspects Description Changes in Behavior/Share Interface
Classifiable Enables categories to be assigned to a content item. For example, content items can be categorized under Languages, Region, Software Document Classification, and so on. Adding Classifiable aspect displays an additional Categories property in the document properties.
Complianceable This aspect is no longer valid. For compliance-related behavior, use the Alfresco Records Management module.
Dublin Core Enables metadata (such as publisher, contributor, identifier) to be added to a content item. Adding Dublin Core aspect displays the following additional metadata properties in the document properties:
  • Publisher
  • Contributor
  • Type
  • Identifier
  • Source
  • Coverage
  • Rights
  • Subject
Effectivity This aspect is no longer valid. For compliance-related behavior, use the Alfresco Records Management.
Summarizable Enables addition of a brief description about the content item. Adding Summarizable aspect displays additional Summary property in the document properties.
Versionable Enables versioning of a content item each time it is edited (checked out and checked back in or updated). In Alfresco Share, content items are versionable by default. Adding Versionable aspect displays the version history of a content item in the Version History.
Emailed Captures email-related information of the content item, if it is received as an email attachment. Adding Emailed aspect displays additional properties (such as Originator, Addressee, Addresses, Sent Date and Subject) in the document properties.
Inline Editable Enables content items to be edited directly in Alfresco Share. Adding Inline Editable aspect displays the Edit in Alfresco Share link in the document properties.
Taggable Enables tagging of content items using keywords.

In Alfresco Share, content items are taggable by default.

Adding Taggable aspect displays the tagged keywords in the Tags section. You can also search for content items in the Document Library using the keywords displayed.
Geographic Enables a content item to be geographically tagged using latitude and longitude information. The location of content item is displayed as a marker on Google Maps. Click on the marker to display the Document Details page for that content item. Adding Geographic aspect displays additional Latitude and Longitude properties on the Edit Properties page. Also, the View on Google Maps link is displayed in the Document Actions.
EXIF Enables capturing and viewing of additional image-related metadata of a content item.
Note: This aspect is automatically applied to an image content item.
Adding EXIF aspect displays additional information (such as Camera Model, Camera Software, Resolution Unit) about the image in the document properties.
Audio Enables capturing and viewing of additional audio-related metadata of a content item.
Note: This aspect is automatically applied to an audio content item.
Adding Audio aspect displays additional information (such as Album, Artist, Composer, Track Number) about the audio file in the document properties.
Index Control Enables control over how a content item is indexed. Adding Index Control aspect displays additional Is Indexed and Is Content Indexed in the document properties.
Parent topic: Configuring the repository [7]

About versioning

Versioning allows you to track content history. By default, when content is created in the repository, versioning is not applied. When creating content, users must specify versionable on a case-by-case basis.

When content is versionable, the version history is started. The first version of the content is the content that exists at the time of versioning. If you want all content to be versionable at the time of creation, you can modify the definition of that content type in the data dictionary. The definition must include the mandatory aspect versionable.

By default, all versionable content has auto-version set to on. As a result, when content is updated, the version number is updated.

The auto-version capability can be disabled on a content-by-content basis in the user interface. If you want auto-versioning to be off for all content, modify the definition of that content type in the data dictionary.

Note: Any properties that you set on a file are saved with the current version of a file, and written to the Version History after a major update; for example, when a new file is uploaded. This means that if you save properties in version 1.0, they are saved in the Version History of version 1.1.
To change this behavior, you can set cm:autoVersionOnUpdateProps to true. See VersionHistoryNode API [156] for more information.
  • Making all content versionable [157] Edit the contentModel.xml file to enable versioning for all content in the repository.
  • Disabling the auto-versioning feature [158] Use this information to disable auto-versioning for all versionable content in the repository.
Parent topic: Configuring the repository [7]

Making all content versionable

Edit the contentModel.xml file to enable versioning for all content in the repository.

  1. Download the contentModel.xml [159] file.
  2. Create a $TOMCAT_HOME/shared/classes/alfresco/extension/models directory.
  3. In the contentModel.xml file, search for <type name="cm:content">, and immediately after the closing </properties> tag, insert the following lines to make the content versionable:

    <mandatory-aspects>       
        <aspect>cm:versionable</aspect>    
    </mandatory-aspects>
  4. Copy the edited contentModel.xml file to the $TOMCAT_HOME/shared/classes/alfresco/extension/models directory.
  5. Add a Spring context file to $TOMCAT_HOME/shared/classes/alfresco/extension with the following lines:

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
    
    <beans>
        <bean parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
            <property name="models">
                <list>
                    <value>alfresco/extension/models/contentModel.xml</value>
                </list>
            </property>
        </bean>
    </beans>
  6. Save the file.
  7. Restart the Alfresco Content Services server.
Uploaded content will then have the cm:versionable aspect.
Parent topic: About versioning [118]

Disabling the auto-versioning feature

Use this information to disable auto-versioning for all versionable content in the repository.

The auto-versioning feature is controlled with the version.store.enableAutoVersioning property, which is set to true by default.
  1. Open the alfresco-global.properties file.
  2. Add the following property:

    version.store.enableAutoVersioning=false

    When this property is set to false, the VersionableAspect will not respond to any events; even if the aspect is present, it will not create versions.

    Note: The behavior of versioning may also be affected by the version.store.enableAutoVersionOnUpdateProps property, which is set to false by default. This means that the version history is not incremented when changing properties in Edit Properties in Share. If you have set version.store.enableAutoVersionOnUpdateProps=true it will enable versioning when properties are changed.
  3. Save the global properties file.
  4. Restart the Alfresco Content Services server.
Parent topic: About versioning [118]

Setting up database replication

Replication allows you to continuously copy a database to a different server.

To enable replication, you set one server (the slave) to take all its updates from the other server (the master). During replication, no data is actually copied. It is the SQL statements that manipulate the data that is copied.

All statements that change the master database are stored in the master's binary logs. The slave reads these logs and repeats the statements on its own database. The databases will not necessarily be exactly synchronized. Even with identical hardware, if the database is actually in use, the slave will always be behind the master. The amount by which the slave is behind the master depends on factors such as network bandwidth and geographic location. The other server can be on the same computer or on a different computer. The effect of replication is to allow you to have a nearly current standby server.

Using more than one server allows you to share the read load. You can use two slaves. If one of the three servers fails, you can use one server for service while another server can copy to the failed server. The slaves need not be running continuously. When they are restarted, they catch up. With one or more slaves you can stop the slave server to use a traditional backup method on its data files.

Each slave uses as much space as the master (unless you choose not to replicate some tables) and must do as much write work as the master does to keep up with the write rate. Do not be without at least one slave or comparable solution if high reliability matters to you.

Note: Replication is not another form of back up. You must do normal backups as well as replication. If a user mistypes a DELETE statement on the master, the deletion is faithfully reproduced on the slave.

  • Setting up MySQL replication [160] Follow these replication steps for the MySQL database.
Parent topic: Configuring the repository [7]

Setting up MySQL replication

Follow these replication steps for the MySQL database.

  1. Open a MySQL command prompt on the master server.
  2. Grant the slave permission to replicate:

    GRANT REPLICATION SLAVE ON *.* TO <slave_user> IDENTIFIED BY '<slave_password>'
  3. If the master is not using the binary update log, add the following lines to my.cnf (Linux) or my.ini (Windows) configuration file on the master, and restart the server:

    [mysqld]
    log-bin
    server-id=1
    Note: By convention, server-id for the master is usually server-id 1, and any slaves from 2 onwards, although you can change this. If the master is already using the binary update log, either note the offset at the moment of the backup (the next step), or use the RESET MASTER statement to clear all binary logs and immediately begin the backup. You might want to make a copy of the binary logs before doing this if you need to use the binary logs to restore from backup.
  4. Make a backup of the database.

    This will be used to start the slave server. You can skip this step if you use the LOAD DATA FROM MASTER statement, but first review the following comments about locking the master.

  5. Add the following to the configuration file on the slave:

    master-host=master-hostname
    master-user=slave-user
    master-password=slave-password
    server-id=2

    The slave user and slave password are those to which you set when you granted REPLICATION SLAVE permission on the master. The server-id must be a unique number, different to the master or any other slaves in the system. There are also two other options: master-port, used if the master is running on a non-standard port (3306 is default), and master-connect-retry, a time in seconds for the slave to attempt to reconnect if the master goes down. The default is 60 seconds.

    Restore the data from the master, either as you would normally restore a backup or with the statement LOAD DATA FROM MASTER. The latter will lock the master for the duration of the operation, which could be quite lengthy, so you might not be able to spare the downtime.

Parent topic: Setting up database replication [119]

Customizing content transformations

This task describes how to customize content transformations.
  1. Download the content-services-context.xml [155]file.
  2. Paste this file into the <extension> directory.
  3. Open the file.

    Transformers start below the comment:

    <!-- Content Transformations -->
  4. Locate the bean containing a transformer that is most similar to the transformer that you want to add.

    (It is unlikely that you would want to modify an existing transformer.)

  5. Delete every pair of <bean> </bean> tags except the pair containing the similar transformer.
  6. Rename and modify the bean.
  7. Save the file.

    If you save the file in the <extension> directory, the filename must end with ‑context.xml.

Parent topic: Configuring the repository [7]

Controlling indexes

You can use the cm:indexControl aspect to control the indexing of content in Alfresco Share. Using this aspect you can choose to disable repository-wide indexing. This can prove useful in certain situations, such as bulk loading.
The cm:indexControl aspect enables you to control indexing for the nodes to which it is applied. The aspect exposes the following two properties:
  • cm:isIndexed ((content + metadata)): This property controls whether or not the node is indexed.
  • cm:isContentIndexed: This property controls whether or not the node content (binary) is indexed. Setting this to false inhibits full text indexing of the document binary.

The following table shows the possible combinations of settings along with the behavior for each case:

cm:isIndexed cm:isContentIndexed Result
True True Metadata is indexed. Content is indexed.
True False Metadata is indexed. Content is not indexed.
False True No indexing at all.
False False No indexing at all.

For more information on working with aspects, see Managing aspects [161].

Parent topic: Configuring the repository [7]

Deferring the start of cron based jobs

You can configure alfresco-global.properties and dev-log4j.properties to implement a global delay to cron based jobs; for example, until after the server has fully started.
You can set a delay for all cron based jobs; in other words, jobs that use the org.alfresco.util.CronTriggerBean class. The default value is 10 minutes.
  1. Shut down the Alfresco Content Services server.
  2. Locate and edit the alfresco-global.properties file in the <classpathRoot> directory.

    For information about modifying the alfresco-global.properties file, see Modifying the global properties file [162].

  3. Add two configurations to the alfresco-global.properties file, where the number in startDelayMins= is the number of minutes you want to delay your job. In this example, the delay length is 2 minutes:

    activities.feed.cleaner.cronExpression=0/1 * * * * ?
    activities.feed.cleaner.startDelayMins=2
  4. Extend the dev-log4j.properties with a new configuration in the <classpathRoot>/alfresco/extension directory:

    log4j.logger.org.alfresco.repo.activities.feed.cleanup.FeedCleaner=trace

    This file will override subsystem settings that are not applicable in alfresco-global.properties. For more information about log4j extensions, see log4j.properties file [163].

  5. Start the server.

    After the specified interval, the FeedCleaner trace logs will be generated. In the example, the logs will start after two minutes.

Parent topic: Configuring the repository [7]

CORS configuration

Cross Origin Resource Sharing (CORS) can be enabled and configured in the alfresco-global.properties file.
CORS is disabled by default. To enable it, set the following property to true:
cors.enabled=
Important: This feature is only available when using Tomcat.

If CORS is enabled then CORS requests can be made to all endpoints under /alfresco

Use the following properties to configure CORS:

Property Description
cors.allowed.origins Set the hosts allowed in cross origin requests.

By default, the value is empty, which forbids clients hosted on any server to access the resources.

You can specify a host, for example, http://www.example.org:8080, which will only allow requests from this host.

A * value permits all clients hosted on any server to access the resources.

It is recommended to restrict this setting to origins within your organization.

cors.allowed.methods Set which HTTP requests are permitted. Possible values should be comma separated and include:
  • DELETE
  • GET
  • HEAD
  • OPTIONS
  • POST
  • PUT
cors.allowed.headers Set which headers are permitted in request headers, manually or programmatically in addition to the ones set by the user agent. Values should be comma separated and include:
  • Accept
  • Access-Control-Request-Headers
  • Access-Control-Request-Method
  • Authorization
  • Cache-Control
  • Content-Type
  • Origin
  • X-CSRF-Token
  • X-Requested-With
cors.exposed.headers Set which headers are whitelisted for the client to access from the server.
cors.support.credentials Set whether HTTP cookie and HTTP authentication-based credentials are allowed.

This is a boolean value.

cors.preflight.maxage Set the maximum time for caching a preflight request.

Preflighted requests use the OPTIONS method to verify resource availability and then request it.

This property is expressed in minutes.

The following is an example configuration for the alfresco-global.properties file:

cors.enabled=true
cors.allowed.origins=http://alfresco.com:8080
cors.allowed.methods=GET,POST,PUT
cors.allowed.headers=Authorization,Content-Type,Cache-Control,X-Requested-With,X-CSRF-Token
cors.exposed.headers=Access-Control-Allow-Origin,Access-Control-Allow-Credentials
cors.support.credentials=true
cors.preflight.maxage=10
Parent topic: Configuring the repository [7]

Configuring file servers

The File Server subsystem allows access to the Alfresco Content Services data stores through the FTP protocol. This allows you to browse to the repository using an FTP client.

Note: We recommend that you implement an allowed authentication mechanism relative to the file server you are using. For more information on the different types of authentication subsystems and their use, see Authentication subsystem types [164].

As with other Alfresco Content Services subsystems, the File Server subsystem exposes all of its configuration options as properties that can be controlled through a JMX interface or the global properties file.

  • Enabling file servers [165]Alfresco Content Services supports access using the FTP protocol. Use File Servers in the Admin Console to enable, configure, and disable these services.
  • Configuring the FTP file server [166] Use this information to configure the FTP file server.
Parent topic: Configuring [28]

Enabling file servers

Alfresco Content Services supports access using the FTP protocol. Use File Servers in the Admin Console to enable, configure, and disable these services.

  1. Open the Admin Console.
  2. In the Virtual File Systems section, click File Servers.

    You see the File Servers page.

  3. Set the File Systems properties:

    File Systems property Example setting What is it?
    File System Name Alfresco The name given to the file system when using WebDAV, or FTP.
  4. Set the FTP properties:

    FTP property Example setting What is it?
    FTP Enabled Yes This enables or disables the FTP server. This is disabled by default.
    Port 2121 This specifies the port on which the FTP server listens for connections.
    Dataport From   This specifies the lower limit of the range of data ports.
    Dataport To   This specifies the upper limit of the range of data ports.
  5. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

Parent topic: Configuring file servers [8]
Related tasks
Launching the Admin Console [167]

Configuring the FTP file server

Use this information to configure the FTP file server.

For more information about configuring the FTP file server using the Admin Console, see Enabling file servers [165].

  • FTP file server properties [168] The following properties can be configured for the FTP server.
  • FTP advanced Spring overrides [169] The FTP server beans are declared in the file-servers-context.xml file.
Parent topic: Configuring file servers [8]

FTP file server properties

The following properties can be configured for the FTP server.
ftp.enabled
Enables or disables the FTP server.
ftp.port
Specifies the port that the FTP server listens for incoming connections on. Defaults to port 21. On some platforms ports below 1024 require the server to be run under a privileged account.
ftp.bindto
Specifies the network adapter to bind with. If the network adapter is not specified, the server will bind to all the available adapters/addresses.
ftp.sessionDebug
Enable debug output by setting the SSL debug flag using ftp.sessionDebug=SSL, and also by enabling the log4j.logger.org.alfresco.fileserver=debug log4j output.
ftp.dataPortFrom
Limits the data ports to a specific range of ports. This property sets the lower limit.
ftp.dataPortTo
Limits the data ports to a specific range of ports. This property sets the upper limit.
ftp.keyStore
Specifies the path to the keystore file for FTPS support.
ftp.keyStoreType
Specifies the file type of the keystore file. The default is JKS.
ftp.keyStorePassphrase
Specifies the passphrase for the keystore file.
ftp.trustStore
Specifies the path to the truststore file for FTPS support.
ftp.trustStoreType
Specifies the file type of the truststore file. The default is JKS.
ftp.trustStorePassphrase
Specifies the passphrase for the truststore file.
ftp.requireSecureSession
Specifies whether only secure FTPS sessions will be allowed to log in to the FTP server. To force all connections to use FTPS, set ftp.requireSecureSession=true.
ftp.sslEngineDebug
Specifies the FTP session debug flags, which enables additional debug output from the Java SSLEngine class. The list of values can be STATE, RXDATA, TXDATA, DUMPDATA, SEARCH, INFO, FILE, FILEIO, ERROR, PKTTYPE, TIMING, DATAPORT, DIRECTORY, SSL.
ftp.externalAddress
Specifies the FTP external IP address - the IP address as seen by FTP clients. This is useful for NAT or proxy setup where the proxy or NAT device can't track FTP sessions by itself, either because it doesn't know FTP or because the FTP session is encrypted (this includes most load-balancing scenarios).

If you have IPv6 enabled on your system, Alfresco Content Services automatically uses IPv6.

The FTPS support runs over the same socket as normal connections; the connection is switched into SSL mode at the request of the client, usually before the user name and password is sent. The client can switch the socket back to plain text mode using the CCC command.

The ftp.keyStore, ftp.trustStore, and respective ftp.keyStorePassphrase and ftp.trustStorePassphrase values must all be specified to enable FTPS support. Only explicit FTP over SSL/TLS mode is supported. Encrypted data sessions are not supported.

To setup the keystore and truststore files, follow the instructions from the Java6 JSSE Reference Guide. This will provide the values required for the ftp.keyStore, ftp.trustStore, ftp.keyStorePassphrase and ftp.trustStorePassphrase values.

Parent topic: Configuring the FTP file server [166]

FTP advanced Spring overrides

The FTP server beans are declared in the file-servers-context.xml file.
Using the subsystem extension classpath mechanism, site specific customization of these default values can be placed in a Spring bean file. Create a file called custom-file-servers-context.xml and place it in a folder with the path <extension>\subsystems\fileServers\default\default\custom-file-servers-context.xml (note that the default\default part of the path is intentional).

The following properties can be overridden on the ftpServerConfig bean.

bindTo
Specifies the address the FTP server binds to, if not specified the server will bind to all available addresses.
  1. The debugFlags property enables debug output levels for FTP server debugging. The value should be a comma-separated list of flag names from the following table:
    Flag Description
    State Session state changes
    Search Folder searches
    Info File information requests
    File File open/close
    FileIO File read/write
    Error Errors
    Pkttype Received packet type
    Timing Time packet processing
    Dataport Data port
    Directory Directory commands
  2. Configure logging levels for the FTP server in $ALF_HOME/tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties using:

    log4j.logger.org.alfresco.ftp.protocol=debug
    log4j.logger.org.alfresco.ftp.server=debug
Parent topic: Configuring the FTP file server [166]

Configuring email

Use this information to configure email services, including inbound and outbound email, subscriptions, and email clients.
  • Configuring inbound and outbound email [170] The email subsystem allows you to configure the outbound and inbound SMTP email settings to interact with Alfresco Content Services.
  • Configuring the Activities Feed [55] Activities Feed emails are sent from Alfresco Content Services to all users, summarizing the activities they see in their My Activities dashlet. Users will not see these email unless the Activities Feed is enabled. Emails include activities in all sites they are a member of, and by people they are following. In the Admin Console, you can set the frequency with which these emails are sent, the maximum number of activities they contain, and the maximum age of the activities.
  • Enabling the Subscription Service [66]Subscriptions in the Admin Console allows you to enable or disable the Follow feature for users to follow each other in Alfresco Share. Users can keep track of other users activities by choosing to follow them.
  • Configuring the email client with IMAP [171] IMAP protocol support allows email applications that support IMAP (including Outlook, Apple Mail, Thunderbird, and so on) to connect to and interact with Alfresco Content Services repositories.
Parent topic: Configuring [28]

Configuring inbound and outbound email

The email subsystem allows you to configure the outbound and inbound SMTP email settings to interact with Alfresco Content Services.

There are two methods of running email server:

  • Running the email server process in the same JVM context as the repository
  • Running the email server remotely and communicate with the repository using Remote Method Invocation (RMI)
  • Managing inbound emails [172] Set these inbound email properties in the Admin Console to activate sending and receiving site invites, and also for receiving activity notification emails.
  • Inbound SMTP configuration properties [173] The Inbound SMTP email subsystem type allows you to configure the behavior of the email server and service.
  • Managing outbound emails [174] Set these outbound email properties in the Admin Console to manage all emails sent from Alfresco Content Services to users such as site invitations, activity notifications, and workflow tasks.
  • Outbound SMTP configuration properties [175] The following properties can be configured for the Outbound SMTP subsystem type.
  • Handling messages by target node type [176] Default behaviors for incoming email to different types of referenced nodes.
  • Groups and permissions for email [177] An email arriving at the Alfresco Content Services email server is unauthenticated. An authentication group, EMAIL_CONTRIBUTORS, must exist to allow permissions to be handled at a high level by the administrator.
Parent topic: Configuring email [9]

Managing inbound emails

Set these inbound email properties in the Admin Console to activate sending and receiving site invites, and also for receiving activity notification emails.
  1. Open the Admin Console.
  2. In the Email Services section, click Inbound Email.

    You see the Inbound Email page.

  3. Set the email properties:

    Inbound Email property Example setting What is it?
    Enabled No Use check box to enable or disable the inbound email service. By default, it is not enabled.
    Unknown User anonymous This is the user name to authenticate as when the sender address is not recognized.
    Allowed Senders .* To allow senders, enter a comma-separated list of email REGEX patterns of allowed senders. If there are any values in the list, then all sender email addresses must match. For example:.*\@alfresco\.com, .*\@alfresco\.org.
    Overwrite Duplicates Yes By default, duplicate messages to a folder will overwrite each other. Deselect this check box to keep duplicate messages and apply a unique number.
    Maximum Server Connections 3 This provides the maximum number of connections allowed in order to control the performance of the system. To prioritize the email subsystem higher, increase this number. The default setting is 3.
    SMTP Authentication Enabled No Use this check box to enable or disable the authentication of inbound email against the repository.
    Email Server Port 25 This is the default port number for the email server.
    Email Server Domain alfresco.com This is the default domain for the email server.
    Blocked Senders   To block senders, enter a comma-separated list of email REGEX patterns, for example: .*\@hotmail\.com, .*\@googlemail\.com. If the sender email address matches a listed value, then the message will be rejected.
    Email Authentication Group EMAIL_CONTRIBUTORS This is the name of the group in which users must be a member to add content to the repository by email. The default group is EMAIL_CONTRIBUTORS.
    Transport Layer Security (TLS) Enabled This enables the TLS protocol, which upgrades a plain text connection to an encrypted TLS or SSL connection instead of using a separate port for encrypted communication. Select the TLS support setting:
    • Disabled: TLS support is disabled
    • Hidden: On the EHLO command, server support for TLS is hidden, though TLS will still be accepted if the client uses it
    • Enabled: On the EHLO command, server support for TLS is announced
    • Required: TLS authentication is required
  4. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

Parent topic: Configuring inbound and outbound email [170]
Related tasks
Launching the Admin Console [167]

Inbound SMTP configuration properties

The Inbound SMTP email subsystem type allows you to configure the behavior of the email server and service.

The following properties can be set for Inbound SMTP email in the alfresco-global.properties file.

email.inbound.unknownUser=anonymous
Specifies the user name to authenticate as when the sender address is not recognized.
email.inbound.enabled=true
Enables or disables the inbound email service. The service could be used by processes other than the email server (for example, direct RMI access), so this flag is independent of the email service.
email.server.enabled=true
Enables the email server.
email.server.port=25
Specifies the port number for the email server.
email.server.domain=alfresco.com
Specifies the name or the IP address of the network to bind the email server to.
email.server.allowed.senders=.*
Provides a comma-separated list of email REGEX patterns of allowed senders. If there are any values in the list, then all sender email addresses must match. For example: .*\@alfresco\.com, .*\@alfresco\.org.
email.server.blocked.senders=
Provides a comma-separated list of email REGEX patterns of blocked senders. If the sender email address matches this, then the message will be rejected. For example: .*\@hotmail\.com, .*\@googlemail\.com.
Parent topic: Configuring inbound and outbound email [170]

Managing outbound emails

Set these outbound email properties in the Admin Console to manage all emails sent from Alfresco Content Services to users such as site invitations, activity notifications, and workflow tasks.

  1. Open the Admin Console.
  2. In the Email Services section, click Outbound Email.

    You see the Outbound Email page.

  3. Set the email properties:

    Outbound Email property Example setting What is it?
    Hostname smtp.example.com This is the name of the SMTP(S) host server.
    Encoding UTF-8 This is the email encoding type. The default is UTF-8.
    Editable Sender Address   This check box enables the From field in outbound emails to be edited to differ from the Default Sender's Address. When you deselect this check box, the Default Sender's Address is always used. You should deselect this option if your email server security settings require the From field to match the user name used for email server authentication.
    Email Server Port 25 This is the default port number for the email server.
    Default Sender's Address alfresco@demo.alfresco.org The default address that is used in the From field of outbound emails if no alternative is available.
    Email Protocol SMTP Select a protocol from the list. This is the protocol that will be used when sending email.
    Username anonymous The account user name that connects to the SMTP server. The user name and password are only required if your server requires them for authentication.
    Password   The account user password.
  4. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

Parent topic: Configuring inbound and outbound email [170]
Related concepts
OutboundSMTP configuration properties [175]
Related tasks
Launching the Admin Console [167]

Outbound SMTP configuration properties

The following properties can be configured for the Outbound SMTP subsystem type.
Note: You must set the Outbound email configuration for Alfresco Share invitations to work correctly. If you do not set the email configuration, when you invite a user to a site, the user will not receive the assigned task notification.

The email service is exposed as a spring bean called mailService, which is contained in the Outbound SMTP subsystem.

Configure the repository to send emails to an external SMTP server by overriding the default settings. Set the email property overrides in the alfresco-global.properties file.

mail.host=yourmailhost.com
Specifies the host name of the SMTP host, that is, the host name or IP address of the server to which email should be sent.
mail.port
Specifies the port number on which the SMTP service runs (the default is 25). By convention, the TCP port number 25 is reserved for SMTP, but this can be changed by your email administrator.
mail.username
Specifies the user name of the account that connects to the smtp server.
mail.password
Specifies the password for the user name used in mail.username.
mail.encoding
Specifies UTF-8 encoding for email. Set this value to UTF-8 or similar if encoding of email messages is required.
mail.from.default
Specifies the email address from which email notifications are sent. This setting is for emails that are not triggered by a user, for example, feed notification emails. If the current user does not have an email address, this property is used for the from field by the MailActionExecutor.
mail.from.enabled
If this property is set to false, then the value set in mail.from.default is always used. If this property is set to true, then the from field may be changed. This property may be required if your email server security settings insist on matching the from field with the authentication details.
mail.protocol
Specifies which protocol to use for sending email. The value can be either smtp or smtps.
mail.header
Optionally specifies the content transfer encoding for the message. If specified the Content-Transfer-Encoding is set to the value you specify.
The following properties are for SMTP.
mail.smtp.auth
Specifies if authentication is required or not. Specifies the use of SMTPS authentication. If true, attempt to authenticate the user using the AUTH command. Defaults to false.
mail.smtp.timeout
Specifies the timeout in milliseconds for SMTP.
mail.smtp.starttls.enable
Specifies if the transport layer security needs to be enabled or not. Specifies the use of STARTTLS command. If true, enables the use of the STARTTLS command to switch the connection to a TLS-protected connection before issuing any login commands. Defaults to false.
mail.smtp.debug
Specifies if debugging SMTP is required or not.
The following properties are for SMTPS.
mail.smtps.starttls.enable
Specifies if the transport layer security for smtps needs to be enabled or not.
mail.smtps.auth
Specifies if authentication for smtps is required or not.

The following properties can be set to define a test message when the subsystem starts.

mail.testmessage.send
Defines whether or not to send a test message.
mail.testmessage.to
Specifies the recipient of the test message.
mail.testmessage.subject
Specifies the message subject of the test message.
mail.testmessage.text
Specifies the message body of the test message.

The following property is for setting the email site invitation behavior.

notification.email.siteinvite
You must set the outbound email configuration for Share invitations to work correctly. This property allows you to control whether or not emails are sent out for site invites. If you have not configured the outbound email properties, set this property to false.

The following examples show which properties to set for two different email clients. Add these properties to the alfresco-global.properties file.

The following example shows the properties that you need to set to configure Gmail.
# Sample Gmail settings
mail.host=smtp.gmail.com
mail.port=465
mail.username=user@gmail.com
mail.password=password
mail.protocol=smtps
mail.smtps.starttls.enable=true
mail.smtps.auth=true
The following example shows the properties that you need to set to configure Zimbra.
# Sample Zimbra settings
Not authenticated.

mail.host=zimbra.<your company>
mail.port=25
mail.username=anonymous
mail.password=
# Set this value to UTF-8 or similar for encoding of email messages as required
mail.encoding=UTF-8
# Set this value to 7bit or similar for Asian encoding of email headers as required
mail.header=
mail.from.default=<default from address>
mail.smtp.auth=false
mail.smtp.timeout=30000
Parent topic: Configuring inbound and outbound email [170]

Handling messages by target node type

Default behaviors for incoming email to different types of referenced nodes.

You can modify or extend the default behaviors by adding in custom handlers.

Folder(Space)
Content added with emailed aspect.
Forum(Discussion)
Content specialized to Post with emailed aspect; if email subject matches a topic, then add to topic, otherwise create new topic based on subject.
Topic(Post)
Content specialized to Post with emailed aspect; if referenced node is a Post, add to Post’s parent Topic.
Document(Content)
If discussion exists, same as for forums, otherwise add discussion with email as initial topic and post.
Parent topic: Configuring inbound and outbound email [170]

Groups and permissions for email

An email arriving at the Alfresco Content Services email server is unauthenticated. An authentication group, EMAIL_CONTRIBUTORS, must exist to allow permissions to be handled at a high level by the administrator.

When an email comes into the system, the only identification is the sender's email address. The user is looked up based on the email address.

  • If a matching user is not found, then the current user is assumed to be unknown, if unknown exists
  • If unknown does not exist, then the email is rejected as authentication will not be possible
  • If the user selected is not part of email contributor's group, then the email is rejected

The current request's user is set and all subsequent processes are run as the authenticated user. If any type of authentication error is generated, then the email is rejected. The authentication will also imply that the authenticated user may not have visibility of the target node, in which case the email is also rejected. Effectively, this means that the target recipient of the email does not exist, at least not for the sender.

The current default server configuration creates the EMAIL_CONTRIBUTORS group and adds the admin user to this group.

Parent topic: Configuring inbound and outbound email [170]

Configuring the Activities Feed

Activities Feed emails are sent from Alfresco Content Services to all users, summarizing the activities they see in their My Activities dashlet. Users will not see these email unless the Activities Feed is enabled. Emails include activities in all sites they are a member of, and by people they are following. In the Admin Console, you can set the frequency with which these emails are sent, the maximum number of activities they contain, and the maximum age of the activities.

  1. Open the Admin Console.
  2. In the Repository Services section, click Activities Feed.

    You see the Activities Feed page.

  3. Set the activities properties:

    Activities Feed property Example setting What is it?
    Activity Feed Enabled Yes This enables or disables activity notifications to users using email.
    Frequency CRON Expression 0 0 0 * * ? This specifies a cron expression which defines the frequency with which users will receive Activities Feed emails. Emails are only sent if there are new activities since the last email. By default this is every 24 hours at midnight.
    Maximum Number 200 The maximum number of activities that are reported on in the Activities dashlets and Activities Feed emails.
    Maximum Age (mins) 44640 This is the maximum age of the activities shown in the Activities Feed emails. Activities that are older than the maximum age are not shown in the Activities dashlet. The default setting is 44640 (a 31-day month).
  4. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

Parent topic: Configuring email [9]
Related tasks
Launching the Admin Console [167]

Enabling the Subscription Service

Subscriptions in the Admin Console allows you to enable or disable the Follow feature for users to follow each other in Alfresco Share. Users can keep track of other users activities by choosing to follow them.

When users are being followed, the person(s) following them receive activity notifications. The Subscription Service is the underlying service used to manage and generate activity notifications. You can use this page to enable/disable the Subscription Service and the follow feature on a system wide basis.
  1. Open the Admin Console.
  2. In the Repository Services section, click Subscription Service.

    You see the Subscription Service page.

  3. Use the Enabled check box to choose whether to enable or disable the Follow feature for all users:
    • Select the check box to enable subscriptions
    • Deselect the check box to disable subscriptions

    The Enabled check box is selected by default. This allows users to follow other users and then filter activities according to who they are following. If you disable subscriptions, users will not be able to follow users and they will not see the activities. For example, on the My Profile page, the I'm Following and Following Me options are not visible.

  4. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

Parent topic: Configuring email [9]
Related tasks
Launching the Admin Console [167]

Configuring the email client with IMAP

IMAP protocol support allows email applications that support IMAP (including Outlook, Apple Mail, Thunderbird, and so on) to connect to and interact with Alfresco Content Services repositories.

Each user has their own set of mailboxes stored in Alfresco Content Services, for example, they have their own INBOX. Users can manage emails in Alfresco Content Services, and the workflow, transformation, and permissions features are available.

In addition, sites can be nominated as IMAP Favorites. This means that the site contents show as a set of IMAP folders. Non-favorite sites are not shown.

A metadata extractor for IMAP emails (RFC822 messages) can extract values from the contents of the email message and store the values as properties.

Note: Be careful when deciding what mount points you provide. When an IMAP client mounts a mount point, it issues a LSUB "" * command. This retrieves the entire tree of folders below the mount point. 

For information about working with Alfresco Content Services and Microsoft Outlook, see Installing and configuring Alfresco Outlook Integration [1].

  • Enabling the IMAP protocol using alfresco-global.properties [178] The IMAP protocol server is disabled by default. You need to enable the IMAP protocol server to start interaction between the email client and the repository.
  • Enabling the IMAP Service using the Admin Console [179] The IMAP server allows email applications that support IMAP to connect to and interact with repositories directly from the mail client. You ca use IMAP Service in the Admin Console to configure IMAP, instead of editing your alfresco-global.properties file.
  • IMAP subsystem properties [180] The following properties can be configured for the IMAP subsystem.
  • IMAP mount points [181] IMAP mount points are used to control which folders are available using IMAP and the mode in which they are accessed. Modes are used to define the type of interaction available.
  • Virtual view email format [182] The virtualized view uses presentation templates to generate the mail body and display document metadata, action links (for download, view, webdav, folder) and Start Workflow form (HTML view only).
  • Marking sites as IMAP favorites [183] To have access to Alfresco Share sites using IMAP, the site(s) need to be added to your list of sites using Share IMAP Favorites.
Parent topic: Configuring email [9]

Enabling the IMAP protocol using alfresco-global.properties

The IMAP protocol server is disabled by default. You need to enable the IMAP protocol server to start interaction between the email client and the repository.
  1. Open the alfresco-global.properties file.
  2. Enable the IMAP server by setting the following property to true:

    imap.server.enabled=true
  3. Set the IMAP server to listen on a specific interface using the following property:

    imap.server.host=x.x.x.x

    Where x.x.x.x is the IP address (or corresponding DNS address) of your external IP interface. Do not use 127.0.0.1 or localhost.

    By default, the IMAP server listens on all interfaces on the default IMAP port of 143. You can set this property to use an alternative port number, for example 144.

  4. Restart the Alfresco Content Services server.
Once the server has restarted, the new configuration will take effect. Since the IMAP server has only one instance, make your configuration changes to the <extension root>alfresco-global.properties file. You can also make your changes to <extension root>\alfresco\extension\subsystems\imap\default\default for the IMAP subsystem configuration to take precedence.
Parent topic: Configuring the email client with IMAP [171]

Enabling the IMAP Service using the Admin Console

The IMAP server allows email applications that support IMAP to connect to and interact with repositories directly from the mail client. You ca use IMAP Service in the Admin Console to configure IMAP, instead of editing your alfresco-global.properties file.

  1. Open the Admin Console.
  2. In the Virtual File Systems section, click IMAP Service.

    You see the IMAP Service page.

  3. Set the IMAP Service properties:

    IMAP Service property Example setting What is it?
    IMAP Server Enabled No This enables or disables the IMAP server.
    Hostname 0.0.0.0 This specifies the host or IP address to which the IMAP service will bind.
    Mail TO Default alfresco@demo.alfresco.org This specifies the default TO field that will be used when the TO field is not available, for example, when displaying documents.
    Mail FROM Default alfresco@demo.alfresco.org This specifies the default FROM field that will be used when the FROM field is not available, for example, when displaying documents.
  4. Set the IMAP Protocol properties:

    IMAP Protocol property Example setting What is it?
    Enable IMAP Yes This enables or disables the IMAP service.
    Port 143 This specifies the port number on which this service will listen. This is usually 143 but can be changed to an alternative number.
  5. Set the IMAPS Protocol properties:

    IMAPS Protocol property Example setting What is it?
    Enable IMAP Yes This enables or disables the IMAPS service.
    Port 993 This specifies the port number on which this service will listen. This is usually 993 but can be changed to an alternative number.
  6. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

Parent topic: Configuring the email client with IMAP [171]
Related tasks
Launching the Admin Console [167]

IMAP subsystem properties

The following properties can be configured for the IMAP subsystem.

Enabling the IMAP protocol

The following properties control the IMAP subsystem:
imap.server.enabled=true
Enables or disables the IMAP subsystem.
imap.server.port=143
IMAP has a reserved port number of 143. You can change it using this property.
imap.server.host=<your host name>
Replace this value with the IP address (or corresponding DNS name) of your external IP interface.
Configure the following properties of the sysAdmin subsystem:
alfresco.protocol=http
The protocol component of the Alfresco Content Services web application URL, for example, http.
alfresco.host=$ {localname}
The host name of the Alfresco Content Services URL, which is externally resolved. Use ${localname} for the locally-configured host name.
alfresco.port=8080
The port number of the Alfresco Content Services URL, which is externally resolved. For example, 8080
alfresco.context=alfresco
The context path component of the Alfresco Content Services URL. Typically this is alfresco.
To configure the IMAP Home space, which is used to store user mailboxes in ARCHIVE mode, in particular the user's INBOX, use the following properties:
imap.config.home.store=${spaces.store}
Specifies the default location for the IMAP mount point. For example, ${spaces.store}.
imap.config.home.rootPath=/${spaces.company_home.childname}
Specifies the default location for the IMAP mount point. For example, /${spaces.company_home.childname}.
This property may also be configured using an XPath query syntax.
imap.config.home.rootPath=/app:company_home
To add your own folder to this path, add the name of your folder path using the data model names. For example:
/app:company_home/cm:Houses
If your folder has a space in the name, include _x0020_ where the space should be. For example:
/app:company_home/cm:Home_x0020_Town
Stop and start the IMAP subsystem for the changes to take effect.
imap.config.home.folderPath=cm:Imap Home
Specifies the QName of the default location for the IMAP mount point. For example, cm:Imap Home.

Enabling IMAPS

IMAPS is a secure IMAP that is encrypted using SSL. IMAPS is assigned to port number 993 by default. When you have enabled the IMAP subsystem, you must configure the default Java keystore, and then enable IMAPS.

To configure the default Java keystore, use the following properties:
javax.net.ssl.keyStore=mySrvKeystore
Specifies the keystore to be used
javax.net.ssl.keyStorePassword=123456
Specifies the keystore password
To enable IMAPS, use the following properties:
imap.server.imaps.enabled=true
Specifies that IMAPS is enabled
imap.server.imaps.port=993
Specifies the IMAPS port number

Extracting attachments

An IMAP message can contain a message and a set of attachments, and the IMAP server can split the attachments into separate content nodes. Use this property with caution if you have a large repository. See Troubleshooting IMAP [184] for more information.
imap.server.attachments.extraction.enabled=true
Defines whether or not attachments are extracted.
Parent topic: Configuring the email client with IMAP [171]

IMAP mount points

IMAP mount points are used to control which folders are available using IMAP and the mode in which they are accessed. Modes are used to define the type of interaction available.

The IMAP integration offers the following access modes:

Archive
Allows emails to be written to and read from Alfresco Content Services by the IMAP client by drag and drop, copy/paste, and so on, from the email client.
Virtual
Documents managed by Alfresco Content Services can be viewed as emails from the IMAP client. Documents are shown as virtual emails with the ability to view metadata and trigger actions on the document, using links included in the email body.
Mixed
A combination of both archive and virtual modes, that is, both document access and email management are available.
Add the IMAP composite property, imap.config.server.mountPoints along with the names of your IMAP mount points to the alfresco-global.properties file. For each mount point specify the following settings:
  • beanName
  • store
  • rootPath
  • mode
By default, a single mount point called AlfrescoIMAP is defined in the MIXED mode for Company Home and you can change it or add more mount points.
imap.config.server.mountPoints=AlfrescoIMAP
imap.config.server.mountPoints.default.mountPointName=IMAP
imap.config.server.mountPoints.default.modeName=ARCHIVE
imap.config.server.mountPoints.default.store=${spaces.store}
imap.config.server.mountPoints.default.rootPath=/${spaces.company_home.childname}
imap.config.server.mountPoints.value.AlfrescoIMAP.mountPointName=Alfresco IMAP
imap.config.server.mountPoints.value.AlfrescoIMAP.modeName=MIXED

In JMX dump, the same presentation looks like this:

** Object Name Alfresco:Type=Configuration,Category=imap,id1=default,id2=imap.config.server.mountPoints,id3=AlfrescoIMAP
** Object Type imap$default$imap.config.server.mountPoints$AlfrescoIMAP
folderPath     
mode           MIXED
modeName       MIXED
mountPointName Alfresco IMAP
rootPath       /app:company_home
store          workspace://SpacesStore
storeRef       workspace://SpacesStore
Note: Be careful when deciding what mount points you provide. When an IMAP client mounts a mount point, it issues a LSUB "" * command. This retrieves the entire tree of folders below the mount point.
Parent topic: Configuring the email client with IMAP [171]

Virtual view email format

The virtualized view uses presentation templates to generate the mail body and display document metadata, action links (for download, view, webdav, folder) and Start Workflow form (HTML view only).

The templates are stored in the repository in Company Home > Data Dictionary > Imap Configs > Templates. Separate templates are available to generate either a HTML or plain text body, based on the format request by the email client. The templates can be customized to change the metadata and actions available in the email body.

Parent topic: Configuring the email client with IMAP [171]

Marking sites as IMAP favorites

To have access to Alfresco Share sites using IMAP, the site(s) need to be added to your list of sites using Share IMAP Favorites.
  1. Select IMAP Favorites in the Share My Sites dashlet on your My Dashboard page:

  2. Refresh your IMAP view to see the new sites.

    You can see the site added to the IMAP Sites folder.

    Note: If the folders do not appear in your email client, you should confirm that:
    • The folder is in a site marked as an IMAP favorite.
    • Your email client is showing all folders, and not just the folders that you have subscribed to.
    • In your email client, look for a property like Reload IMAP folders.
    • In your email client, clear your IMAP cache.
Parent topic: Configuring the email client with IMAP [171]

Configuring email templates using v1 REST APIs

Use this information to configure customized email templates for your registered applications using the v1 REST APIs.

There are a number of properties for configuring customized email templates when using the v1 REST APIs. Once you have developed your custom application, add the required properties in the global properties file (alfresco-global.properties) to register your application. In this file you can also set the path to each email template and any linked assets (such as images and company logo) to use your own branding.

The shared-links and request-password-reset APIs provide a way to send email notifications. To view these APIs, navigate to https://api-explorer.alfresco.com/api-explorer/#!/shared-links/emailSharedLink [185] and https://api-explorer.alfresco.com/api-explorer/#!/people/requestPasswordReset [186] in your web browser. One of the mandatory properties in the request body of these APIs, client, sets the name of your registered client application. Registering a client means you can create a unique email template for each client, and configure the required email template and assets using different properties.

The client registration is based on a predefined naming convention loaded from properties files. The naming convention must conform to the format:
repo.client-app.<client-name>.<propertyName>
Note: The client name (<client-name>) and property name (<propertyName>) must not contain a dot ('.').
An example implementation is provided in this release where Alfresco Share is registered as the default client for the shared-links and request-password-reset APIs. These properties are defined in alfresco/client/config/repo-clients-apps.properties but you can override them in alfresco-global.properties:
 repo.client-app.share.templateAssetsUrl=${shareUrl}/res/components/images/
 # shared-link (quickShare) base url
 repo.client-app.share.sharedLinkBaseUrl=${shareUrl}/s
 # shared-link email template path
 repo.client-app.share.sharedLinkTemplatePath=
 # reset password request email template path
 repo.client-app.share.requestResetPasswordTemplatePath=
 # reset password UI page url
 repo.client-app.share.resetPasswordPageUrl=${shareUrl}/page/reset-password
 # reset password confirmation email template path
 repo.client-app.share.confirmResetPasswordTemplatePath=
Note: Any property without a value is ignored, however, a client can't be registered if all the properties of that client have no values.

For more information, see Configuring customized email templates [187].

  • Configuring customized email templates [187] In Alfresco Content Services you can customize the emails that are sent by the v1 REST API when users share links to content and request a password change.
Parent topic: Configuring [28]

Configuring customized email templates

In Alfresco Content Services you can customize the emails that are sent by the v1 REST API when users share links to content and request a password change.

To customize an email template for your application, register the application as a new client, then create new email templates using your own branding by adding them to the Data Dictionary.
  1. Open Share, and click Repository on the toolbar.
  2. Click Data Dictionary then Email Templates.

    You can create a folder to store your customized email templates here.

  3. Add the required properties to alfresco-global.properties.

    Here is an example implementation for the default Share client that uses the v1 REST APIs.

    repo.client-app.share.templateAssetsUrl=${shareUrl}/res/components/images/
    repo.client-app.share.sharedLinkBaseUrl=${shareUrl}/s
    repo.client-app.share.sharedLinkTemplatePath=
    repo.client-app.share.requestResetPasswordTemplatePath=
    repo.client-app.share.resetPasswordPageUrl=${shareUrl}/page/reset-password
    repo.client-app.share.confirmResetPasswordTemplatePath=
    Note: Any property without a value is ignored, however, a client can't be registered if all the properties for that client have no values.

    Here is the full list of property settings that you can configure. Note that the expected format of the email template paths (*TemplatePath) are similar:

    Property Description Value
    sharedLinkTemplatePath

    requestResetPasswordTemplatePath

    confirmResetPasswordTemplatePath

    Define the template path as an XPATH, NodeRef or classpath. Example:

    XPATH: app:company_home/app:dictionary/app: email_templates/cm:example-email.ftl

    NodeRef: workspace://SpacesStore/a371fc59-d5ea-4849-a45c-b00c0c0d00ab

    Class path: alfresco/templates/quickshare-email-templates/ myapp-template.ftl

    templateAssetsUrl

    The URL of the assets for the email template, such as images and logos, used in the HTML template.

    Example:

    ${shareUrl}/res/components/images/

    sharedLinkBaseUrl

    The base URL of a page where the registered application displays the shared content.

    Example:

    ${shareUrl}/s

    For example, to register the application myapp to send customized shared-link emails, add the following properties to alfresco-global.properties:
    repo.client-app.myapp.sharedLinkTemplatePath=myapp email template path
    repo.client-app.myapp.templateAssetsUrl=myapp email template assets url
    repo.client-app.myapp.sharedLinkBaseUrl=myapp url
    Note: If the template path isn't a valid nodeRef or template, the fallback template for Share is used.
  4. Restart the Alfresco server.
You can view your registered clients by using a JMX client, located under the ClientsAppsConfigInformation MBean.
Parent topic: Configuring email templates using v1 REST APIs [10]

Configuring LibreOffice

You can transform a document from one format to another using the OOoJodconverter subsystem. This feature requires you to install LibreOffice.
The Jodconverter integration is a library that improves the stability and performance of LibreOffice in Alfresco Content Services. The Jodconverter runs on the same machine as the Alfresco Content Services server and it supports:
  • a pool of separate LibreOffice processes
  • automatic restart of crashed LibreOffice processes
  • automatic termination of slow LibreOffice operations
  • automatic restart of any LibreOffice process after a number of operations (this is a workaround for LibreOffice memory leaks)

It is also possible to use OpenOffice instead of LibreOffice.

  • Changing the OOoJodconverter subsystems [69] The default subsystem for LibreOffice transformations is OOoJodconverter.
  • Jodconverter configuration properties [188] The OOoJodconverter subsystem uses LibreOffice. Configure the following properties for the OOoJodconverter subsystem using either the Admin Console, JMX, or the global properties file.
  • Configuring OpenOffice transformations in place of LibreOffice [62] LibreOffice is used in preference to OpenOffice in Alfresco Content Services. Use this information if you need to configure OpenOffice transformations specifically. Although unsupported, it should be possible to use OpenOffice in place of LibreOffice. This can be done by setting the jodconverter.officeHome property to the path of the OpenOffice installation in the global properties file.
Parent topic: Configuring [28]

Changing the OOoJodconverter subsystems

The default subsystem for LibreOffice transformations is OOoJodconverter.
You can change the OOoJodConverter and OOoDirect subsystems using the following ways:
  • Admin Console
  • Runtime administration using your JMX client
  • Modifying the alfresco-global.properties file
Parent topic: Configuring LibreOffice [11]

Admin Console: Transformation Services

  1. Open the Admin Console.
  2. In the Repository Services section, click Transformation Services.

    You see the Transformation Services page.

  3. Set the Office Transform - JODConverter properties.

    Property Example setting What is it?
    JODConverter Enabled Yes This enables or disables the JODConverter for transformations.
    Max Tasks per Process 200 This is the maximum number of tasks that can be performed concurrently.
    Office Suite Location /opt/libreoffice6.3/ This shows the directory path locations of OpenOffice.org or LibreOffice.
    Port Numbers 8100 This is the port number that JODConverter uses. To enable multiple process instances, enter a comma-separated list of port numbers, all of which must be available.
    Task Execution Timeout 120000 This is the duration in milliseconds after which a task will timeout.
    Task Queue Timeout 30000 This is the duration in milliseconds after which the task queue will timeout.
  4. Click Save to apply the changes you have made to the properties.

    If you do not want to save the changes, click Cancel.

JMX interface runtime administration

  1. Open your JMX client, for example, JConsole.
  2. Locate the OOoJodconverter subsystem.
  3. Edit the property setting, such as set the jodconverter.enabled value to true.
  4. Restart the subsystem.

Global properties file

If you have previously modified a value using the Admin Console or JMX it will take preference to any change made to the global properties file.
  1. Open the alfresco-global.properties file.
  2. Edit the property setting, such as set the jodconverter.enabled value to true.
  3. Save the file.
  4. Restart the Alfresco Content Services server.

Jodconverter configuration properties

The OOoJodconverter subsystem uses LibreOffice. Configure the following properties for the OOoJodconverter subsystem using either the Admin Console, JMX, or the global properties file.
jodconverter.connectTimeout
Specifies the maximum number of milliseconds before a connection times out. The default is 10000 milliseconds (10 seconds).
jodconverter.enabled
Enables or disables the Jodconverter process(es).
jodconverter.maxTasksPerProcess
Specifies the number of transforms before the process restarts. The default is 200.
jodconverter.officeHome
Specifies the name of the LibreOffice install directory. The following are examples of install directory paths:
  • Windows: jodconverter.officeHome=c:/Alfresco/libreoffice
  • Linux: /opt/libreoffice6.3
jodconverter.portNumbers
Specifies the port numbers used by each processing thread. The number of process will match the number of ports.
jodconverter.taskExecutionTimeout
Specifies the maximum number of milliseconds that an operation is allowed to run before it is aborted. It is used to recover from operations that have hung. The default is 120000 milliseconds (2 minutes).
jodconverter.taskQueueTimeout
Specifies the maximum number of milliseconds a task waits in the transformation queue before the process restarts. It is used to recover hung LibreOffice processes. The default is 30000 milliseconds (30 seconds).
Parent topic: Configuring LibreOffice [11]

Configuring OpenOffice transformations in place of LibreOffice

LibreOffice is used in preference to OpenOffice in Alfresco Content Services. Use this information if you need to configure OpenOffice transformations specifically. Although unsupported, it should be possible to use OpenOffice in place of LibreOffice. This can be done by setting the jodconverter.officeHome property to the path of the OpenOffice installation in the global properties file.
  1. Open the alfresco-global.properties file.
  2. Set the jodconverter.officeHome property to the path of the OpenOffice installation.
  3. Restart the Alfresco Content Services server.
Parent topic: Configuring LibreOffice [11]

Configuring ActiveMQ

Alfresco Content Services requires ActiveMQ for message queuing. ActiveMQ is also used by various other products.

The standard ActiveMQ installation runs with a basic configuration. You can configure and extend ActiveMQ based on your requirements.

For information about installing ActiveMQ for your specific product, see:
  • Alfresco Media Management [189]
  • Alfresco Sync Service [190]
  • Alfresco Transform Service [191]

For more advanced configuration, such as security, transport connectors, or memory settings, see Configuring advanced settings for ActiveMQ [192].

  • Setting up ActiveMQ [193] Set up Apache ActiveMQ to enable message queuing. If you already have an ActiveMQ instance connected to Alfresco Content Services, you don't need to perform these step.
  • Configuring advanced settings for ActiveMQ [194] Some modules require setting up and configuring ActiveMQ to enable high-performance clustering and authentication.
Parent topic: Configuring [28]

Setting up ActiveMQ

Set up Apache ActiveMQ to enable message queuing. If you already have an ActiveMQ instance connected to Alfresco Content Services, you don't need to perform these step.

If you do not already have an ActiveMQ instance, install ActiveMQ [195] and follow the steps below.

See Supported Platforms [196] for supported versions.

  1. Stop the server.
  2. Define the location of ActiveMQ in your alfresco-global.properties file:

    messaging.broker.url=failover:(tcp://server:61616)?timeout=3000
    where server is the host name of the server where ActiveMQ is installed.

    When you set up ActiveMQ, the Alfresco Content Services events and messaging subsystems are set to start up automatically.

    Any changes to alfresco-global.properties require you to restart Alfresco Content Services to apply the changes.

Parent topic: Configuring ActiveMQ [12]

Configuring advanced settings for ActiveMQ

Some modules require setting up and configuring ActiveMQ to enable high-performance clustering and authentication.

Clustering

ActiveMQ should be clustered to achieve fault tolerance and reliable high performance load balancing of messages. The default URL configuration for both the repository and your module must use the fail over transport. For more information, see ActiveMQ - clustering [197].

Security

You can secure the repository - ActiveMQ - your module's topic and queue communication using authentication, authorization, and SSL encryption. For more information, see ActiveMQ - security [198] and ActiveMQ - using SSL [199].

For example, to configure authentication, add the following code snippet under the broker element in sync/activemq/apache-activemq-5.15.8/confactivemq.xml:
<broker>
..
  <plugins>
     <simpleAuthenticationPlugin>
         <users>
            <authenticationUser username="system" password="manager" groups="users,admins"/>
            <authenticationUser username="user" password="password" groups="users"/>
            <authenticationUser username="guest" password="password" groups="guests"/>
         </users>
     </simpleAuthenticationPlugin>

     <authorizationPlugin>
         <map>
            <authorizationMap>
               <authorizationEntries>
                   <authorizationEntry topic="Consumer.*.VirtualTopic.alfresco.repo.events.nodes>" read="users" 
                    write="users" admin="users"/>
                   <authorizationEntry topic="ActiveMQ.Advisory.>" read="guests,users" 
                   write="guests,users" admin="guests,users"/>
                   <authorizationEntry topic="VirtualTopic.alfresco.repo.events.nodes" read="guests,users" 
                    write="guests,users" admin="guests,users"/>
               </authorizationEntries>
            </authorizationMap>
         </map>
     </authorizationPlugin> 
  </plugins>
..
</broker>

This configures ActiveMQ to use basic authentication (username and password) and limit access to the your module's topic Consumer.*.VirtualTopic.alfresco.repo.events.nodes. Both the repository and sync service will have to provide a username and password. It it fails, an exception will be shown in the repository and the sync service logs.

Here's an example of the exception in the repository log:

Caused by: java.lang.SecurityException: User name [null] or password is invalid. 
at 
org.apache.activemq.security.SimpleAuthenticationBroker.authenticate(SimpleAuthenticationBroker.java:103)
at
org.apache.activemq.security.SimpleAuthenticationBroker.addConnection(SimpleAuthenticationBroker.java:71)
at
org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:98)
at
org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:103)
Here's an example of the exception in the sync service log:
ERROR [2016-03-16 16:07:21.251] [Camel (alfrescoServiceCamelContext) thread #3 - 
JmsConsumer[Consumer.074f6b96-685b-4a03-959f-7e77793f1ce2.VirtualTopic.alfresco.repo.events.nodes]]
org.apache.camel.component.jms.DefaultJmsMessageListenerContainer - Could not refresh JMS Connection 
for destination
'Consumer.074f6b96-685b-4a03-959f-7e77793f1ce2.VirtualTopic.alfresco.repo.events.nodes?consumer.prefetchSize=3000' 
- retrying in 5000 ms. Cause: User name [null] or password is invalid.

The module's ActiveMQ username and password can be set using the properties, messaging.username and messaging.password. The repository ActiveMQ username and password can be set using the properties messaging.broker.username and messaging.broker.password.

Additionally, enable SSL to provide secure communication of events. See ActiveMQ - HTTP and HTTPS Transports [200].

Parent topic: Configuring ActiveMQ [12]

Configuring Smart Folders

Smart Folders organize your content so that you can store files across your organization, but view them based on information requirement, not location.

Stored searches are shown in a folder tree, so that when a user opens a folder, a query is run and the results are displayed in a list. Files are also automatically classified when they are uploaded.

Smart Folders are installed as a core part of Alfresco Content Services, so there is no separate AMP file to install or upgrade. The Smart Folders function is disabled by default, and can be enabled in your alfresco-global.properties file by specifying smart.folders.enabled=true.

Folders are differentiated by icon:
  • Physical folder: Physical folder icon
  • Smart folder: Folder with a magnifying glass representing a Smart Folder

Using Smart Folders in this way helps you to manage your information; for example, where you have a number of sources of information, in a variety of folders. Content that might be related to, but not directly involved in your work is also retrieved, depending on the search criteria.

The Smart Folder structure is created by associating a Smart Folder Template with an Alfresco Content Services physical folder. Multiple Smart Folder structures can be defined in a single template. For every Smart Folder, the template defines a folder name, search, and filing criteria, along with other properties. New templates are typically defined and added by business analysts, and created by administrators.

The folder structure can be personalised by user, for example, if you create a folder called My Files, you can populate it with files relevant to each user.

Take a look at the videos to learn more: Smart Folders videos [201]

  • What is a Smart Folder? [202] Use this information to understand the structure of Smart Folders.
  • Prerequisites for using Smart Folders [203] There are a number of prerequisites for using Smart Folders.
  • Planning and implementing Smart Folders [204] Consider the business requirements for creating Smart Folders.
  • Enabling Smart Folders [205] As an admin user, you must enable Smart Folders, and specify a Smart Folder Template for use.
  • Smart Folders tutorial [206] In this seven-step tutorial you will create a simple claims management solution.
  • Type-based, System, and Custom Smart Folders [207] There are three ways to attach Smart Folders to physical folders.
  • Metadata inheritance [208] You can set files and folders to inherit metadata using Smart Folders.
  • Smart Folder Template syntax [209] You can build your own Smart Folder Template using these guidelines.
  • Smart Folders global properties settings [210] Use this information to understand the full list of alfresco-global.properties settings available for Smart Folders.
  • Best practices when using Smart Folders [211] There are a number of best practices when using Smart Folders.
  • Smart Folders technical FAQs [212] If you have any technical problems with Smart Folders, try these suggestions to resolve your issue.
Parent topic: Configuring [28]

What is a Smart Folder?

Use this information to understand the structure of Smart Folders.

This information is primarily aimed at business analysts, and system administrators.

A Smart Folder displays the results of a query in a folder format. It is "smart", because there is no physical folder to represent it in the repository and the results are created dynamically. For example, a Smart Folder called My video files might be created to contain all files that I created that have a video format. Every time I open the My video files folder, the search query is run, and all my video files are available in that folder, wherever in the repository I have created them.

The diagram shows a physical file system, and how a Smart Folder structure is created to contain files relevant to a particular customer: Physical repository shown on the left with folders and files that relate to a customer.  These are brought together into a new Smart Folder structure in Alfresco

Smart Folders are created when a Smart Folder Template is run. The Smart Folder Template contains:
  • A folder name
  • The query to be executed, when the folder is accessed by a user
  • An optional filing rule, so that a user can add a file to the Smart Folder (and the file is filed according to the query for that folder)
  • An optional list of properties that can be inherited by files or used for value propagation
Smart Folders have a limited set of actions:
  • Add/ Create: You can add files to a Smart Folder. The file is put into a physical folder, as specified by the filing rule.
  • Update: You can update files in a Smart Folder. Updating a property might result in a file being removed from the current Smart Folder (because it no longer meets the query criteria).
  • Delete, Edit Properties, Unzip To, Sync, Locate To, Move, and Copy actions for files are not supported.
The Smart Folder itself can't be edited in Alfresco Content Services, except through the Smart Folder Template. For more information about Smart Folder Templates, see Applying a Smart Folder Template [213].

Physical folders can be displayed inside Smart Folders as long as the physical folder matches the query criteria.

  • Smart Folders terminology [214] Special terms used to describe Smart Folders.
Parent topic: Configuring Smart Folders [13]

Smart Folders terminology

Special terms used to describe Smart Folders.
Filing rule
A filing rule is specified in a Smart Folder Template and defines where a new file is stored in the repository, when it is uploaded to a Smart Folder. The filing rule also specifies the type and aspects that are applied to the new file, along with its property values.
Smart Folder
A Smart Folder displays the results of a query in a folder format. It is "smart", because there is no physical folder to represent it in the repository and the results are created dynamically. A Smart Folder can also contain a hierarchy of Smart Folders.
Smart Folder Template
A Smart Folder Template is a JSON file that is stored in Alfresco Content Services in Repository/Data Dictionary/Smart Folder Templates. When the template is run in a physical folder, a Smart Folder structure is created.
Parent topic: What is a Smart Folder? [202]

Prerequisites for using Smart Folders

There are a number of prerequisites for using Smart Folders.

Alfresco requirements

  • Smart Folders are provided as part of the standard installation with Alfresco Content Services.
  • Change the Smart Folders property setting in the <tomcat>/shared/classes/alfresco-global.properties file to true:
    smart.folders.enabled=true
    Note: By default, the smart.folders.enabled=false property setting is at the end of the alfresco-global.properties file. Set this property to true to enable Smart Folders, rather than adding a new smart.folders.enabled=true property setting to the file, which will cause the Smart Folder example not to work.
  • To define a query for a Smart Folder, Alfresco Full Text Search (AFTS) must be used.
  • Ensure that your system administrator has configured Alfresco Content Services to use either Solr 4 or Alfresco Search Services with Solr 6 as a search service. The Alfresco Full Text Search should also be configured to either Always use Database or Use Database if possible.

Ensure that your business analyst has considered the business case for enabling Smart Folders. See Planning and implementing Smart Folders [215] for more information.

Parent topic: Configuring Smart Folders [13]

Planning and implementing Smart Folders

Consider the business requirements for creating Smart Folders.

This information is primarily for business analysts, who are responsible for creating and defining the business scenario that requires Smart Folders.

Before you use Smart Folders, consider the use cases and scenarios that are appropriate to your business problem. Then you can:
  • Define a custom content model. To get you started, you can use the example model that is provided with the Smart Folders tutorial. See Smart Folders tutorial [206] for more information. For more information on content models see Content modeling with Model Manager [216].
  • Create a Smart Folder Template, which defines the queries and filing rule for your Smart Folder structure, and property propagation rules for file uploads. The Smart Folder Template is a JSON file. See Smart Folder Template syntax [217] for more information.
  • Choose Type-based, System, or Custom Smart Folders to associate a Smart Folder Template with a physical repository folder. See Type-based, System, and Custom Smart Folders [218] for more information.
  • In an advanced setup, you might need to:
    • Enable Share actions in the share-config-custom.xml file. See Configuring Share Actions with Smart Folders [219] for more information.
    • Configure other Smart Folders properties in the alfresco-global.properties file. See Smart Folders global properties settings [220] for more information.
You can then test and deploy your solution. Use the Smart Folders tutorial [206] to understand more about the basic Smart Folders setup.

This diagram shows the recommended workflow:Diagram showing four steps - create use cases, define content model, implement Smart Folder and Type, then test.  Four arrows specifying implement, deploy, test and adopt.

Parent topic: Configuring Smart Folders [13]

Enabling Smart Folders

As an admin user, you must enable Smart Folders, and specify a Smart Folder Template for use.
A predefined template is available by selecting the System Smart Folder aspect. You can add other customized templates, and if they are uploaded to Repository/Data Dictionary/Smart Folder Templates, they are then available by selecting the System Smart Folder aspect. If you store templates anywhere else in your repository, you can use them by selecting the Custom Smart Folder aspect.
  1. Stop Alfresco Content Services, and edit your <tomcat>/shared/classes/alfresco-global.properties file to enable Smart Folders:

    smart.folders.enabled=true

    Advanced Smart Folders settings are provided in the <tomcat>/shared/classes/alfresco-global.properties.sample file.

  2. Restart Alfresco Content Services.
  3. If you are using the default Smart Folder template, you are ready to go. If you want to check the template, or upload your own template, follow step 4.
  4. In Alfresco Content Services, go to the Repository/Data Dictionary/Smart Folder Templates directory.

    The default Smart Folders Template is visible: smartFoldersExample.json. You can upload your own template here, and can see any other templates that you have already added.

    If you use your own template, make sure that you change the type to Smart Folder Template. See Applying multiple templates [221] for more information.

    If you store templates anywhere else in your repository, navigate to the template and select it. You can use them later by selecting the Custom Smart Folder aspect.

    There is no need to restart Alfresco Content Services. When you edit properties on nodes that have the Custom Smart Folder aspect applied, the new Smart Folder is included in the Smart Folder Template menu. See Applying a Smart Folder Template [222] for more information.

    If you need to customize the template, see Applying a Smart Folder Template [222] for information on the sample file structure, and Smart Folder Template syntax [209] for guidance on the Smart Folder Template JSON format.

Parent topic: Configuring Smart Folders [13]

Smart Folders tutorial

In this seven-step tutorial you will create a simple claims management solution.
You can use Smart Folders for any purpose where you want to bring together files from across an organization, and apply metadata across a set of files. A good case study is an insurance claim, where you might want to bring together information for one customer, that relates to a claim and a specific policy.
Note: You will need system administrator rights to perform the activities in this tutorial.
In the tutorial, you will:
  1. Import a custom content model and create a Claims Application folder where your Smart Folder structure will live
  2. Enable Smart Folders and the Type-based Smart Folder, and import the clex_claimFolder.json Smart Folders Template
  3. Create a rule to automatically apply the aspects for your Smart Folder structure
  4. Create a new claim
  5. Add some supporting files to your claim
  6. Apply a System Smart Folder to your Claims Application folder, to see how you can use different Smart Folder Templates together
  7. Link your claim to related policy files
For more information about the Smart Folders workflow, see Planning and implementing Smart Folders [204]. For information about Type-based, System, and Custom Smart Folders, see Type-based, System, and Custom Smart Folders [207].

The diagram shows the final folder structure that you will create during this tutorial: Smart Folder structure that you have created, including claims and policy folders

For background information on Smart Folder Templates, see What is a Smart Folder? [202]

  • 1. Setting up claims management [223] To set up the claims framework, you need to create a custom content model, then create a folder structure for your content.
  • 2. Configuring claims management [224] To configure the claims framework, add the sample template to the Data Dictionary and enable the claims aspect.
  • 3. (Optional) Creating a rule to define your Smart Folder structure [225] You can create a simple folder rule to add an aspect automatically to your folder structure.
  • 4. Creating a new claim [226] You can create a new claim structure using the Smart Folder Template, and edit a new claim.
  • 5. Adding new claim files [227] Add some files for the new claim.
  • 6. Applying multiple templates [228] You can use multiple Smart Folder Templates at the same time, to help you find your content more easily.
  • 7. Adding policy files and reviewing the final claim structure [229] You can add files relating to the policy and review the Smart Folder structure that you have created for managing claims.
Parent topic: Configuring Smart Folders [13]

1. Setting up claims management

To set up the claims framework, you need to create a custom content model, then create a folder structure for your content.
You need a custom content model to specify the metadata that the claims solution requires. You need to be in the ALFRESCO_MODEL_ADMINISTRATORS group to create a content model. For detailed information about Model Manager, see Content modeling with Model Manager [14].
  1. Download the Smart Folders tutorial files [230] from the smartfolders-master/tutorial directory.

    You can download a zip of the Smart Folders master directory here [231].

  2. In Alfresco Share, select Admin Tools and Model Manager.

    The Model Manager page is displayed.

  3. Click Import Model and browse to smartfolders-master/tutorials in your Downloads directory to import claims_example.zip, and click Import.

    You'll see the claims_example model and namespace, with a status of Inactive.

  4. Select Actions and Activate to set the status to Active.

    Click claims_example to see the Custom Types and Aspects that are defined for the model.

  5. Click Sites and Create Site. Create a new site called Smart Folders, and Save.
  6. Select Document Library and create a new folder for the tutorial called Smart Folders Tutorial.
  7. In the Smart Folders Tutorial folder, create a folder called Claims Application, and sub folders called Claims and Policies. You should see this structure:

    • Smart Folders Tutorial/Claims Application
    • Smart Folders Tutorial/Claims Application/Claims
    • Smart Folders Tutorial/Claims Application/Policies
You are now ready to configure your claim.
Parent topic: Smart Folders tutorial [206]

2. Configuring claims management

To configure the claims framework, add the sample template to the Data Dictionary and enable the claims aspect.
The example data model that you imported in the previous task contains the clex:claimFolder aspect. This aspect defines the metadata for a claim, and also marks a folder as being used to contain claim information. Make sure that you have downloaded the Smart Folders tutorial files [230] before proceeding with this task.
  1. Stop Alfresco Content Services, and edit your alfresco-global.properties file to specify the following settings:

    smart.folders.enabled=true
    smart.folders.config.type.templates.qname.filter=clex:claimFolder
    The smart.folders.config.type.templates.qname.filter property specifies the custom type or aspect of the contents of the Smart Folder Template.
  2. Restart Alfresco Content Services.
  3. Browse to smartfolders-master/tutorials in your Downloads directory, and locate the clex_claimFolder.json file.

    This is the Smart Folder Template.

    This file matches the clex:claimFolder aspect, so that any folder type with the clex:claimFolder aspect applied to it should use the clex_claimFolder.json Smart Folder Template for its folder structure.

    Adding this aspect and Smart Folder Template means that you are using Type-based Smart Folders.

  4. In Alfresco Share, click Repository then Data Dictionary, and copy clex_claimFolder.json into the Smart Folder Templates folder.

    You'll see the default smartFoldersExample.json Smart Folder Template is already in this folder.

    Note: You need system administrator rights to upload this file.
You are now ready to create a new claim.
Parent topic: Smart Folders tutorial [206]

3. (Optional) Creating a rule to define your Smart Folder structure

You can create a simple folder rule to add an aspect automatically to your folder structure.
To simplify the creation of a claim folder, you can create a folder rule to add the clex:claimFolder aspect automatically to any new claim folder.
  1. Upload the addAspect_claimsFolder.js file from smartfolders-master/tutorials in your Downloads directory to the Repository/Data Dictionary/Scripts directory in Alfresco Content Services.

    This file provides additional function that is not available in the standard aspect and property settings.

  2. Click the site Document Library and drill down to the Smart Folders Tutorial/Claims Application folder.

    It's important that you create the rule for the Claims folder so that all sub folders will have the aspect that marks them as a claim.

  3. Click the Claims folder and from the menu, click More then Manage Rules, and Create Rules.
  4. Give the rule a name (Add Claims Folder aspect) and a description (Adds clex:claimFolder aspect and converts folder to a claim structure). Use the following options for the remaining fields:

    • Select Define Rule When: and Items are created or enter this folder
    • Check If all criteria are met: and select Content of type or sub-type is folder
    • Select Perform Action: and Execute script, and select the addAspect_claimsFolder.js file
    Note: Make sure that these options are not selected:
    • Rule applies to subfolders
    • Run rule in background
  5. When you are done, click Create.
Parent topic: Smart Folders tutorial [206]

4. Creating a new claim

You can create a new claim structure using the Smart Folder Template, and edit a new claim.
  1. Click the site Document Library and drill down to the Smart Folders Tutorial/Claims Application/Claims folder.
  2. Create a new folder called Insurance Claim.
  3. If you did not set up a rule [232] to add the aspect:
    1. Hover over the Insurance Claim folder and select More then Manage Aspects.
    2. In the Select Aspects window, add the Claim Folder (clex:claimFolder) aspect, and Save.
  4. Hover over the Insurance Claim folder and select Edit Properties, and All Properties.

    You'll see a new section called Claim Details that has been populated from the Claim Folder aspect.

    Claim Number, Policy Number, Claim Type, Claim Status, Handling Administrator, and Claim Date fields are visible. Specify a unique claim number (and other data) in these fields, which are propagated to any file in this folder. A list of numbers is provided for testing.

  5. Select the default numbers, a claim type of Accident Insurance and note the claim number. Click Save.
  6. Return to Document Library. You'll see the new Smart Folders are shown as sub folders of the Insurance Claim folder.

    Smart Folders are identified by this icon: Folder with a magnifying glass representing a Smart Folder

You can now add some files to your claim.
Parent topic: Smart Folders tutorial [206]

5. Adding new claim files

Add some files for the new claim.
You can add any files you like to the site Document Library for your claim. For convenience, an image (in JPG format) and a claim form (in PDF format) are provided in: Smart Folders tutorial files [230].
  1. Click the site Document Library and drill down to the Smart Folders Tutorial/Claims Application/Claims/Insurance Claim folder.
  2. Drag and drop any image (or the image from Smart Folders tutorial files [230]) into the Assessments folder.

    Look in the Assessments/Images folder. The image you added is shown there. The image property defines that it must be filed in the Images folder.

  3. Hover over the image and click Edit Properties then All Properties to view the Claim Details.

    The image has inherited the Claim Number that you set up when you create the folder, and it has inherited the Assessment file type, because this is the folder where the file was dragged to. The file status is set to Draft by default.

    1. Change the Document Type to Correspondence. The image is viewable in the Correspondence Smart Folder.
    2. Change the Document Status to In Review. The image is viewable in the Review processes/2_In Review Smart Folder.

      You can look at the clex_claimFolder.json file contents to understand the search criteria being applied to each folder. See Smart Folder Template syntax [209] for more guidance on understanding and creating your own templates.

  4. Add a claim form (you can use the form from Smart Folders tutorial files [230]) to the Forms Smart Folder.
  5. Hover over the claim form and click Edit Properties then All Properties to view the Claim Details.

    The form has inherited the Claim Number that you set up when you create the folder, and it has inherited the Claim Form file type, because this is the folder where the file was dragged to. The file status is set to none by default.

You have set up a claim structure, and learned how to configure it with a template, create a new claim folder, and populate it with content.
Parent topic: Smart Folders tutorial [206]

6. Applying multiple templates

You can use multiple Smart Folder Templates at the same time, to help you find your content more easily.
You can add System or Custom Smart Folders to your structure to use alongside the Type-based Smart Folders that you have already applied.
  1. In Alfresco Share, click Repository and Data Dictionary, and copy claimsApplication.json from Smart Folders tutorial files [230] into the Data Dictionary/Smart Folder Templates folder.

    You'll see the smartFoldersExample.json sample file (and any other templates you have added) already in this folder.

  2. Select the claimsApplication.json file. In Document Actions select Change Type and select Smart Folder Template as the new type, and OK.
  3. Click the site Document Library and drill down to the Smart Folders Tutorial folder.
  4. Hover over the Claims Application folder and from the menu select More then Manage Aspects. Add the System Smart Folder (smf:systemConfigSmartFolder) aspect, and Save.

    Adding this aspect allows you to select a Smart Folder Template that is in the Data Dictionary/Smart Folder Templates directory.

    Alternatively, select the Custom Smart Folder (smf:custom-ConfigSmartFolder) and select a template from anywhere in your repository.

    Note: You can add a single template only to a folder. If you select both the System Smart Folder (smf:systemConfigSmartFolder) and Custom Smart Folder (smf:customConfigSmartFolder) aspects, the system aspect overrides the custom aspect.
  5. Hover over the Claims Application folder and from the menu select Edit Properties and All Properties.
  6. In the Smart Folder Template field, select the claimsApplication.json Smart Folder Template.

    If you need to navigate to the template, it lives in Repository/Data Dictionary/Smart Folder Templates.

  7. In the site Document Library, click the Claims Application folder.

    You'll see the new folder hierarchy displayed, showing Claims by type, My open claims, and Policy documents. These Smart Folders are displayed in addition to the Smart Folders we set up under the Claims Application folder.

Parent topic: Smart Folders tutorial [206]

7. Adding policy files and reviewing the final claim structure

You can add files relating to the policy and review the Smart Folder structure that you have created for managing claims.
We have already created a new claim in previous steps, and built up the Smart Folder structure as part of the tutorial. In a real life scenario, the policy files would be created first, and the claim files linked to them afterwards. You can add any files you like to the Document Library for your policy. For convenience, a Terms and Conditions file and a policy file (in PDF format) are provided in the zip package: Smart Folders tutorial files [230].
  1. Click the site Document Library and drill down to the Smart Folders Tutorial/Claims Application/Policies folder.

    You created a new Accident Insurance claim in the previous steps, and now you are going to add some policy files to the Accident Insurance type.

  2. Drill down to the Policy Documents/Accident Insurance folder.
    1. Drag and drop a Terms and Conditions file into the Terms & Conditions Smart Folder.

      See Smart Folders tutorial files [230] for an example file.

    2. Drag and drop a Policy file into the Insurance Contracts Smart Folder.

      See Smart Folders tutorial files [230] for an example file.

    3. Edit the properties of the Policy file.

      Hover over the policy file, and from the menu click Edit Properties and All Properties. You will see a Policy Details section, where you can set the Document Type, Policy Number and Insurance Class. If you specify a certain policy number, this must be specified in any subsequent claims that you create in the Claims folder.

  3. Try creating a new folder in Claims, with a unique claim number, unique policy number (relating to your new policy file) and insurance class (Accident Insurance, in this case).

    The diagram shows the final folder structure that you have set up for your claims management: Smart Folder structure that you have created, including claims and policy folders

Parent topic: Smart Folders tutorial [206]

Type-based, System, and Custom Smart Folders

There are three ways to attach Smart Folders to physical folders.

Each method assigns a Smart Folder Template to a physical folder, which is then immediately available to all users.

  • Type-based Smart Folders [233] Type-based Smart Folders replicate a Smart Folder structure and apply it to many folders of a specific type, or carrying a specific aspect.
  • System Smart Folders [234] System Smart Folders are best used when you want to see content (that is distributed across the repository) in context; for example, all my files, or all files that are tagged as confidential.
  • Custom Smart Folders [235] Custom Smart Folders are similar to System Smart Folders, except that you select the template from anywhere in your repository.
Parent topic: Configuring Smart Folders [13]

Type-based Smart Folders

Type-based Smart Folders replicate a Smart Folder structure and apply it to many folders of a specific type, or carrying a specific aspect.
These are the key elements of Type-based Smart Folders:
  • Best used to replicate a Smart Folder structure on multiple objects
  • Allows you to configure new sections that are automatically embedded into folder and file properties
  • Allows you to associate a Smart Folder Template with a specific type or an object that has a specific aspect
  • New templates can be added in Repository/Data Dictionary/Smart Folder Templates
  • Names must match. For example, in our tutorial the Smart Folder Template clex_claimFolder.json matches the Claim Folder (clex:claimFolder) type
  • Additional alfresco-global.properties settings required to enable this method. You could use any of these examples:
    smart.folders.config.type.templates.qname.filter=* 
    smart.folders.config.type.templates.qname.filter=clex:claimFolder,dam:*
    smart.folders.config.type.templates.qname.filter=none
The smart.folders.config.type.templates.qname.filter property can be set to one of the following:
  • none for no types or aspects
  • * for all types and aspects
  • <prefix>:* for all types and aspects that are defined within a specified namespace
  • <prefix>:<name> for a type or aspect with the specified name
Advanced Smart Folders settings are provided in the <tomcat>/shared/classes/alfresco-global.properties.sample file.

The setup of Type-based Smart Folders is somewhat complex, but is explained in detail in the tutorial. See Configuring claims management [224] and Creating a new claim [226] for more information.

Parent topic: Type-based, System, and Custom Smart Folders [207]

System Smart Folders

System Smart Folders are best used when you want to see content (that is distributed across the repository) in context; for example, all my files, or all files that are tagged as confidential.
These are the key elements of System Smart Folders:
  • Best used to apply multiple taxonomies to find content in context
  • Loaded using the System Smart Folder (smf:systemConfigSmartFolder) aspect
  • Default template selected using the Smart Folder Template called smartFoldersExample.json
  • New templates can be added in Repository/Data Dictionary/Smart Folder Templates.
    Note: When you add a template to Repository/Data Dictionary/Smart Folder Templates, select Change Type and choose the Smart Folder Template type, to ensure that the new template is displayed in the list in Repository/Data Dictionary/Smart Folder Templates.
Advanced Smart Folders settings are provided in the <tomcat>/shared/classes/alfresco-global.properties.sample file.

See Applying a Smart Folder Template [213] for more information.

Parent topic: Type-based, System, and Custom Smart Folders [207]

Custom Smart Folders

Custom Smart Folders are similar to System Smart Folders, except that you select the template from anywhere in your repository.
These are the key elements of the Custom Smart Folder:
  • Best used to apply multiple taxonomies to find content in context
  • Allows use of Smart Folder Templates that are located anywhere in the repository
  • Loaded using the Custom Smart Folder (smf:customConfigSmartFolder) aspect
  • Selected using the Smart Folder Template specific to your custom template
Advanced Smart Folders settings are provided in the <tomcat>/shared/classes/alfresco-global.properties.sample file.

See Enabling Smart Folders [205] and Applying multiple templates [228] for more information.

Parent topic: Type-based, System, and Custom Smart Folders [207]

Metadata inheritance

You can set files and folders to inherit metadata using Smart Folders.

One of the most useful features of Smart Folders is the ability to automatically classify new files and inherit or map metadata to the file itself. This is possible by using Type-based Smart Folders, so that when you drag and drop files into your Smart Folder structure, they inherit any properties that you have set up in the Smart Folder Template.

Use the tutorial, Smart Folders tutorial [206] to set up a Smart Folder framework using Type-based Smart Folders, and in Adding new claim files [227] you will see metadata inheritance in action.

Take a look at the Metadata Inheritance video to learn more: Metadata inheritance with Smart Folders [236]

For more information on Type-based Smart Folders, see Type-based Smart Folders [237].

Parent topic: Configuring Smart Folders [13]

Smart Folder Template syntax

You can build your own Smart Folder Template using these guidelines.

A Smart Folder Template is a configuration file that contains one or more queries to define the nodes of a hierarchical tree of "smart" folders. It is a JSON (Java Script Object Notation) file that defines one node object for every Smart Folder.

You can customize a copy of the smartFoldersExample.json template, which is available from Repository/Data Dictionary/Smart Folder Templates in Alfresco Share. The tutorial also provides links to a variety of examples; see Smart Folders tutorial [206] for more information.

For more information about Alfresco Full Text Search (AFTS), see Alfresco Full Text Search reference [238].

A node is defined by the following properties:
Node property Property description
name Mandatory folder name
id Optional ID or number that is unique for the node in the template. This property is optional, however it is recommended as specifying an ID generates a much shorter (and permanent) noderef for the Smart Folder
description Optional description, displayed in the detailed view
nodes Optional collection of sub nodes (sub folders)
search Mandatory query defined using Alfresco FTS (full text search) language. The search is run when a Smart Folder is accessed by a user.
language Mandatory property, set to fts-alfresco
query Mandatory FTS query that defines the folder content
filing Optional rule that defines the filing action for a new file when it is uploaded to the Smart Folder. If no filing rule is defined, files are not permitted to be uploaded to that folder. Parameters include:
  • path: path where a document is physically stored
  • classification: type and aspects assigned to the new file
  • properties: property values attributed to the new file
path Mandatory property in a filing rule. Path to store new documents. This is the ISO9075 [239] encoded QName.
classification Mandatory property in a filing rule. Type and aspects of the new object.
properties Optional property. Defines property values and inheritance.
The following code fragments give more information about these properties.
Here are some additional tips on notation:
  • Use percent (%) signs to use predefined placeholders in queries and filing rules
  • For repository path expressions use QNames, for example; /app:company_home/st:sites/cm:swsdp/cm:documentLibrary.
  • Special characters and whitespace are ISO9075 [239] encoded. Use this notation to encode special characters in repository path names. For example, use _x0020_ for the whitespace character.
Placeholder Description
%ACTUAL_PATH% ISO9075 [239] encoded repository path of the physical parent folder. Only the physical parent folder (or next physical folder up the folder tree) can use %ACTUAL_PATH%.
%CURRENT_USER% Account name of the user
_x0020_ ISO9075 [239] encoded whitespace character
<> Use angle brackets, for example, <cm:name>, to inherit property values from the physical parent folder. Used for inheritance in a filing rule and in a query.
  1. Nested nodes: define a Smart Folder structure inside another Smart Folder structure, for example:
    {
        "id : "1",
        "name":"Documents",
        "nodes":[
            {
                "name":"Correspondence",
                "description":"Smart Folder - documents from type 'Correspondence'",
                "nodes":[
                {
                   "name":"High Prio",
                    ...
                },
                {
                    ...
                }
            },
            {
                "name":"Assessment",
                "description":"Smart Folder - documents from type 'Assessment'"
            },
            {
                "name":"Pending approvals",
                "description":"Smart folder - pending approvals documents"
            }
        ]
    }
  2. Search queries: information is populated by running a search query:
    {
        "id : "1",
        "name":"Documents",
        "nodes":[
            {
                "name":"Correspondence",
                ...
                
                "search":{
                    "language":"fts-alfresco",
                    "query":"=cmg:claimDocumentType:Correspondence and cmg:claimDocumentId:<cmg:claimId>"
                }
            },
            {
                ...  
            }
        ]
    }
    The query is run when the Smart Folder is opened, and the results displayed as the folder contents.
    You can limit the query to specific types or aspects, for example:
    "query":"+ASPECT:'ins:claimFolder'"
    "query":"+TYPE:'cm:folder'"
    You can use %CURRENT_USER% to limit the search to documents relevant to the signed in user, for example:
    "query":"cm:modifier:%CURRENT_USER% or cm:creator:%CURRENT_USER%"
  3. Filing rules: define the path where a document uploaded to a Smart Folder should be created, as well as the type and aspects of the new file, and its property values:
    {
        "id : "1",
        "name":"Documents",
        "nodes":[
            {
                "name":"Correspondence",
                ...
                "filing":{
                    "path":"%ACTUAL_PATH%",
                    "classification":{
                        "type":"cm:content",
                        "aspects":[
                            "cmg:claim-document"
                        ]
                    },
                    "properties":{
                        "cmg:claimDocumentType":"Correspondence",
                        "cmg:claimDocumentId":"<cmg:claimId>"
                    }
                }           
            },
            {
                ... 
            }
        ]
    }
    • "path": The path can be an existing folder location, for example:

      • "path":"/app:company_home/cm:Claims_x0020_Pool"
        using an XPath expression, and ensuring the expression is ISO9075 encoded ISO9075 [239] encoded
      • or the parent folder, by specifying the placeholder %ACTUAL_PATH%.

        The path variable can also be used in a query to restrict the search to a certain folder:
        "query":"PATH: '/app:company_home/st:sites/cm:legal-documents/'"
        or in a filing rule to store new objects:
        "path":"/app:company_home/cm:Insurance/*"
    • "classification": You can define the type for content that populates a Smart Folder, and which aspects should be associated to them. In the code example [240], each new document shown in the "Correspondence" folder is of type "cm:content" with aspect "cmg:claim-document".

    • "properties": You can assign property values. These can be fixed, or a placeholder "<[property_name]>" that uses the value of the parent folder property.

      In a Smart Folder, you can map the value of the parent folder or object to that of a new object as variables:
      "[new_obj_prop_name]":"<[existing_obj_prop_name]>"
      For example, "cmg:claimDocumentId":"<cmg:claimId>"
      or as names:
      "[new_obj_prop_name]":"[literal]"
      For example, "cmg:claimDocumentType":"Correspondence"
      You can also use the value of the parent folder or object in a search query, for example:
      "query":"=cmg:claimDocumentType:Correspondence and cmg:claimDocumentId:<cmg:claimId>"
Parent topic: Configuring Smart Folders [13]

Smart Folders global properties settings

Use this information to understand the full list of alfresco-global.properties settings available for Smart Folders.

Settings for Smart Folders are listed in the <tomcat>/shared/classes/alfresco-global.properties.sample file:

#Smart Folders Config Properties

smart.folders.enabled=true
smart.folders.model=alfresco/model/smartfolder-model.xml
smart.folders.model.labels=alfresco/messages/smartfolder-model

#Smart reference config

#smart.reference.classpath.hash=${smart.folders.config.vanilla.processor.classpath}->1,${smart.folders.config.system.templates.classpath}->2

#Smart store config

#Company home relative download associations of smart entries 
#smart.download.associations.folder=${spaces.dictionary.childname}/${spaces.smartdownloads.childname}

#Generic virtualization methods config

#Vanilla JSON templates javascript processor classpath. A java script processor used to 
#covert JSON templates to internal smart folder definitions.

#smart.folders.config.vanilla.processor.classpath=/org/alfresco/repo/virtual/node/vanilla.js

#System virtualization method config

#System virtualization method aspect.
#smart.folders.config.system.aspect=smf:systemConfigSmartFolder
#System virtualization method aspect defined template location property.
#smart.folders.config.system.aspect.template.location.property=smf:system-template-location
#Classpath to be explored for *.json entries defining system templates.
#smart.folders.config.system.templates.classpath=/org/alfresco/repo/virtual/node
#A company home relative name or qname path location of repository system templates.
#smart.folders.config.system.templates.path=${spaces.dictionary.childname}/${spaces.smartfolders.childname}
#Content sub type of repository system templates.
#smart.folders.config.system.templates.template.type=smf:smartFolderTemplate

#Custom virtualization method config

#Custom virtualization method aspect.
#smart.folders.config.custom.aspect=smf:customConfigSmartFolder
#Custom virtualization method aspect template content association.
#smart.folders.config.custom.aspect.template.association=smf:custom-template-association


#Type virtualization method config

#A company home relative name or qname path location of the type mapped templates.
#smart.folders.config.type.templates.path=${spaces.dictionary.childname}/${spaces.smartfolders.childname}
#Type and aspect qname regular expression filter. 
#smart.folders.config.type.templates.qname.filter=none
The different sections are used in the following ways:
  1. Smart Folders config properties: these are the basic mandatory settings for Smart Folders.
    smart.folders.enabled=false
    is the default, and must be set to true to enable Smart Folders.
  2. Smart reference config: reduces the length of NodeRefs
  3. Smart store config: If you use the Download as Zip function in Share for a folder that contains Smart Folders, a temporary file is created in the Data Dictionary/Smart Folder Downloads folder that contains information about the Smart Folder contents (an association folder). Use this variable to change where the association folder lives.
  4. Generic virtualization methods config: defines overall Smart Folder Template classpath. By default, templates live in <configRootShare>\classes\org\alfresco\repo\virtual\node
  5. System virtualization method config: defines the configuration for System Smart Folders. See System Smart Folders [241] for more information.
  6. Custom virtualization method config: defines the configuration for Custom Smart Folders. See Custom Smart Folders [242] for more information.
  7. Type virtualization method config: defines the configuration for Type-based Smart Folders. See Type-based Smart Folders [237] for more information.
Parent topic: Configuring Smart Folders [13]

Best practices when using Smart Folders

There are a number of best practices when using Smart Folders.
Server Configuration and Alfresco Search Services:
  • Ensure that your system administrator has configured Alfresco Content Services to use Alfresco Search Services with Solr 6 as a search service.
  • Configure transactional queries in the Search Service to use the database always, or if possible.
  • When you define a search query, restrict the query to certain types or aspects (using +TYPE or +ASPECT), otherwise the query will search for all content.
  • When defining a filing rule for a Smart Folder, use a transactional query for that folder where possible, otherwise uploaded files will not appear immediately. See Transactional metadata queries supported by database [243] for more information.
Smart Folder Templates:
  • Use the FTS query language (this is mandatory for Smart Folders). All other languages are experimental and do not allow creation or upload of new objects into a Smart Folder.
  • If you are using WebDAV, only cm:folder types are supported for a folder. Do not use a sub type of cm:folder; instead use aspects to apply properties to a folder.
  • Don't create filing rules that don't match the query criteria for the folder.
  • Don't use folder types in a filing rule (creating physical folders in Smart Folders is not supported).
General guidance:
  • Use the optional id property for every folder node to shorten the noderef for a Smart Folder (the length of noderefs can become critical). The ID must be unique in a template.
  • We recommend uploading content through Alfresco Share or the CMIS APIs. File system protocols such as WebDAV or IMAP are unsupported.
  • When you create a model, don't use the - (dash) character in a type, aspect, or property name. A better method is to used mixed case in your names. If you have used the - character in a property name, you must escape the property name in a Smart Folder Template, using \\; for example, mod:first-name must be escaped to mod:first\\-name.
Parent topic: Configuring Smart Folders [13]

Smart Folders technical FAQs

If you have any technical problems with Smart Folders, try these suggestions to resolve your issue.
  • How do I enable Smart Folders? [244]
  • How do Smart Folders affect Alfresco Content Services if the function is enabled, but not used? [245]
  • Are there best practices to avoid performance problems? [246]
  • Where can I find technical documentation? [247]
  • Which components or subsystems do Smart Folders provide? [248]
  • Which services do Smart Folders extend? [249]
  • How can I extend Smart Folders? Which interfaces, APIs, and extension points exist? [250]
  • As a developer, I want to create a custom application. How can I use Smart Folders in my code? [251]
  • As a developer, creating my own custom application (separate from the Share evaluators), how do I distinguish between a Smart Folder and an object that is displayed in a Smart Folder? [252]
  • I have created a new Share module. How can I enable Share actions for Smart Folders? [253]
  • Which Share actions are enabled as standard for Smart Folders? [254]
  • Are Smart Folders supported in a multi-tenant production environment? [255]
  • Can I use multi-value properties with Smart Folders? [256]
  • What is the Data Dictionary/Smart Downloads folder used for? [257]

How do I enable Smart Folders?

Smart Folders can be enabled (and disabled) by your system administrator by adding the following property in the alfresco-global.properties file:
smart.folders.enabled=true

back to top [258]

How do Smart Folders affect Alfresco Content Services if the function is enabled, but not used?

Smart Folders is part of the standard repository, and there might be unexpected interactions if Smart Folders are enabled but not used. The most important impact is on performance. Alfresco Content Services performance might degrade based on the complexity and the number of Smart Folders used. See Best practices when using Smart Folders [211] for more information about best practices with Smart Folders, and Type-based, System, and Custom Smart Folders [207] for information about Type-based, System, and Custom Smart Folders.

back to top [258]

Are there best practices to avoid performance problems?

Yes there are. See Best practices when using Smart Folders [211] for more information.

back to top [258]

Where can I find technical documentation?

Use the Smart Folder tutorial, Smart Folders tutorial [206], to set up a working Smart Folder configuration. General configuration information is here: Configuring Smart Folders [13].

back to top [258]

Which components or subsystems do Smart Folders provide?

Smart Folders introduce a private AspectJ-based, non-disruptive extension point implementation mechanism called TraitExtender.

The Smart Folders implementation extension bundle, which is a set of extensions that act as service interceptors for several services, is classified as a module because it can be added to and removed from the repository. They are not publicly exposed currently.

back to top [258]

Which services do Smart Folders extend?

These services are extended:
  • DbNodeServiceImpl basic node handling
  • FileFolderServiceImpl basic file and folder modeling
  • PreferenceServiceImpl node based preferences information handling (for example; favorites)
  • RatingServiceImpl node based ratings
  • LockServiceImpl node locking
  • PermissionServiceImpl node permissions handling
  • CheckOutCheckInServiceImpl node check out / check in
  • Version2ServiceImpl node versioning
The LockableAspectInterceptor Spring interceptor is also extended.

back to top [258]

How can I extend Smart Folders? Which interfaces, APIs, and extension points exist?

There are currently no publicly exposed extension points for Smart Folders.

back to top [258]

As a developer, I want to create a custom application. How can I use Smart Folders in my code?

Use standard Alfresco Content Services APIs. All custom uses of nodes, files, and folders apply.

Note that Smart Folders do not show up in search queries, however, the content within a folder will show up if it matches the query.

back to top [258]

As a developer, creating my own custom application (separate from the Share evaluators), how do I distinguish between a Smart Folder and an object that is displayed in a Smart Folder?

Use this guidance to differentiate between a Smart Folder and an object that is displayed in a Smart Folder:

  • Root folder, with Smart Folder sub folders: This is a standard folder and is referenced using normal NodeRefs. The only difference is the sub-folder content.
  • Smart Folder structure, as defined by a Smart Folder Template: This structure has the smf:smart aspect, and is referenced using a special NodeRef. Repository clients must not use the NodeRef format to detect these nodes.
  • Smart Folder structure, as defined by a query: This structure has the smf:smartFolderChild aspect, and is referenced using a special NodeRef. Repository clients must not use the NodeRef format to detect these nodes.

back to top [258]

I have created a new Share module. How can I enable Share actions for Smart Folders?

Any new Share action, by default, is not enabled, because not all actions are supported with Smart Folders (for example, data can't be persisted with a Smart Folder).

Ensure that you conduct adequate testing before enabling an action for Smart Folders.

To enable the new action, add an evaluator in the appropriate action group definition in your module, or add it to the Tomcat shared/classes/alfresco/web-extension/smartfolders-amp-actions-config.xml file.

back to top [258]

Which Share actions are enabled as standard for Smart Folders?

Smart Folders have a limited set of actions:
  • Add/ Create: You can add files to a Smart Folder. The file is put into a physical folder, as specified by the filing rule.
  • Update: You can update files in a Smart Folder. Updating a property might result in a file being removed from the current Smart Folder (because it no longer meets the query criteria).
  • Delete, Edit Properties, Unzip To, Sync, Locate To, Move, and Copy actions for files are not supported.
The Smart Folder itself can't be edited in Alfresco Content Services, except through the Smart Folder Template. For more information about Smart Folder Templates, see Applying a Smart Folder Template [213].

back to top [258]

Are Smart Folders supported in a multi-tenant production environment?

No, Smart Folders are not supported in a multi-tenant production environment.

back to top [258]

Can I use multi-value properties with Smart Folders?

Properties that can have multiple values are supported in a query. However, you can't upload new content and set a value for a multi-value property.

back to top [258]

What is the Data Dictionary/Smart Folder Downloads folder used for?

The Data Dictionary/Smart Folder Downloads folder is used only when you use the Download as Zip function in Share, for a folder that contains Smart Folders. Download as Zip creates a temporary file in the Smart Folder Downloads folder that contains information about the Smart Folder contents.

back to top [258]

Parent topic: Configuring Smart Folders [13]

Content modeling with Model Manager

Model Manager allows you to create and manage your own custom models in Alfresco Share. This is a user-friendly tool that enables you to add custom types, aspects, and properties to your models. Alfresco Content Services provides several out-of-the-box content models for specifying the core content types in the repository.

The Model Manager is available to users in the ALFRESCO_MODEL_ADMINISTRATORS permission group. To create or edit a model you must be a member of this group. By default, the System Administrator is a member of the ALFRESCO_MODEL_ADMINISTRATORS group and can create models.

This information is primarily aimed at business analysts who need to define and manage content models.
Note: The Model Manager does not allow editing existing dynamic models and content models that have been configured in XML and bootstrapped through Spring (static models).

What is a model?

A model is a fundamental building block of the content repository that provides a foundation for structuring content and working with content. A model has the following characteristics:
  • It describes the data being stored.
  • It allows the management of content metadata by applying custom types or aspects to the content and folders.
  • It is uniquely identified by its defined Namespace, Prefix, and Name.
  • It is defined using a small set of building blocks: custom types, aspects, properties, and constraints.

Custom types

A custom type enumerates the properties and relationships that a file of that type can support. Typically, types represents nodes with support for properties and the ability to inherit the definition of a parent type. Content and Folder are the two important types defined out-of-the-box.

Aspects

An aspect is a collection of properties that can encapsulate both data and behaviour, providing a flexible tool for modeling content. Aspects add extra functionality and properties to the models by attaching them to custom types. A file must be of a single type, but may have one or more aspects attached to it. By default, the content repository comprises of some out-of-the-box aspects, such as Classifiable, Versionable, and so on. To know more about aspects, see About aspects [259].

Properties

Properties are metadata which describes the content. For example, Author is a property which specifies the person who wrote the content.

Constraints

Constraints control the input property values. For example, you can specify that the author name must not be more than 40 characters.

For more information on content modeling, see Content Model metadata [260].

  • Managing models [261] You can create and manage your own business-specific models using the Model Manager tool.
  • Managing custom types, aspects, and properties [262] You can create and manage custom types, aspects, and properties for your models using the Model Manager tool.
  • Tutorial: creating and using models in Alfresco Share [263] In this tutorial you will learn how to create custom models and implement content modeling using the Model Manager.
  • Model Manager video tutorials [264] Watch these videos to see how you can create and use models, custom types, and aspects with the Model Manager.
Parent topic: Configuring [28]

Managing models

You can create and manage your own business-specific models using the Model Manager tool.
  • Creating a new model [265] You can create new models using the Model Manager page.
  • Viewing existing models [266] Use the Model Manager page to create a new model, select an existing model to view and create the associated custom types and aspects.
  • Activating a model [267] Activate a model to make its custom type or aspect available to other users.
  • Deactivating a model [268] Deactivate a model to make its associated custom type and aspect unavailable.
  • Exporting/importing models [269] Model Manager provides a feature for exporting and importing models across different repositories.
Parent topic: Content modeling with Model Manager [14]

Creating a new model

You can create new models using the Model Manager page.
Note: Due to the design of solr, fields names should not start with a digit. For more information see, Defining Fields [270].
  1. Click Admin Tools, and then click Model Manager.

    You can only see the Admin Tools option on the menu bar if you are an administrator user or a user who is a member of the ALFRESCO_MODEL_ADMINISTRATORS permission group.

    The Model Manager page is displayed.

  2. Click Create Model.

    The Create Model window appears. Fields marked with an asterisk (*) are required.

  3. Enter the details for the new model.

    1. Enter the model namespace.

      Namespaces provide a way to specify globally unique names for definitions within content models. All custom types, aspects, and properties have names which are made unique across the repository by using a namespace specific to the model. Using namespaces prevents name collisions when the models are shared across repositories. A namespace is composed of a URI and a prefix.

      Only alphanumeric characters or a URI, for example, http://www.mycompany.com/model/mynamespace/1.0, are allowed. Do not use spaces or special characters.

      Important: The namespace value must be unique within the repository.
    2. Enter a short prefix for the model.

      A prefix is just an abbreviation for the namespace identifier (URI), which is typically quite long. For example, if the namespace URI is http://example.org/contentmodels and associated prefix is ex, then the name ex:customtype means that customtype is a name defined within the namespace  http://example.org/contentmodels.

      Only alphanumeric characters, hyphens (-), and underscores (_) are allowed. Do not use spaces. For example, finance.

      Important: The prefix value must be unique within the repository.
    3. Enter a name for the model.

      For example, Finance.

      Only alphanumeric characters, hyphens (-), and underscores (_) are allowed. Do not use spaces or special characters.

    4. Specify an optional author for the model.

      If you leave this field blank, it will be auto-filled it based on the current signed in user.

    5. Enter an optional description for the model.
  4. Click Create.

    The new model appears in the Custom Models table on the Model Manager page. Additional information displayed in the table includes the model's name, namespace, status, and the actions that can be performed on the type.

The status of a model can either be Active or Inactive.
  • Inactive models: A new model is initially inactive. This means that the model is work in progress and will not be visible. A model can be moved from an inactive status to an active status.
  • Active models: Active models can be used by end users and any custom types or aspects defined within the model can be applied to files. Active models can be moved back to the inactive status if there are no instances of the model's types or aspects in use within Alfresco Share.
Parent topic: Managing models [261]

Viewing existing models

Use the Model Manager page to create a new model, select an existing model to view and create the associated custom types and aspects.
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page displays all the models created using the Model Manager module. The list displays the model name, its namespace, status, and the available actions.

  2. Under Custom Models, click a model name to view the custom type(s) and aspect(s) associated with it.
  3. To perform an action on a model, click the Actions drop-down list against the relevant model name.

    The options available in the Actions drop-down list will depend on the status of the model.

    Option Available when content model status is.. Description
    Activate Inactive Activates the model so that the custom type or aspect is available to the end users.
    Edit Inactive Enables you to update information of the model using the Edit Model window.
    Delete Inactive Deletes the model. You can only delete an inactive model. To delete an active model, you need to deactivate it first.
    Deactivate Active Deactivates the model so that the custom type or aspect is no longer available to the end users.
    Export Active/Inactive Saves the model on your local machine for future use or use in other repositories.

    Inactive model:

    Active model:

Parent topic: Managing models [261]

Activating a model

Activate a model to make its custom type or aspect available to other users.
To activate a model, follow the instructions below:
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed. The status of the relevant model is Inactive.

  2. Click the Actions drop-down list for the model you want to activate.
  3. Click Activate.

    The status of the relevant model changes to Active. The types and aspects associated with this model are now available.

Parent topic: Managing models [261]

Deactivating a model

Deactivate a model to make its associated custom type and aspect unavailable.
If you have applied a model's custom type or aspect to a file, you cannot deactivate the model directly from the Model Manager. Use the Find Where Used option to search and locate all the nodes to which the relevant type or aspect has been applied. For more information, see Creating new custom types and aspects [271].
  • If you have applied a model's custom type to any files and folders, delete the files or folders that use the type from Share and your trashcan, and then deactivate the model using Model Manager.
  • If you have applied a model's aspect to a file, remove the aspect from the node, then deactivate the model using Model Manager.
  • If you have applied a model's custom type and aspect to a file, delete the file from Share and your trashcan, and then deactivate the model using Model Manager.
To deactivate a model, follow the instructions below:
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed. The status of the relevant model is Active.

  2. Click the Actions drop-down list for the model you want to deactivate.
  3. Click Deactivate.

    The status of the relevant model changes to Inactive. The types and aspects associated with this model are no longer available.

  4. Once you have deactivated the model, you can delete it by clicking Delete from the Actions drop-down list.

    Note: If you have created a filter for a custom model, remember to remove the filter from the Search Manager [272] when you delete the model.

    The deleted model is removed from the Model Manager.

Parent topic: Managing models [261]

Exporting/importing models

Model Manager provides a feature for exporting and importing models across different repositories.

You can export and import only those models which are created using the Model Manager.

Exporting a model

Model Manager allows you to export layouts, custom types, aspects, and their associated properties for use in other repositories.

To export a model, follow the steps below:
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the Actions drop-down list for the model you want to export.
  3. Click Export.

    This will save the model locally on your computer as a ZIP package.

Importing a model

You can import a model in Model Manager only as a ZIP package.
Note: You can't import models with the same name as the existing models in Model Manager. Model names must be unique.
To import a model, follow the steps below:
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the Import Model and select a ZIP file to import.

    Note: You can only import ZIP files that have been exported from Model Manager.

    The imported model appears in the Custom Models table on the Model Manager page.

Parent topic: Managing models [261]

Managing custom types, aspects, and properties

You can create and manage custom types, aspects, and properties for your models using the Model Manager tool.

  • Creating new custom types and aspects [273] A model can have one or more custom types and aspects. You can create new custom types and aspects using the Model Manager.
  • Editing custom types and aspects [274] Use this information to edit a custom type and an aspect.
  • Deleting custom types and aspects [275] The delete action on a custom type and aspect depends on the status of the model.
  • Creating a new property for custom types and aspects [276] Properties are pieces of metadata associated with a particular custom type and / or aspect. Both types and aspects can have one or more properties.
  • Editing a property for custom types and aspects [277] Use this information to edit a type property.
  • Deleting a property for custom types or aspects [278] The delete action on a property depends on the status of the model, whether or not the property has been applied to a file, and whether the property has been used.
  • Configuring models - custom types, aspects, and properties [279] Depending on the status of the model, the Model Manager tool limits which fields you can edit while configuring or editing models.
  • Using the Layout Designer [280] Use the Layout Designer to define how the properties you create using the Model Manager are displayed on the Edit Properties page in Alfresco Share.
Parent topic: Content modeling with Model Manager [14]

Creating new custom types and aspects

A model can have one or more custom types and aspects. You can create new custom types and aspects using the Model Manager.
Important: Within a model, the custom types and aspects must have unique names.
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the model name for which you want to add the custom type and / or the aspect.

    The relevant model page appears. This page shows the existing custom types and aspects associated with the selected model.

  3. To create a new custom type or aspect, click on the relevant tab.
    • To create a type, click Create Custom Type. The Create Custom Type window appears.

    • To create an aspect, click Create Aspect. The Create Aspect window appears.

  4. Enter the details for the new custom type and / or the aspect. Fields marked with an asterisk (*) are required.

    For custom type:

    For aspect:

    1. Enter a name for the type and / or aspect.

      Only alphanumeric characters, hyphens (-), and underscores (_) are allowed. The model name will automatically prefix the model namespace.

    2. Select the parent type for the type and / or aspect.

      Note: The parent type must either be a sub-type of the cm:content type or cm:folder type. The custom type will inherit all the properties and aspects assigned to the parent.
      Note: The aspect will inherit all the properties and aspects assigned to the parent. The default parent type is none.
    3. Enter an optional display label for the type and / or aspect.

      The display label is shown to the users as the model name in the New Type drop down in Alfresco Share.

      For example, Invoice.

    4. Enter an optional description of the type and / or aspect.
  5. Click Create.

    For custom type: The new custom type appears in the Custom Types table. The name of the custom type is of the format, Prefix:Custom type name. Additional information displayed in the table includes the type name, display label, parent, and the actions (Layout Designer [281], Edit [282], Delete [283], and Find Where Used*) that can be performed on the type.

    For aspects: The new aspect appears in the Aspects table. The name of the custom type is of the format, Prefix:Aspect name. Additional information displayed in the table includes the aspect name, display label, parent, and the actions (Layout Designer [281], Edit [282], Delete [283], and Find Where Used*) that can be performed on the aspect.
    Note: * The Find Where Used option searches and locates all the nodes to which the relevant type or aspect has been applied, and displays the result on the Search result page.
Parent topic: Managing custom types, aspects, and properties [262]

Editing custom types and aspects

Use this information to edit a custom type and an aspect.
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the relevant model from the Custom Models list.

    The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.

  3. To edit a custom type or aspect, perform the following action:
    • For the type you want to edit, click Edit from the Actions drop-down list. The Edit Custom Type window appears.

    • For the property type you want to edit, click Edit from the Actions drop-down list. The Edit Aspect window appears.

  4. Edit the relevant properties.

    • For custom type: For an inactive model, you can edit all the fields except Name. If a model is active, you can edit all the fields except for Name and Parent Type.
    • For aspects: For an inactive model, you can edit all the fields except Name. If a model is active, you can edit all the fields except for Name and Parent Aspect.
  5. Click Save.
Parent topic: Managing custom types, aspects, and properties [262]

Deleting custom types and aspects

The delete action on a custom type and aspect depends on the status of the model.

Prerequisites for deleting custom types and aspects:

For aspects
  • If the model is inactive, you can simply delete the aspect by clicking Delete from the Actions drop-down list for the relevant aspect.
  • If the model is active and the aspect has been applied to a file, you can't delete the aspect. In this case, you need to remove the aspect by navigating to Manage Aspects and removing the aspect from the Currently Selected list. Now, you can deactivate the model.
For custom types
  • If the model is inactive, you can simply delete the custom type by clicking Delete from the Actions drop-down list for the relevant type.
  • If the model is active, you can't delete the custom type using the Model Manager. In this case, you have to delete the file from Alfresco Share and then permanently delete the file from your Share trashcan. For more information, see Emptying your trashcan [284].
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the relevant model from the Custom Models list.

    The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.

  3. For the type or aspect you want to delete, click Delete from the Actions drop-down list.

    If deleting a custom type, the Confirm Custom Type Deletion window appears.

    If deleting an aspect, the Confirm Aspect Deletion window appears.

  4. Click Delete.
For an inactive model, if a type (or aspect) refers to another type (or aspect) within the same model, then you can't delete the referenced type (or aspect).

For example, Model 1 comprises of Type 1 and Type 2. Within Model 1, Type 1 refers to Type 2, so you cannot delete Type 2 as it is being referenced by Type 1. But you can delete Type 1 as it is neither used nor referenced by another type within the same model.

Parent topic: Managing custom types, aspects, and properties [262]

Creating a new property for custom types and aspects

Properties are pieces of metadata associated with a particular custom type and / or aspect. Both types and aspects can have one or more properties.
Note: Due to the design of solr, fields names should not start with a digit. For more information see, Defining Fields [270].
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the relevant model from the Custom Models list.

    The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.

  3. To create a new property, perform the following action:
    • Under the Custom Types list, click the type for which you want to create the new property.

      The property page relevant to the selected type is displayed. This is of the format model name:custom type name.

    • Under the Aspects list, click the aspect for which you want to create the new property.

      The property page relevant to the selected aspect is displayed. This is of the format model name:aspect name.

  4. Click Create Property.

    The Create Property window appears.

  5. Enter the details for the new property. Fields marked with an asterisk (*) are required.
    1. Enter a name for the property.

      Only alphanumeric characters, hyphens (-) and underscores (_) are allowed. The property name will automatically prefix the model namespace.

    2. Select an optional display label for the property.

      The display label is shown as the property name to the end users in Alfresco Share.

    3. Enter an optional description of the property.
    4. Select the data type this property can contain.

      Data types describe the fundamental types of data the repository will use to store properties. Alfresco Content Services supports a wide variety of data types. The available out-of-the-box data types are:
      Option Description
      d:text Specifies a text value or a character string.
      d:mltext Specifies a multilingual text value where many localized representations of the text value may be held.
      d:int Specifies an integer value.
      d:long Specifies a long value. This type is used when a wider range than int is needed.
      d:float Specifies a float value. This data type is mainly used to save memory in large arrays of floating point numbers.
      d:double Specifies a double value. This data type is generally used as the default data type for decimal values.
      d:date Specifies a date value in the format dd/mm/yyyy.
      d:datetime Specifies a date and time value.
      d:boolean Specifies a boolean value which can either be true and false. This data type represents one bit of information and is used for simple flags that track true/false conditions.
  6. Select if the property value is optional or mandatory, and if this is enforced by the system.

    The available options are:

    Option Description
    Optional Specifies that the property value is not required and the property can be left blank.
    Mandatory Specifies that the property value is required and must be filled if Edit Properties in Alfresco Share is to be completed. The property will be marked with an asterisk.
  7. Select if the property should be multi-valued.

    The following table shows each data type's support for single or multiple values, with or without constraints.

    Data type Supports single/multi-value properties Constraints supported Additional information
    d:text Multi-value properties
    • List of Values
    • Minimum / Maximum length
    • Regular expression
     
    d:mltext Multi-value properties
    • List of Values
    • Minimum / Maximum length
    • Regular expression
     
    d:int

    Single-value properties in Model Manager

    Multi-value properties in Share
    • List of Values
    • Minimum / Maximum value
    In Share, d:int does not support multiple values with constraint.
    d:long

    Single-value properties in Model Manager

    Multi-value properties in Share
    • List of Values
    • Minimum / Maximum value
    In AShare, d:long does not support multiple values with constraint.
    d:float

    Single-value properties in Model Manager

    Multi-value properties in Share
    • List of Values
    • Minimum / Maximum value

    In Share, d:float does not support multiple values with constraint.

    Also, d:float does not support the List of Values constraint in Share.
    d:double

    Single-value properties in Model Manager

    Multi-value properties in Share
    • List of Values
    • Minimum / Maximum value

    In Share, d:double does not support multiple values with constraint.

    Also, d:double does not support the List of Values constraint in Share.
    d:date Single-value properties Certain data types should not be used with the List of Values constraints. d:date does not support the List of Values constraint.
    d:datetime Single-value properties Certain data types should not be used with the List of Values constraints. d:datetime does not support the List of Values constraint.
    d:boolean Single-value properties Certain data types should not be used with the List of Values constraints. d:boolean does not support the List of Values constraint.

    If you want the end user to specify multiple values for the property in Edit Properties in Share, then select the Multiple check box. For example, if you have created a property, Languages known and you want the end user to be able to specify multiple answers for this property in Share, then select the Multiple check box in the Create Property window in Model Manager.

  8. Specify an optional default value for this property.

    The value specified in Default Value in Model Manager is displayed as the default property value in Share. Also, the default value should be appropriate for the selected data type. For example, if the data type is d:int, the default value must be an integer.

    The control/layout of Default Value depends on the selected data type. For example, if you select d:text as the data type, then the Default Value layout is a text box, where as if you select d:int as the data type, then the Default Value layout is a spin control.

  9. Select the optional constraint for the property.

    Depending on what constraint option you select, some additional fields are displayed.
    Option Additional fields Condition/Example
    None No constraint applied. No constraint applied.
    Regular expression Regular Expression: Specify a regular expression for the constraint. This field is mandatory.

    Use this constraint if you want the property value specified in Share to match the expression specified in the Model Manager.

    For example, if the constraint expression specified in the Model Manager is [a-z]* , then Share will accept any value in the range of lowercase a to z.

    Minimum / Maximum length
    • Minimum Length: Specify the minimum length allowed for the property.
    • Maximum Length: Specify the maximum length allowed for the property.

      Both the fields are mandatory.

    For example, if the minimum length and maximum length are 1 and 5, respectively, then Share will accept any text or integer value in the range of one to five characters or numbers.
    Minimum / maximum value
    • Minimum Value: Specify the minimum value allowed for the property.
    • Maximum Value: Specify the maximum value allowed for the property.

      Both the fields are mandatory.

    For example, if the Minimum value and maximum value are 1 and 3, respectively, then Share will accept either 1, 2, or 3 as the property value.
    List of Values
    • List of Values: Enter the list of allowed values, with each new item on a new line. This field is mandatory.
    For example, if you specify A, B, and C in List of Values, then Share will display these values in a drop-down list.
    Java class
    • Class name: Enter the fully qualified name of the class to use as a constraint.
    Used for custom constraints implemented in Java.
  10. To enable the property to be used for searching, select the appropriate searching option from the Indexing drop-down list.

    Depending on the data type selected, the following searching options are supported:

    Searching option Description Searchable Supported data types
    None Search is not supported. Use this option if you do not want to use a property for searching. No Non-text data types:
    • int
    • long
    • float
    • double
    • date
    • datetime
    • boolean

    Text date types:

    • text
    • mltext
    • content
    Basic Property is searchable but the values will not be available in the search result filters. Yes Non-text data types:
    • int
    • long
    • float
    • double
    • date
    • datetime
    • boolean
    Enhanced search Use enhanced search if you want to use the property in faceting, stats, sort, and range queries. While this indexing option improves query performance and reduces memory usage, it also requires more disk space for the search index. Yes
    Non-text data types:
    • int
    • long
    • float
    • double
    • date
    • datetime
    Free text Property is searchable but the values will not be available in the search result filters. Yes

    Text date types:

    • text
    • mltext
    • content
    List of values - whole match This indexing option enables you to filter on a property in the search results while searching for the whole term. Yes

    Text date types:

    • text
    • mltext
    • content
    List of values - partial match This indexing option enables you to filter on a property in the search results while searching the property using wildcard characters. Yes

    Text date types:

    • text
    • mltext
    • content
    Pattern - unique matches This indexing option enables you to use unique identifiers which are searched on the basis of the full value of the property. The property itself will not be shown as a filter in the search results. Yes

    Text date types:

    • text
    • mltext
    • content
    Pattern - many matches This indexing option enables you to use identifiers which could be searched on the basis of the full value or via the wild card characters. The property itself will not be shown as a filter in the search results. Yes

    Text date types:

    • text
    • mltext
    • content

    Note: Different values can have an impact on the search performance, memory requirement, and disk storage requirement for your installation. For very large repositories, the values can have a significant impact; however, for most installations the default settings are fine. For properties that will be used for search filters, it is important to use the correct value as shown in the above table.
    Note: For more information on setting up search filters using the Search Manager, see Search Manager [272].
  11. To create a new property, click Create. To save and create another property, click Create and Start Another or click Cancel if you do not want to save the changes.

    The property created appears in the Properties table for the selected type or aspect. The property name is of the format, prefix:property name.

    Additional information displayed in the table includes the property name, display label, data type, requirement, default value, multivalued, and the actions (Edit and Delete) that can be performed on the property.

Parent topic: Managing custom types, aspects, and properties [262]

Editing a property for custom types and aspects

Use this information to edit a type property.
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the relevant model from the Custom Models list.

    The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.

  3. To edit a property, perform the following action:
    • Under the Custom Types list, click the property you want to edit.

      The property page relevant to the selected type is displayed. This is of the format model name:custom type name.

    • Under the Aspects list, click the property you want to delete.

      The property page relevant to the selected aspect is displayed. This is of the format model name:aspect name.

  4. For the property you want to edit, click Edit from the Actions drop-down list.

    The Edit Property window appears.

  5. Edit the relevant properties.

    For a model with Inactive status, you can edit all the properties except Name. If a model is Active, you can edit all the properties except for Name, Data Type, Requirement, and Multiple.

  6. Click Save.
Parent topic: Managing custom types, aspects, and properties [262]

Deleting a property for custom types or aspects

The delete action on a property depends on the status of the model, whether or not the property has been applied to a file, and whether the property has been used.

Prerequisites for deleting a property for custom types and aspects:

For aspects
  • If the model is inactive, you can simply delete the property by clicking Delete from the Actions drop-down list for the relevant property.
  • If the model is active and the aspect has been applied to a file in Share, but the property has not been used, you can delete the property by clicking Delete from the Actions drop-down list for the relevant property. The aspect will still be applied to the file but the deleted property will no longer be visible on the Edit Properties page in Alfresco Share.
  • If the property has been used, including in the version history or content in the archive store, then it cannot be removed. An admin should create a new aspect with the desired properties, then create a script to: add it to the content which has the old aspect, migrate data between the old and new aspect, and remove the old aspect.
Note: When deleting a property, remember to update the Layout Designer and delete any search filter that you may have created for that property.
For custom types
  • If the model is inactive, you can simply delete the property by clicking Delete from the Actions drop-down list for the relevant property.
  • If the model is active, you can delete the property if it was created after the type was applied to a file. Once the property is applied to a file, it cannot be deleted using the Model Manager. In this case, you need to delete the file from Share and then permanently delete the file from the Share trashcan.
  • If a model's custom type is applied to a file, then the associated properties:
    • can be deleted, if the user does not edit or save the properties via the Edit Properties option in Share.
    • cannot be deleted, if the property is created with the default value and then the type is applied to a file on Share.
    • can be deleted, if the property is created for a type which is already applied to the file.
  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the relevant model from the Custom Models list.

    The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.

  3. To delete a property, perform the following action:
    • Under the Custom Types list, click the type whose property you want to delete.

      The property page relevant to the selected type is displayed. This is of the format model name:custom type name.

    • Under the Aspects list, click the aspect whose property you want to delete.

      The property page relevant to the selected aspect is displayed. This is of the format model name:aspect name.

  4. For the property you want to delete, click Delete from the Actions drop-down list.

    The Delete Property window appears.

  5. Click Delete.
Parent topic: Managing custom types, aspects, and properties [262]

Configuring models - custom types, aspects, and properties

Depending on the status of the model, the Model Manager tool limits which fields you can edit while configuring or editing models.

For an Inactive Model, you can edit all the fields except for Name. For an Active Model, the following table shows the list of fields that you can or can't edit for a given custom type, aspect, and property.

Parent topic: Managing custom types, aspects, and properties [262]

Using the Layout Designer

Use the Layout Designer to define how the properties you create using the Model Manager are displayed on the Edit Properties page in Alfresco Share.
The Layout Designer provides a simple, visual representation of your page layout in the editor using horizontal sections and vertical columns. By adding multiple sections with different column configurations you can build quite complex layouts very easily. The Layout Designer consists of a layout area in the center, the layout elements on the top, and the properties arranged vertically on the left of the layout area.

Components of the Layout Designer

Layout element

The layout elements render heading text and panel arrangement with one, two or three rows. These elements are reusable and can be used multiple times on the layout area. There are four different options in the layout elements:
  • Single column panel
  • Double column panel
  • Wide left double column panel
  • Triple column panel

Properties

The properties are intended for single use only. To use the properties, drag them from the side onto the elements. Once the is used, it is automatically removed from the left panel.

For information on how to create properties, see creating a new property for custom type or aspect [285].

Create Property

Enables you to create a new property from inside the Layout Designer using the Create Property window.

To use the Property Layout Designer, follow the steps below:

  1. Click Admin Tools, and then click Model Manager.

    The Model Manager page is displayed.

  2. Click the relevant model from the Custom Models list.

    The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.

  3. To define how properties appear on the Edit Properties page in Share, click Layout Designer from the Actions drop-down list for the relevant type or aspect.

    Note: If you do not apply the newly created property to the Layout Designer, then neither the type nor its property will be available for use in Share.

    The Layout Designer page is displayed.

  4. Drag the required layout elements from top onto the layout area.

    After adding the layout elements onto the layout area, you can either edit, reorder, or delete the elements.

    • Edit: To edit the layout elements, click anywhere on the element's top panel showing the element name. This displays the Edit Properties window, which enables you to change the column configuration, specify the panel label, and select the panel appearance.
    • Reorder: To reorder the layout elements on the layout area, hover over on the element's top right corner and select or to move the element up or down a place.
    • Delete: To remove the layout element from the layout area, hover over on the element's top right corner and select .
  5. Drag the required properties from the side onto the elements.

    After adding the properties onto the layout elements, you can either edit, reorder, or delete the elements.

    • Edit: To edit the property, click anywhere on the property. This displays the Edit Properties page, which displays the property name, label, and type information. It also enables you to manage the following attributes:
      • Form control: Select the type of form control shown to the end user in Share. The form controls displayed in the Layout Designer depend on the data type of the property.
        Form control Description Supported data type
        Default Allows the user to enter a value based on the selected data type. For example, if the selected data type is d:int, the user will have to specify an integer value.
        • int
        • text
        Number Allows the user to enter a number. int
        Text field Allows the user to type a small amount of text. If you need to obtain more than one line of input from the user, use a text area. text
        Text area Allows multi-line text input and can hold an unlimited number of characters. text
        Rich text Allows text to be formatted with common formatting options, such as bold and italics. text
        Password field Displays characters as masked, such as asterisks or circles. text
        Mimetype Enables you to identify files based on their nature and format. mimetype
        Categories Enables you to organize and categorize your content into related groups to form a hierarchy. cm:categories
        Taggable Enables tagging of content items using keywords. cm:taggable
      • View mode: Specifies how the property should be displayed in Share.
        View mode options Description
        Any Displays the property on the details page under Properties and also on the Edit Properties page.
        View Displays the property only on the details page under Properties.
        Edit Displays the property only on the Edit Properties page.
      • Style: Enables you to impart text formatting options to the property when it is displayed in Share. The following options are available: bold, underline, italics, font colour, and background colour.
      • Style class: Enables you to add your own css class.
      • Read only: Select this checkbox to make the property read-only in Share. The Read only option overwrites the View mode option.
      • Force display: For the 'standard' content type properties, Force display ensures that the property is visible on view/edit forms even if the type does not actually have that property applied from its aspect. An example of this is titled, which is a part of the cm:titled aspect that is not applied to a file until the property is first set.
      • Hidden: Enables you to set the value of the property but it will not visible to the user in Share. For example, you need a property with a default value that must always be applied. In this case, you can create a property with some default value and mark it as Hidden so it is not visible to the user but its value is still set by the system.
    • Reorder: To reorder the property on the layout element, hover over on the property and select or to move the property up or down a place.
    • Delete: To remove the property from the layout element, hover over on the property and select . The deleted property reappears in the Properties list on the Layout Designer.
  6. To save your design, click Save or click Clear to clear the layout area. To apply the default layout design, click Apply Default Layout.
To enable the properties layout design in Share, you must activate and apply the relevant model to file(s) in Share.
Parent topic: Managing custom types, aspects, and properties [262]

Tutorial: creating and using models in Alfresco Share

In this tutorial you will learn how to create custom models and implement content modeling using the Model Manager.

You will perform a step-by-step walk-through of creating and using models, custom types, aspects, and their properties in Share.

In this tutorial we assume that Alfresco Content Services is implemented in a fictitious company called DemoCo as their ECM solution for managing content on their new website. DemoCo wants to add new types of content (for example, white papers) to their website and track metadata for all their files in the repository.

For this purpose, DemoCo needs to create a new model, Document with a custom type called whitePaper. If a document is a white paper, then DemoCo would want to capture its writer's name and domain area. Also, for each document, DemoCo wants to determine if the content needs to be shown on their website. If yes, there should be a flag to indicates that the content is active and the date when the content was set to active.

So, let's start by creating a new model called Document. It has a custom type - whitePaper with properties writer and domain. The model has an aspect - Webable with properties published and isActive.

  • Step 1: Navigate to Model Manager [286]
  • Step 2: Create a new model, Document [287]
  • Step 3: Create a new type, whitePaper [288]
  • Step 4: Create new type properties, writer and domain [289]
  • Step 5: Add new type properties to the Layout Designer [290]
  • Step 6: Create new aspect, webable [291]
  • Step 7: Create new aspect properties, published and isActive [292]
  • Step 8: Add new aspect properties to the Layout Designer [293]
  • Step 9: Activate the model, Document [294]
  • Step 10: Apply type (whitePaper) and aspect (webable) to a file in Share [295]
Step 1: Navigate to Model Manager
  1. Click Admin Tools.
  2. Under Tools, click Model Manager.

    The Model Manager page is displayed.

Step 2: Create a new model, Document
  1. Click Create Custom Model.
    In the Create Model window, specify the following:
    • Namespace: http://www.democo.com/model/document/1.0
    • Prefix: dc
    • Name: Document

  2. Click Create.

    The new model, Document appears in the Custom Models table on the Model Manager page. The current status of the model is Inactive.

back to top [296]

Step 3: Create a new type, whitePaper
  1. Click the model, Document.

    The Document model page is displayed.

  2. To create a type - whitePaper, click Create Custom Type.

    The Create Custom Type window appears.

  3. In the Name field, enter whitePaper.
  4. In the Display Label field, enter White Paper.
  5. Specify other optional fields, if required.

  6. Click Create.

    The new custom type, dc:whitePaper appears in the Custom Types table.

Step 4: Create new type properties, writer and domain
  1. Under the Custom Types list, click dc:whitePaper.

  2. Click Create Property.
  3. Enter the details of the new property, writer:
    • In the Name field, enter writer.
    • In the Display Label field, enter Writer.
    • From the Data Type drop-down list, select d:text.
    • To make the property mandatory in Share, select Mandatory from the Requirement drop-down list.
    • Specify other optional fields, if required.

  4. Click Create and Start Another.
  5. Enter the details of the new property, domain:
    • In the Name field, enter domain.
    • In the Display Label field, enter Domain.
    • From the Data Type drop-down list, select d:text.
    • From the Constraints drop-down list, select List of Values.
    • In the List of Values field, enter Engineering, Marketing, HR, Sales, Finance, and Operations in separate lines.
    • Select Sort Alphanumerically to display the above specified values in an alphabetical order in Share.
    • Specify other optional fields, if required.

  6. Click Create.

    back to top [296]

Step 5: Add new type properties to the Layout Designer
  1. Navigate to the page displaying the custom types list.
  2. Click Layout Designer from the Actions drop-down list for the type, dc:whitePaper.

    The Layout Designer page is displayed.

  3. Drag the double column panel layout from top onto the layout area.
  4. To specify the panel label, click anywhere on the element's top panel displaying the label, double column panel.

    This displays the Edit Properties window.

  5. In the Label field, enter Details.
  6. Configure other optional fields, if required.
  7. Drag the properties, writer and domain onto the Details element.
  8. To configure the properties, click anywhere on the property.
  9. On the Layout Designer, click Save.

Step 6: Create new aspect, webable
  1. Navigate to the Model Manager page.
  2. Click the model, Document.

    The Document model page is displayed.

  3. To create new aspect - webable, click Create Aspect.

    The Create Aspect window appears.

  4. In the Name field, enter webable.
  5. In the Display Label field, enter Webable.
  6. Specify other optional fields, if required.
  7. Click Create.

    The new aspect, dc:webable appears in the Aspects table.

back to top [296]

Step 7: Create new aspect properties, published and isActive
  1. Under the Aspects list, click dc:webable.
  2. Click Create Property.
  3. Enter the details of the new property, published:
    • In the Name field, enter published.
    • In the Display Label field, enter Published.
    • From the Data Type drop-down list, select d:datetime.
    • Specify other optional fields, if required.
  4. Click Create and Start Another.

  5. Enter the details of the new property, isActive:
    • In the Name field, enter isActive.
    • In the Display Label field, enter Is Active.
    • From the Data Type drop-down list, select d:boolean.
    • From the Default Value drop-down list, select False.
    • Specify other optional fields, if required.
  6. Click Create.

back to top [296]

Step 8: Add new aspect properties to the Layout Designer
  1. Navigate to the page displaying the aspects list.
  2. Click Layout Designer from the Actions drop-down list for the aspect, dc:webable.

    The Layout Designer page is displayed.

  3. Drag the single column panel layout from top onto the layout area.
  4. To specify the panel label, click anywhere on the element's top panel displaying the label, single column panel.

    This displays the Edit Properties window.

  5. In the Label field, enter Publication details.
  6. Configure other optional fields, if required.
  7. Drag the properties, published and isActive onto the Publication details element.
  8. To configure the properties, click anywhere on the property.
  9. On the Layout Designer, click Save.

Step 9: Activate the model, Document
  1. Navigate to the Model Manager page.
  2. Click the Actions drop-down list for the model, Document.
  3. Click Activate.

    The status of Document changes to Active.

Now that we have created a new model with its custom type and aspect, let's see how we can use it to capture a file's metadata in Share.

To do so, follow the steps below:

Step 10: Apply type (whitePaper) and aspect (webable) to a file in Share
  1. In your site, click Document Library to access the library.
  2. Click on a file in the library to view it in the file preview screen.
  3. To apply the type, perform the following steps:
    1. Under Document Actions, click Change Type.

    2. In the Change Type window, select whitePaper (dc:whitePaper) from the New Type drop-down list.

    3. Click OK.

      The type (dc:whitePaper) and its properties (writer and domain) are successfully applied to your file.

      The type properties are displayed on the file preview page, under Properties. You can edit these properties using Edit Properties under Document Actions.

    4. In the Writer field, enter User1.
    5. In the domain field, select Sales.
    6. Click Save.
  4. To apply the aspect, perform the following steps:
    1. Under Document Actions, click Manage Aspects.
    2. In the Available to Add list, click  next to Webable.

      Click  to remove any existing aspects from the Currently Selected list.

    3. Click Apply changes.

      The aspect (Webable) and its properties (Published and Is Active) are successfully applied to the file.

      The aspect properties are displayed on the file preview page, under Properties. You can edit these properties using Edit Properties under Document Actions.

    4. Select Is Active.
    5. In the Published field, enter the date and time as 31/07/2015 and 10:00, respectively.
    6. Click Save.

    The updated information is displayed on the file preview page, under Properties.

    In this tutorial, you learned how to create and apply models, custom types, and aspects using the Model Manager to capture metadata about files.

back to top [296]

Parent topic: Content modeling with Model Manager [14]
Related concepts
Model Manager video tutorials [297]

Model Manager video tutorials

Watch these videos to see how you can create and use models, custom types, and aspects with the Model Manager.
  • Create models with Model Manager [298] Learn how create models, custom types, and aspects using the Model Manager.
  • Use models [299] Learn how to use models in Alfresco Share.
Parent topic: Content modeling with Model Manager [14]

Create models with Model Manager

Learn how create models, custom types, and aspects using the Model Manager.

Parent topic: Video tutorials [300]
Parent topic: Model Manager video tutorials [264]

Use models

Learn how to use models in Alfresco Share.

Parent topic: Video tutorials [300]
Parent topic: Model Manager video tutorials [264]

Configuring Alfresco Mobile

Alfresco Content Services Administrators can easily define the experience for their Alfresco Mobile users by choosing what each user sees in the Alfresco Mobile menu.

For example you could set up a profile for your Sales team, so that when they use Alfresco Mobile they can drill straight into pricelists and sales tools without having to search for them. Another profile might give your IT team quick access to any outstanding Support tasks they have.

You can create multiple different configurations and assign each one to a profile. You can then choose whether to assign a profile to users, or to let them select from a range of profiles.

You don't need to do any code modification or customization of the Alfresco Mobile app to set up profiles. You just add a configuration file to your Alfresco Content Services server and Alfresco Mobile does the rest.

From Alfresco Mobile for Android 1.5 onwards, the mobile app has included the option to set up a configuration file where you can modify and customize objects such as views, actions, themes, URLs, and more. This file is created by a developer or administrator using JSON formatting and conventions. See Creating the configuration file [301] for more.

Note: Alfresco Mobile retrieves details from the file using its configuration service. The service typically retrieves the configuration from the server the app is currently attached to. It can also accept configuration from other sources, for example, a client application may provide user configuration options that allow individual users to customise their app.

You can modify the configuration file directly from Alfresco Mobile by browsing to it in the repository. Whenever an update is made to the file, it will be replicated in your users Alfresco Mobile apps the next time they start a new session.

Note: You can also localize the Alfresco Mobile configuration file [302].
  • Installing the configuration file [303] The Alfresco Mobile configuration file that you create needs to be stored on the Alfresco Content Services server.
  • Creating the configuration file [301] Use the configuration file to customize Alfresco Mobile for your users.
  • Localizing the configuration file [302] You can create additional files to localize the Alfresco Mobile configuration file.
Parent topic: Configuring [28]

Installing the configuration file

The Alfresco Mobile configuration file that you create needs to be stored on the Alfresco Content Services server.

The file you create overrides the configuration file that's built into the app giving the default menu structure. You can view the built in configuration files for reference for both iOS [304] and Android [305].
  1. Create the JSON configuration file following the instructions and examples in Alfresco Mobile configuration file [301] and related topics.
  2. Add the file to /Company Home/Data Dictionary/Mobile/ in your repository.

    Once the file is added it's automatically applied to all Alfresco Mobile for Android connections to your server the next time the user starts a new session. You can make changes and updates to the file whenever you need to.

Parent topic: Configuring Alfresco Mobile [15]

Creating the configuration file

Use the configuration file to customize Alfresco Mobile for your users.

The configuration file is a JSON file which you create and add to your repository. It must be named configuration.json. It's made up of six JSON objects, five of which are configurable.

{
   "info": {},
   "repository": {},
   "features": [],
   "profiles": {},
   "view-groups": [],
   "views": {}
 }
Each of these objects controls the configuration of a different part of the app. The Info object is used for versioning.
Note: You can also associate a localization file with the configuration file.
  • Sample configuration file [306] This sample Alfresco Mobile configuration file shows how you can customize the file.
  • Selecting an Alfresco Mobile version [307] Use the Info object to ensure backwards compatibility and configuration versioning.
  • Selecting a repository [308] The Repository object contains repository configuration details.
  • Turning Alfresco Mobile features on and off [309] Use the Features object to turn Alfresco Mobile features on and off.
  • Creating Alfresco Mobile profiles [310] Use the Profiles object to store multiple configurations in a single configuration file.
  • Setting profile availability [311] When you create a new mobile profile it's available to all of your users by default.
  • Creating Alfresco Mobile user menus [312] Use the View object to define Alfresco Mobile user menu options.
  • Creating user menu groups [313] The view-groups object is a type of view in which you can store other views.
Parent topic: Configuring Alfresco Mobile [15]

Sample configuration file

This sample Alfresco Mobile configuration file shows how you can customize the file.

All IDs are user-defined, so it's recommended that you set up a system for using consistent IDs. Views and features also use types, which are pre-defined types.

For more information on how to create a configuration file, see the related object topics.

{
  "info": {
    "schema-version": 0.1
  },
  "repository": {
    "share-url": "https://hostname:port/share"
  },
  "profiles": {
    "default": {
      "default": true,
      "label-id": "Default Profile",
      "description-id": "Description of the Default Profile",
      "root-view-id": "views-menu-default"
    },
    "sample": {
      "label-id": "profile.sample.title",
      "description-id": "profile.sample.summary",
      "root-view-id": "views-sample"
    }
  },
  "view-groups": [
    {
      "id": "views-menu-default",
      "label-id": "Default Menu",
      "items": [
        {
          "item-type": "view-id",
          "view-id": "view-activities-default"
        },
        {
          "item-type": "view-id",
          "view-id": "view-repository-default"
        }
      ]
    },
    {
      "id": "views-sample",
      "items": [
        {
          "item-type": "view-group-id",
          "view-group-id": "views-sample-project"
        }
      ]
    },
    {
      "id": "views-sample-project",
      "label-id": "Sample Project",
      "items": [
        {
          "item-type": "view",
          "view": {
            "id": "activities",
            "type": "org.alfresco.client.view.activities",
            "label-id": "Project Activities",
            "params": {
              "siteShortName": "swsdp"
            }
          }
        },
        {
          "item-type": "view",
          "view": {
            "id": "site",
            "type": "org.alfresco.client.view.repository",
            "label-id": "Sample Site",
            "params": {
              "path": "/sites/swsdp/documentLibrary"
            }
          }
        }
      ]
    }
  ],
  "views": {
    "view-activities-default": {
      "type": "org.alfresco.client.view.activities"
    },
    "view-repository-default": {
      "type": "org.alfresco.client.view.repository"
    }
  }
}
}
Parent topic: Creating the configuration file [301]

Selecting an Alfresco Mobile version

Use the Info object to ensure backwards compatibility and configuration versioning.
You need to add one of the two schema-versions to the info code block.
  • Alfresco Mobile for Android 1.5 supports only schema-version 0.1
  • Alfresco Mobile for Android 1.6 and later supports schema-version 0.1 and 0.2

If you're using 1.6 or later it's recommended to use version 0.2, as 0.1 doesn't give full support.

"info": {
   "schema-version": 0.2
}
Parent topic: Creating the configuration file [301]

Selecting a repository

The Repository object contains repository configuration details.

Enter the Alfresco Share url for your Alfresco Content Services installation.

"repository":{
   "share-url": "https://hostname:port/share"
}
Parent topic: Creating the configuration file [301]

Turning Alfresco Mobile features on and off

Use the Features object to turn Alfresco Mobile features on and off.
Note: All IDs are user-defined, so it's recommended that you set up a system for using consistent IDs. Views and features also use types, which are pre-defined.
"features":[
    {
      "id": "<feature-id>",
      "type": "<feature-type>",
      "enable": true|false
    }
  ],
Currently the only feature type available is Analytics, which uses the type:
org.alfresco.client.feature.analytics
You can use this to turn Alfresco Mobile analytics on and off. The following example shows how it would look when turned off.
"features":[
    {
      "id": "feature-analytics-default",
      "type": "org.alfresco.client.feature.analytics",
      "enable": false
    }
  ],
Parent topic: Creating the configuration file [301]

Creating Alfresco Mobile profiles

Use the Profiles object to store multiple configurations in a single configuration file.

This means that you can set up different configurations for different users or situations. You need to add at least one profile to a configuration file.

Note: All IDs are user-defined, so it's recommended that you set up a system for using consistent IDs. Views and features also use types, which are pre-defined.
 {
   "<profile-id>":
   {
      "default": true,
      "label-id": "<label-id>",
      "description-id": "<description-id>",
      "root-view-id": "<view-id> or <view-group-id>"
   }
}

The following example shows how your default profile might look.

 {
   "<default>":
   {
      "default": true,
      "label-id": "Default Profile",
      "description-id": "Description of the Default Profile",
      "root-view-id": "views-menu-default"
   }
}

And this is how a profile set up for your Sales team could look.

 {
   "<sales>":
   {
      "label-id": "Sales",
      "description-id": "Sales Dashboard",
      "root-view-id": "views-menu-sales"
   }
}
Parent topic: Creating the configuration file [301]

Setting profile availability

When you create a new mobile profile it's available to all of your users by default.

You can add evaluators to a profile and configure it so that the profile is only available for specified users.

Note: This feature is based on user name and not user groups.
The evaluator is isUser and is added directly to the profile that you want to restrict availability for. In the example below the profile is only available to members of the Sales Team.
"profiles":  {
   "sales":
   {
      "label-id": "Sales",
      "description-id": "Sales Dashboard",
      "root-view-id": "views-menu-sales"
      "evaluator": "isSalesUser"
      }
    }

In the configuration file you specify the users the evaluator applies to.

"evaluators": {
    "isSalesUser": {
      "type": "org.alfresco.client.evaluator.isUser",
      "params": {
        "users": [
          "JohnNewton",
          "HelenMullally",
          "MikeHatfield"
        ]
      }
    }
  }

Only users that you specify will have the profile available in Alfresco Mobile.

Parent topic: Creating the configuration file [301]

Creating Alfresco Mobile user menus

Use the View object to define Alfresco Mobile user menu options.

You can set up a range of menus, each one containing various options (or view types), from specific sites or searches through to individual files or folders.

For example you could set up a profile for your Sales team, so that when they use Alfresco Mobile they can drill straight into pricelists and sales tools without having to search for them. Another profile might give your IT team quick access to any outstanding Support tasks they have.

Note: All IDs are user-defined, so it's recommended that you set up a system for using consistent IDs. Views and features also use types, which are pre-defined.
  • view-id = required and user-defined
  • label-id = optional and used for display in the Alfresco Mobile menu
  • description-id = optional
  • type = required and pre-defined

 "views" : {
   "<view-id>":
   {
      "label-id": "<label-id>",
      "description-id": "<description-id>",
      "type": "<view-type>"
      "params": {
   }
}

So for example, you could create an Activities menu item that links straight to the activities on your Sales team site.

 "views" : {
   "<view-activities-sales>":
   {
      "label-id": "<Activities>",
      "type": "org.alfresco.client.view.activities"
      "params": {
         "siteShortName": "SalesTeam"
   }
}
See below for more details on the menu items you can add, and examples of how you could implement them.
  • Activities [314]
  • Sites [315]
  • Nodes [316]
  • Favorites [317]
  • Tasks and Workflows [318]
  • Users [319]
  • Local Files [320]
  • Search [321]
  • Sync [322]

Most of these support pagination so that you can customize the number of items displayed. Sync doesn't support pagination.

 "views" : {
            "<view-id>": {
            "type": "<view-type>",
            "params": {
               "pagination": {
                  "maxItems": 1,
                  "skipCount": 1
            }
          }
       }
    }
  • Activities menu items [323] Create menu items to display the activities for a specific user or site.
  • Sites menu items [324] Create menu items to display all sites or a list of selected sites.
  • Nodes menu items [325] Create a menu item to display a link to a file, folder, or search results.
  • Favorites menu items [326] Create menu items to display a list of favorite files or folders.
  • Tasks menu items [327] Create menu items to display a list of tasks.
  • Users menu items [328] You can create menu items to display the profiles of one or more users.
  • Local Files menu items [329] Create menu items to display your device or Alfresco Share Local files.
  • Search menu items [330] Create menu items to display a link to the search screen.
  • Sync menu items [331] Create menu items to display your synced files.
Parent topic: Creating the configuration file [301]

Activities menu items

Create menu items to display the activities for a specific user or site.

Use the type org.alfresco.client.view.activities and then select from the follow parameters:

params Description String Required
userName Displays activities stream for a specific user String No
siteShortName Displays activities stream for a specific site. String No

So for example, you could create an Activities menu item that links straight to the activities on your Sales team site.

 "views" : {
   "<view-activities-sales>":
   {
      "label-id": "<Activities>",
      "type": "org.alfresco.client.view.activities"
      "params": {
         "siteShortName": "SalesTeam"
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Sites menu items

Create menu items to display all sites or a list of selected sites.

Use the type org.alfresco.client.view.sites and then select from the follow parameters:

params Description String Required
show values available : favorites|my|all String No
Note: If you don't enter a parameter then all sites will be shown by default.

So for example, you could create a Site menu item that links straight to your favorite sites.

 "views" : {
   "<view-sites-favorites>":
   {
      "label-id": "<Favorite Sites>",
      "type": "org.alfresco.client.view.sites"
      "params": {
         "show": "favorites"
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Nodes menu items

Create a menu item to display a link to a file, folder, or search results.

There are three different parameter options available that you can use.

Display a folder

Use the type org.alfresco.client.view.repository and then select from the follow parameters:

params Description String Required
path Displays a folder defined by its absolute path String No (exclusive)
nodeRef Displays a folder retrieved by its nodeRef String No (exclusive)
siteShortName Displays the document library folder associated to the specified site String No (exclusive)
folderTypeId Displays the system folder shared|userhome String No (exclusive)
Note: If you don't enter a parameter then the Company Home folder will be displayed by default.

So for example, you could create an menu item that links straight to the document library of your Sales team site.

 "views" : {
   "<view-sales-files>":
   {
      "label-id": "<Sales Files>",
      "type": "org.alfresco.client.view.repository"
      "params": {
         "siteShortName": "SalesTeam"
   }
}

Display search results

Use the type org.alfresco.client.view.repository-search and then select from the follow parameters:

params Description String Required
keywords keywords to search String Yes (exclusive)
isExact Exact search. Requires : keywords String No (exclusive)
fullText Fulltext search. Requires : keywords String No (exclusive)
searchFolderOnly Display a list of folders. Requires : keywords String No (exclusive)
statement CMIS query String Yes (exclusive)
Note: By default a list of files is displayed.

So for example, you could create a menu item that links to all files containing the word Alfresco.

 "views" : {
   "<view-alfresco-files>":
   {
      "label-id": "<Alfresco Files>",
      "type": "org.alfresco.client.view.repository-search"
      "params": {
         "fullText": "Alfresco"
   }
}

Display file or folder

Use the type org.alfresco.client.view.node-details and then select from the follow parameters:

params Description String Required
path Displays a file or folder defined by its absolute path String Yes (exclusive)
nodeRef Displays a file or folder retrieved by its nodeRef String No (exclusive)
Note: By default a list of files is displayed.

So for example, you could create a menu item that links straight to your price list.

 "views" : {
   "<view-price-list>":
   {
      "label-id": "<Price List>",
      "type": "org.alfresco.client.view.node-details"
      "params": {
         "nodeRef": "workspace://SpacesStore/e1db8fed-ded7-45eg-ap30-02abcd1a1a20"
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Favorites menu items

Create menu items to display a list of favorite files or folders.

Use the type org.alfresco.client.view.favorites and then select from the follow parameters:

params Description String Required
filters Enable a filter object Object No
filters/mode Values : all|folders|files String No

So for example, you could create a Favorites menu item that links straight all your favorite files.

 "views" : {
   "<view-favorite-files>":
   {
      "label-id": "<Favorite Files>",
      "type": "org.alfresco.client.view.favorites"
      "params": {
          "filters": {  
             "filters/mode": "files"
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Tasks menu items

Create menu items to display a list of tasks.

Use the type org.alfresco.client.view.tasks and then select from the follow parameters:

params Description String Required
filters Enable a filter object Object No
filters/status Values : any|active|complete String No
filters/due Values : today|tomorrow|week|overdue|none String No
filters/priority Values : low|medium|high String No
filters/assignee Values : me|unassigned|all|none String No
Note: If you don't enter a parameter then your My Tasks will be displayed by default.

So for example, you could create a Tasks menu item that links to all overdue, active high-priority tasks.

 "views" : {
   "<view-tasks-overdue>":
   {
      "label-id": "<Overdue Tasks>",
      "type": "org.alfresco.client.view.tasks"
      "params": {
         "filters": {
           "Status": "active",
           "due": "overdue",
           "priority": "high",
           "assignee": "all",
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Users menu items

You can create menu items to display the profiles of one or more users.

There are two different parameter options available that you can use.

Display a list of users

Use the type org.alfresco.client.view.people and then select from the follow parameters:

params Description String Required
keywords Displays a list of users who match the keywords. For Alfresco Server the keywords can use a query such as "User jobtitle:admin". String Yes (exclusive)
siteShortName Displays a a list of members for the specific site. String Yes (exclusive)

So for example, you could create an menu item that links to all members of your Sales team site.

 "views" : {
   "<view-sales-team>":
   {
      "label-id": "<Sales Team>",
      "type": "org.alfresco.client.view.people"
      "params": {
         "siteShortName": "SalesTeam"
   }
}

Display a single user

Use the type org.alfresco.client.view.person-profile and then select from the follow parameters:

params Description String Required
userName Displays the profile for the specified username. String No
Note: If you don't enter any parameters then the currently logged in users profile will be displayed.

So for example, you could create a menu item that links to John Newton's profile.

 "views" : {
   "<view-profile-johnnewton>":
   {
      "label-id": "<John Newton>",
      "type": "org.alfresco.client.view.person-profile"
      "params": {
         "userName": "JohnNewton"
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Local Files menu items

Create menu items to display your device or Alfresco Share Local files.

There are two different parameter options available that you can use.

Display your device's Local Files

Use the type org.alfresco.client.view.local , no parameters are required.

With this you could create a menu item that links to your device's Local Folder.

 "views" : {
   "<view-local-folder-device>":
   {
      "label-id": "<Local Folder>",
      "type": "org.alfresco.client.view.local"
   }
}

Display Alfresco Share Local Files

Use the type org.alfresco.client.view.person-profile and then select from the follow parameters:

params Description String Required
path Absolute path to the specified folder. String No
Note: If you don't enter any parameters then the Alfresco Share Local Files folder will be displayed.

Parent topic: Creating Alfresco Mobile user menus [312]

Search menu items

Create menu items to display a link to the search screen.

There are two different parameter options available that you can use.

Display the search

Use the type org.alfresco.client.view.search , no parameters are required.

With this you could create a menu item that links to the search.

 "views" : {
   "<view-search>":
   {
      "label-id": "<Search>",
      "type": "org.alfresco.client.view.search"
   }
}

Display an advanced search

Use the type org.alfresco.client.view.search-advanced and then select from the follow parameters:

params Description String Required
type values available : person|document|folder String Yes

So for example, you could create a menu item that links to the search for users.

 "views" : {
   "<view-search-person>":
   {
      "label-id": "<Find People>",
      "type": "org.alfresco.client.view.search-advanced"
      "params": {
         "type": "person"
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Sync menu items

Create menu items to display your synced files.

Use the type org.alfresco.client.view.sync , no parameters are required.

With this you could create a menu item that shows all your synced content.

 "views" : {
   "<view-sync-files>":
   {
      "label-id": "<Synced Files>",
      "type": "org.alfresco.client.view.sync"
   }
}

Parent topic: Creating Alfresco Mobile user menus [312]

Creating user menu groups

The view-groups object is a type of view in which you can store other views.

Store views in a view-group to avoid duplication.

"view-groups": [
    {
      "id": "<view-group-id>",
      "label-id": "<label-id>",
      "description-id": "<description-id>",
      "items": [
        {
          "item-type": "view-id",
          "view-id": "<view-id>"
        },
        {
          "item-type": "view-group-id",
          "view-group-id": "<view-group-id>"
        },
        {
          "item-type": "view",
          "view": {
            "label-id": "<label-id>",
            "description-id": "<description-id>",
            "type": "<view-type>",
            "form-id": "<form-id>",
            "params": {
              "<param-name>": "<param-value>"
            }
          }
        }
      ]
    }
  ]

The following example shows how you might set up a view-group.

 "view-groups": [
    {
      "id": "views-menu-default",
      "label-id": "Default Menu",
      "items": [
        {
          "item-type": "view-id",
          "view-id": "view-activities-default"
        },
        {
          "item-type": "view-id",
          "view-id": "view-repository-default"
        }
      ]
    },
    {
      "id": "views-sample",
      "items": [
        {
          "item-type": "view-group-id",
          "view-group-id": "views-sample-project"
        }
      ]
    },
    {
      "id": "views-sample-project",
      "label-id": "Sample Project",
      "items": [
        {
          "item-type": "view",
          "view": {
            "id": "activities",
            "type": "org.alfresco.client.view.activities",
            "label-id": "Project Activities",
            "params": {
              "siteShortName": "swsdp"
            }
          }
        },
        {
          "item-type": "view",
          "view": {
            "id": "site",
            "type": "org.alfresco.client.view.repository",
            "label-id": "Sample Site",
            "params": {
              "path": "/sites/swsdp/documentLibrary"
            }
          }
        }
      ]
    }
  ]
Parent topic: Creating the configuration file [301]

Localizing the configuration file

You can create additional files to localize the Alfresco Mobile configuration file.
Important: This feature is currently only available for Alfresco Mobile for Android.
These localization files are stored in a Messages folder. The files in this folder contain all the localised strings referenced in the configuration file.
The file names must reflect the locale they represent, for example:
  • English - strings.properties
  • French - strings_fr.properties
  • Spanish - strings_es.properties
  • Italian - strings_it.properties
  • German - strings_de.properties
  • Japanese - strings_ja.properties
Note: Only include localization files for languages that are currently available in Alfresco Mobile.
  1. Create a new folder named Messages at /Company Home/Data Dictionary/Mobile/ in your repository.
  2. Create as many localization files as you require, following the examples below:

    English = strings.properties

    profile.default.title=Default
    profile.default.summary=Default profile
    home.menu.header=Views
    view.properties.title=General
    view.properties.description=Default Properties,

    French = strings_fr.properties

    profile.default.title=D\u00e9faut
    profile.default.summary=Profile par d\u00e9faut
    home.menu.header=Vues par d\u00e9faut
    view.properties.title=General
    view.properties.description=Description,
  3. Add the files to /Company Home/Data Dictionary/Mobile/Messages in your repository.

    Once the files are added they're automatically applied to all localized Alfresco Mobile for Android connections to your server the next time the user starts a new session. You can make changes and updates to the file, and add new localization files, whenever you need to.

Parent topic: Configuring Alfresco Mobile [15]

Configuring the APS Action

This section describes how to install and configure the APS Action. The APS Action is an optional Alfresco Content Services extension that installs an additional Start Process action in the Folder Rules mechanism. This allows users that use both Content Services and Alfresco Process Services to automatically start an APS Process, when a new document is added to a Content Services folder. Both systems must be installed for the action to work.

For more details on how to use the action see Rule actions [332].

To set up the APS Action you need to configure your LDAP user database for common use between Content Services and Process Services. If you don't already have one set up you will need to do so before continuing because it allows both systems to sync their user database against a single LDAP server. If you do not synchronize users with the same LDAP user database, the APS Action will not work.

For information on how to configure an LDAP user database for use with Content Services, and Process Services see Configuring LDAP [333] and Configuring the LDAP settings [334] respectively.

Here is a summary of all the steps required to setup the APS Action:
  1. Enabling Process Services review processes [335].
  2. Adding the repository to Process Services [336].
  3. Install the APS Action AMP [337].
  4. Configuring APS Action in ACS [338].
  • Enabling Process Services review processes [339] By default, the bundled Review Processes app is not created. To create one, add the following line into the <InstallLocation>/lib/activiti-app.properties file.
  • Adding the repository to Process Services [336] You must add a repository from the Identity Management app in Alfresco Process Services.
  • Install the APS Action AMP [337] Install the APS Action AMP.
  • Configuring APS Action in ACS [338] You must configure Alfresco Content Services with Alfresco Process Services server settings in order for them to communicate. In Content Services access tomcat/shared/classes/alfresco-global.properties and add the following parameters and then restart Content Services:
Parent topic: Configuring [28]

Enabling Process Services review processes

By default, the bundled Review Processes app is not created. To create one, add the following line into the <InstallLocation>/lib/activiti-app.properties file.

app.review-workflows.enabled=true

Restart Alfresco Process Services for it to take effect.

Parent topic: Configuring the APS Action [16]

Adding the repository to Process Services

You must add a repository from the Identity Management app in Alfresco Process Services.

To add a repository:

  1. Start the Process Services server and log in as an administrator.
  2. Open the Profile Management (Identity Management) app, and click the Tenants tab > Alfresco Repositories.
  3. In Alfresco Repositories, create a repository that points to the relevant Alfresco Content Services. The following is an example of the form, assuming you are running Content Services on the same machine and on port 8080:

    Field

    Value

    Name

    Server One

    Alfresco tenant

    Tenant name to use in Alfresco. When left blank, it uses the default tenant (-default-).

    Repository base URL

    http://127.0.0.1:8080/alfresco/ [340]

    Share base URL

    http://127.0.0.1:8080/share/ [341]

    Alfresco Version 5.2
    Authentication Select the Enable Share Connector check box.
    Secret This is the common secret that is used for communication between Content Services and Process Services. By default it is “activiti-share-connector-secret”. Set the Secret to be the same as you have for activiti.secret in Content Services.
Note: For the APS Action to work, you must configure the tenant initially as version 5.2, even if your Content Services version is higher. If you intend to use Process Services 1.11 and above with the Identity Service, you can subsequently edit the tenant settings again to set to the correct version.
Note: Once the repository is created, you can see your new repository in the Alfresco Repositories list. If the id is set to 1 and the default values are sufficient then you are finished. However, if it is set to something else, for example 1002, you must stop the server and make sure your id appears as alfresco-1002 in the following files, and then restart your servers:
  • In the Content Services file tomcat/shared/classes/alfresco-global.properties - Override the default by adding a new line with activiti.alfrescoRepositoryName=alfresco-1002

  • In the Process Services file tomcat/lib/activiti-app.properties - The property named integration.login.alfresco-1.secret should be named integration.login.alfresco-1002.secret

Parent topic: Configuring the APS Action [16]

Install the APS Action AMP

Install the APS Action AMP.
  1. Stop the Alfresco server.
  2. Browse to the Alfresco Support Portal [87] and download and unzip the APS Action zip package.
  3. Copy the AMP file to the Alfresco amps_share directory.

    • aps-action-share-6.2.1.amp
  4. To install the AMP file, run the apply_amps.bat file from the Alfresco bin directory.

    Check the output from the script to ensure that the AMP file has installed successfully.

  5. Restart your Alfresco server.
Parent topic: Configuring the APS Action [16]

Configuring APS Action in ACS

You must configure Alfresco Content Services with Alfresco Process Services server settings in order for them to communicate. In Content Services access tomcat/shared/classes/alfresco-global.properties and add the following parameters and then restart Content Services:

  • activiti.domain= the domain of your Process Services application. This is the domain where Process Services is installed for example company-aps.com.
  • activiti.baseUrl= the path of your Process Services application, for example activiti-app.
  • activiti.secret= this is the common secret that will be used for communication between Content Services and Process Services; by default it is activiti-share-connector-secret.
  • activitiRepoConnector.enabled=true this property enables or disables the Start Process action.
Parent topic: Configuring the APS Action [16]

Source URL: https://docs.alfresco.com/6.2/concepts/ch-configuration.html

Links:
[1] https://docs.alfresco.com/outlook/concepts/Outlook-install-intro.html
[2] https://docs.alfresco.com/mm/concepts/mm-install-overview.html
[3] https://docs.alfresco.com/ags/concepts/rm-admin-intro.html
[4] https://docs.alfresco.com/../concepts/configuration-overview.html
[5] https://docs.alfresco.com/../concepts/subsystem-intro.html
[6] https://docs.alfresco.com/../concepts/intro-db-setup.html
[7] https://docs.alfresco.com/../concepts/intro-core.html
[8] https://docs.alfresco.com/../concepts/fileserv-subsystem-intro.html
[9] https://docs.alfresco.com/../concepts/email.html
[10] https://docs.alfresco.com/../concepts/email-templates-intro.html
[11] https://docs.alfresco.com/../concepts/OOo-subsystems-intro.html
[12] https://docs.alfresco.com/../concepts/activemq-overview.html
[13] https://docs.alfresco.com/../concepts/sf-intro.html
[14] https://docs.alfresco.com/../concepts/admintools-cmm-intro.html
[15] https://docs.alfresco.com/../topics/mobile-config.html
[16] https://docs.alfresco.com/../topics/prod-setup.html
[17] https://docs.alfresco.com/../concepts/welcome.html
[18] https://docs.alfresco.com/at-adminconsole.html
[19] https://docs.alfresco.com/admintools.html
[20] https://docs.alfresco.com/global-props-intro.html
[21] https://docs.alfresco.com/jmx-intro-config.html
[22] https://docs.alfresco.com/../concepts/global-props-intro.html
[23] https://docs.alfresco.com/../concepts/maincomponents-disable.html
[24] https://docs.alfresco.com/../concepts/jmx-intro-config.html
[25] https://docs.alfresco.com/../concepts/java-commandline.html
[26] https://docs.alfresco.com/../concepts/modify-alf-apps.html
[27] https://docs.alfresco.com/../concepts/default-files-config.html
[28] https://docs.alfresco.com/../concepts/ch-configuration.html
[29] https://docs.alfresco.com/../tasks/global-props-config.html
[30] https://docs.alfresco.com/../tasks/global-props-composite.html
[31] https://docs.alfresco.com/../tasks/jmx-access.html
[32] https://docs.alfresco.com/../tasks/jmx-jconsole-example.html
[33] https://docs.alfresco.com/../concepts/jmx-enhance.html
[34] https://docs.alfresco.com/jmx-reference.html
[35] https://docs.alfresco.com/../tasks/adminconsole-exportsystemsettings.html
[36] https://docs.alfresco.com/../concepts/jmx-mbeans.html
[37] https://docs.alfresco.com/../tasks/jmx-activate.html
[38] https://docs.alfresco.com/configuration-overview.html
[39] https://docs.alfresco.com/share-configuring-intro.html
[40] https://docs.alfresco.com/search-enterprise/concepts/solr-config-files.html
[41] https://docs.alfresco.com/auth-intro.html
[42] https://docs.alfresco.com/../tasks/config-config.html
[43] https://docs.alfresco.com/../tasks/ext-file-config.html
[44] https://docs.alfresco.com/../tasks/ext-file-activities-config.html
[45] https://docs.alfresco.com/../tasks/bean-config.html
[46] https://docs.alfresco.com/../reuse/conv-syspaths.html
[47] https://github.com/Alfresco/alfresco-repository/blob/alfresco-repository-6.8/src/main/resources/alfresco/subsystems/ActivitiesFeed/default/activities-feed-context.xml
[48] https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-apds/1d1f2b0c-8e8a-4d2a-8665-508d04976f84?redirectedfrom=MSDN
[49] https://docs.alfresco.com/../concepts/subsystem-categories.html
[50] https://docs.alfresco.com/../concepts/subsystem-configuration.html
[51] https://docs.alfresco.com/../concepts/subsystem-props.html
[52] https://docs.alfresco.com/../tasks/subsystem-mount.html
[53] https://docs.alfresco.com/../tasks/subsystem-mount-comp.html
[54] https://docs.alfresco.com/../tasks/subsystem-classpath.html
[55] https://docs.alfresco.com/../tasks/adminconsole-activitiesfeed.html
[56] https://docs.alfresco.com/audit-intro.html
[57] https://docs.alfresco.com/manage-cs-home.html
[58] https://docs.alfresco.com/email-intro.html
[59] https://docs.alfresco.com/fileserv-subsystem-intro.html
[60] https://docs.alfresco.com/googledocs/tasks/googledocs-amp-install.html
[61] https://docs.alfresco.com/imap-intro.html
[62] https://docs.alfresco.com/../tasks/OOo-props-config.html
[63] https://docs.alfresco.com/OOo-subsystems-intro.html
[64] https://docs.alfresco.com/admintools-replication-config.html
[65] https://docs.alfresco.com/search-enterprise/concepts/search-home.html
[66] https://docs.alfresco.com/../tasks/adminconsole-subscriptionservice.html
[67] https://docs.alfresco.com/sync-intro.html
[68] https://docs.alfresco.com/../tasks/adminconsole-systemsettings.html
[69] https://docs.alfresco.com/../tasks/OOo-subsystems-config.html
[70] https://docs.alfresco.com/managing-transformations.html
[71] https://docs.alfresco.com/../tasks/adminconsole-workflowconsole.html
[72] https://docs.alfresco.com/../concepts/amazon-rds.html
[73] https://docs.alfresco.com/../concepts/mariadb-config.html
[74] https://docs.alfresco.com/../tasks/mysql-config.html
[75] https://docs.alfresco.com/../tasks/oracledb-config.html
[76] https://docs.alfresco.com/../tasks/postgresql-config.html
[77] https://docs.alfresco.com/../tasks/sqlserver-config.html
[78] https://docs.alfresco.com/../concepts/db-config-properties.html
[79] https://docs.alfresco.com/../concepts/zeroday-database.html
[80] https://docs.alfresco.com/s3connector/concepts/s3-contentstore-overview.html
[81] https://docs.alfresco.com/../tasks/amazon-aurora-config.html
[82] https://docs.alfresco.com/../tasks/amazon-mysql-config.html
[83] https://docs.alfresco.com/../tasks/amazon-oracledb-config.html
[84] https://docs.alfresco.com/../tasks/amazon-postgresql-config.html
[85] https://docs.alfresco.com/../tasks/amazon-sqlserver-config.html
[86] http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SettingUp.html
[87] http://support.alfresco.com
[88] http://dev.mysql.com
[89] http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html
[90] http://jdbc.postgresql.org/download.html
[91] https://docs.alfresco.com/../concepts/mysql-config-settings.html
[92] http://dev.mysql.com/
[93] https://docs.alfresco.com/5.2/concepts/supported-platforms-ACS.html
[94] http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIJFHHB
[95] http://docs.oracle.com/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
[96] http://www.oracle.com/technetwork/database/features/instant-client/index-100365.html
[97] https://msdn.microsoft.com/en-us/library/ms187030.aspx
[98] http://msdn.microsoft.com/en-us/library/ms189121.aspx
[99] https://docs.alfresco.com/../concepts/mssql-config-settings.html
[100] http://technet.microsoft.com/en-us/library/ms189858.aspx
[101] https://dev.mysql.com/doc/refman/5.6/en/analyze-table.html
[102] https://www.postgresql.org/docs/10/maintenance.html
[103] https://docs.oracle.com/cd/B19306_01/server.102/b14211/stats.htm#g49431
[104] https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-index-transact-sql?redirectedfrom=MSDN&amp;view=sql-server-ver15
[105] https://docs.microsoft.com/en-us/sql/t-sql/statements/update-statistics-transact-sql?redirectedfrom=MSDN&amp;view=sql-server-ver15
[106] https://docs.alfresco.com/../concepts/alfresco-read-only.html
[107] https://docs.alfresco.com/../tasks/deploy-contextpath.html
[108] https://docs.alfresco.com/../concepts/jvm-tuning.html
[109] https://docs.alfresco.com/../concepts/cmd-line-config.html
[110] https://docs.alfresco.com/../concepts/config-alf-webproxy.html
[111] https://docs.alfresco.com/../concepts/sysadmin-subsystem-intro.html
[112] https://docs.alfresco.com/../concepts/jvm-prop.html
[113] https://docs.alfresco.com/../concepts/configure-ssl-intro.html
[114] https://docs.alfresco.com/../tasks/cache-config.html
[115] https://docs.alfresco.com/../tasks/mimetype-add.html
[116] https://docs.alfresco.com/../tasks/metadata-config.html
[117] https://docs.alfresco.com/../concepts/aspect-about.html
[118] https://docs.alfresco.com/../concepts/versioning.html
[119] https://docs.alfresco.com/../concepts/replication.html
[120] https://docs.alfresco.com/../tasks/contenttrans-customize.html
[121] https://docs.alfresco.com/../concepts/admin-indexes.html
[122] https://docs.alfresco.com/../tasks/cron-defer.html
[123] https://docs.alfresco.com/../concepts/enabling-cors.html
[124] https://docs.alfresco.com/../tasks/adminconsole-open.html
[125] https://docs.alfresco.com/share-change-port.html
[126] https://docs.alfresco.com/deploy-contextpath.html%23deploy-contextpath
[127] https://docs.alfresco.com/deploy-contextpath.html%23deploy-contextpath__alfresco-global
[128] https://docs.alfresco.com/deploy-contextpath.html%23deploy-contextpath__step-1
[129] https://docs.alfresco.com/deploy-contextpath.html%23deploy-contextpath__share-config
[130] https://docs.alfresco.com/deploy-contextpath.html%23deploy-contextpath__solr
[131] https://docs.alfresco.com/../concepts/jvm-settings.html
[132] https://docs.alfresco.com/jvm-prop.html
[133] https://docs.alfresco.com/../concepts/jvm-lowend.html
[134] https://docs.alfresco.com/../concepts/jvm-newsize.html
[135] https://docs.alfresco.com/../tasks/props-set.html
[136] https://docs.alfresco.com/../tasks/bean-override.html
[137] https://docs.alfresco.com/../concepts/sysadmin-subsystem-props.html
[138] https://docs.alfresco.com/aos/concepts/aos-intro.html
[139] https://docs.alfresco.com/search-enterprise/concepts/solrsecurity-intro.html
[140] https://docs.alfresco.com/../tasks/configure-ssl-prod.html
[141] https://docs.alfresco.com/../tasks/configure-ssl-test.html
[142] https://docs.alfresco.com/configure-ssl-prod.html
[143] https://docs.alfresco.com/../concepts/ch-install.html
[144] https://docs.alfresco.com/search-enterprise/concepts/solr-install-config.html
[145] https://docs.alfresco.com/alf-war-install.html
[146] https://tomcat.apache.org/tomcat-8.5-doc/config/http.html#SSL_Support_-_SSLHostConfig
[147] https://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL_Support
[148] https://docs.alfresco.com/aos/concepts/aos-issues.html
[149] https://docs.alfresco.com/5.0/tasks/aos-config-nonSSL.html
[150] https://github.com/Alfresco/alfresco-repository/blob/alfresco-repository-6.8/src/main/resources/alfresco/tx-cache-context.xml
[151] https://github.com/Alfresco/alfresco-repository/blob/alfresco-repository-6.8/src/main/resources/alfresco/caches.properties
[152] https://docs.alfresco.com/../concepts/cache-indsettings.html
[153] http://docs.hazelcast.org/docs/latest-development/manual/html/Network_Partitioning/Split_Brain_Syndrome.html
[154] http://dev.alfresco.com/resource/AlfrescoOne/5.1/configuration/alfresco/mimetype/mimetype-map.xml
[155] https://github.com/Alfresco/alfresco-repository/blob/alfresco-repository-6.8/src/main/resources/alfresco/content-services-context.xml
[156] https://docs.alfresco.com/../references/API-FreeMarker-VersionHistoryNode.html
[157] https://docs.alfresco.com/../tasks/versionable-make.html
[158] https://docs.alfresco.com/../tasks/autoversion-disable.html
[159] https://github.com/Alfresco/alfresco-repository/blob/alfresco-repository-6.8/src/main/resources/alfresco/model/contentModel.xml
[160] https://docs.alfresco.com/../tasks/replication-setup.html
[161] https://docs.alfresco.com/../tasks/library-item-manage-aspects.html
[162] https://docs.alfresco.com/global-props-config.html
[163] https://docs.alfresco.com/../concepts/dev-extensions-modules-module-log4j.html
[164] https://docs.alfresco.com/auth-subsystem-types.html
[165] https://docs.alfresco.com/../tasks/adminconsole-fileservers.html
[166] https://docs.alfresco.com/../concepts/fileserv-ftp-intro.html
[167] https://docs.alfresco.com/adminconsole-open.html
[168] https://docs.alfresco.com/../concepts/fileserv-ftp-props.html
[169] https://docs.alfresco.com/../tasks/fileserv-ftp-adv.html
[170] https://docs.alfresco.com/../concepts/email-intro.html
[171] https://docs.alfresco.com/../concepts/imap-intro.html
[172] https://docs.alfresco.com/../tasks/adminconsole-inboundemail.html
[173] https://docs.alfresco.com/../concepts/email-inboundsmtp-props.html
[174] https://docs.alfresco.com/../tasks/adminconsole-outboundemail.html
[175] https://docs.alfresco.com/../concepts/email-outboundsmtp-props.html
[176] https://docs.alfresco.com/../concepts/email-target-node.html
[177] https://docs.alfresco.com/../concepts/email-groupspermissions.html
[178] https://docs.alfresco.com/../tasks/imap-enable.html
[179] https://docs.alfresco.com/../tasks/adminconsole-IMAPservice.html
[180] https://docs.alfresco.com/../concepts/IMAP-subsystem-props.html
[181] https://docs.alfresco.com/../concepts/imap-mountpoints.html
[182] https://docs.alfresco.com/../concepts/imap-virtual-view.html
[183] https://docs.alfresco.com/../tasks/imap-site-fav.html
[184] https://docs.alfresco.com/troubleshoot-imap.html
[185] https://api-explorer.alfresco.com/api-explorer/#!/shared-links/emailSharedLink
[186] https://api-explorer.alfresco.com/api-explorer/#/people
[187] https://docs.alfresco.com/../tasks/email-templates-config.html
[188] https://docs.alfresco.com/../concepts/OOoJodconverter-subsystem-props.html
[189] https://docs.alfresco.com/mm/tasks/mq-auto.html
[190] https://docs.alfresco.com/syncservice/tasks/desktop-sync-install.html
[191] https://docs.alfresco.com/transform/concepts/transformservice-overview.html
[192] https://docs.alfresco.com/activemq-config.html
[193] https://docs.alfresco.com/../tasks/activemq-install.html
[194] https://docs.alfresco.com/../concepts/activemq-config.html
[195] http://activemq.apache.org/installation.html
[196] https://docs.alfresco.com/../concepts/supported-platforms-ACS.html
[197] http://activemq.apache.org/clustering.html
[198] http://activemq.apache.org/security.html
[199] http://activemq.apache.org/how-do-i-use-ssl.html
[200] http://activemq.apache.org/http-and-https-transports-reference.html
[201] https://docs.alfresco.com/../topics/smart-video-tutorials.html
[202] https://docs.alfresco.com/../concepts/sf-whatis.html
[203] https://docs.alfresco.com/../concepts/sf-prereqs.html
[204] https://docs.alfresco.com/../concepts/sf-config-workflow.html
[205] https://docs.alfresco.com/../tasks/sf-config-examples.html
[206] https://docs.alfresco.com/../tasks/sf-tutorial.html
[207] https://docs.alfresco.com/../concepts/sf-folder.html
[208] https://docs.alfresco.com/../concepts/sf-metadata-inheritance.html
[209] https://docs.alfresco.com/../concepts/sf-ref-template-guidance.html
[210] https://docs.alfresco.com/../concepts/sf-ref-global-props.html
[211] https://docs.alfresco.com/../concepts/sf-best-practice.html
[212] https://docs.alfresco.com/../references/sf-tech-faqs.html
[213] https://docs.alfresco.com/../tasks/sf-using-aspects.html
[214] https://docs.alfresco.com/../concepts/sf-terms.html
[215] https://docs.alfresco.com/sf-config-workflow.html
[216] https://docs.alfresco.com/admintools-cmm-intro.html
[217] https://docs.alfresco.com/sf-ref-template-guidance.html
[218] https://docs.alfresco.com/sf-folder.html
[219] https://docs.alfresco.com/sf-share-actions.html
[220] https://docs.alfresco.com/sf-ref-global-props.html
[221] https://docs.alfresco.com/sf-tutorial-multi.html
[222] https://docs.alfresco.com/sf-using-aspects.html
[223] https://docs.alfresco.com/../tasks/sf-tutorial-cmm.html
[224] https://docs.alfresco.com/../tasks/sf-tutorial-configure.html
[225] https://docs.alfresco.com/../tasks/sf-tutorial-create-rule.html
[226] https://docs.alfresco.com/../tasks/sf-tutorial-create.html
[227] https://docs.alfresco.com/../tasks/sf-tutorial-add.html
[228] https://docs.alfresco.com/../tasks/sf-tutorial-multi.html
[229] https://docs.alfresco.com/../tasks/sf-tutorial-policy.html
[230] https://github.com/vhemmert/smartfolders/tree/master/tutorial
[231] https://github.com/vhemmert/smartfolders/archive/master.zip
[232] https://docs.alfresco.com/sf-tutorial-create-rule.html
[233] https://docs.alfresco.com/../concepts/sf-folder-type.html
[234] https://docs.alfresco.com/../concepts/sf-folder-system.html
[235] https://docs.alfresco.com/../concepts/sf-folder-custom.html
[236] https://docs.alfresco.com/smart-video-04.html
[237] https://docs.alfresco.com/sf-folder-type.html
[238] https://docs.alfresco.com/search-enterprise/concepts/searchsyntax-intro.html
[239] https://github.com/Alfresco/alfresco-data-model/tree/master/src/main/java/org/alfresco/util
[240] https://docs.alfresco.com/sf-ref-template-guidance.html%23sf-new-template__filing
[241] https://docs.alfresco.com/sf-folder-system.html
[242] https://docs.alfresco.com/sf-folder-custom.html
[243] https://docs.alfresco.com/search-enterprise/concepts/intrans-metadata-query.html
[244] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__1
[245] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__2
[246] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__3
[247] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__4
[248] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__5
[249] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__6
[250] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__7
[251] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__8
[252] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__9
[253] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__10
[254] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__11
[255] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__12
[256] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__13
[257] https://docs.alfresco.com/sf-tech-faqs.html%23sf-faqs__14
[258] https://docs.alfresco.com/sf-tech-faqs.html%23top
[259] https://docs.alfresco.com/aspect-about.html
[260] https://docs.alfresco.com/metadata-model-define.html
[261] https://docs.alfresco.com/../concepts/admintools-custom-model-intro.html
[262] https://docs.alfresco.com/../concepts/admintools-using-cmm.html
[263] https://docs.alfresco.com/../concepts/admintools-cmm-tutorial.html
[264] https://docs.alfresco.com/../concepts/cmm-video-tutorials.html
[265] https://docs.alfresco.com/../tasks/admintools-custom-model-create.html
[266] https://docs.alfresco.com/../tasks/admintools-custom-model-view.html
[267] https://docs.alfresco.com/../tasks/admintools-custom-model-activate.html
[268] https://docs.alfresco.com/../tasks/admintools-custom-model-deactivate.html
[269] https://docs.alfresco.com/../concepts/admintools-cmm-importexport.html
[270] https://lucene.apache.org/solr/guide/6_6/defining-fields.html#DefiningFields-FieldPropertiess
[271] https://docs.alfresco.com/admintools-custom-type-create.html%23wu
[272] https://docs.alfresco.com/../concepts/super-search-manager.html
[273] https://docs.alfresco.com/../tasks/admintools-custom-type-create.html
[274] https://docs.alfresco.com/../tasks/admintools-custom-type-edit.html
[275] https://docs.alfresco.com/../tasks/admintools-custom-type-delete.html
[276] https://docs.alfresco.com/../tasks/admintools-ct-properties-create.html
[277] https://docs.alfresco.com/../tasks/admintools-ct-properties-edit.html
[278] https://docs.alfresco.com/../tasks/admintools-ct-properties-delete.html
[279] https://docs.alfresco.com/../concepts/admintools-cmm-info.html
[280] https://docs.alfresco.com/../tasks/admintools-form-builder.html
[281] https://docs.alfresco.com/admintools-form-builder.html
[282] https://docs.alfresco.com/admintools-custom-type-edit.html
[283] https://docs.alfresco.com/admintools-custom-type-delete.html
[284] https://docs.alfresco.com/library-item-delete-final.html
[285] https://docs.alfresco.com/admintools-ct-properties-create.html
[286] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step1
[287] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step2
[288] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step3
[289] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step4
[290] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step5
[291] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step6
[292] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step7
[293] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step8
[294] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step9
[295] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__step10
[296] https://docs.alfresco.com/admintools-cmm-tutorial.html%23admintools-cmm-tutorial__mm
[297] https://docs.alfresco.com/cmm-video-tutorials.html
[298] https://docs.alfresco.com/../concepts/alfresco-tutorial-24.html
[299] https://docs.alfresco.com/../concepts/alfresco-tutorial-25.html
[300] https://docs.alfresco.com/../topics/alfresco-video-tutorials.html
[301] https://docs.alfresco.com/../concepts/mobile-config-overview.html
[302] https://docs.alfresco.com/../tasks/mobile-config-locale.html
[303] https://docs.alfresco.com/../tasks/mobile-config-install.html
[304] https://github.com/Alfresco/alfresco-ios-app/blob/master/AlfrescoApp/Supporting%20Files/configuration.json
[305] https://github.com/Alfresco/alfresco-android-app/blob/master/alfresco-mobile-android/src/main/assets/Configuration/embedded_config.json
[306] https://docs.alfresco.com/../references/mobile-config-file.html
[307] https://docs.alfresco.com/../references/mobile-config-info.html
[308] https://docs.alfresco.com/../references/mobile-config-repository.html
[309] https://docs.alfresco.com/../references/mobile-config-features.html
[310] https://docs.alfresco.com/../references/mobile-config-profiles.html
[311] https://docs.alfresco.com/../references/mobile-config-access.html
[312] https://docs.alfresco.com/../references/mobile-config-views.html
[313] https://docs.alfresco.com/../references/mobile-config-view-groups.html
[314] https://docs.alfresco.com/mobile-config-views-activities.html
[315] https://docs.alfresco.com/mobile-config-views-sites.html
[316] https://docs.alfresco.com/mobile-config-views-nodes.html
[317] https://docs.alfresco.com/mobile-config-views-favorites.html
[318] https://docs.alfresco.com/mobile-config-views-tasks.html
[319] https://docs.alfresco.com/mobile-config-views-users.html
[320] https://docs.alfresco.com/mobile-config-views-local.html
[321] https://docs.alfresco.com/mobile-config-views-search.html
[322] https://docs.alfresco.com/mobile-config-views-sync.html
[323] https://docs.alfresco.com/../references/mobile-config-views-activities.html
[324] https://docs.alfresco.com/../references/mobile-config-views-sites.html
[325] https://docs.alfresco.com/../references/mobile-config-views-nodes.html
[326] https://docs.alfresco.com/../references/mobile-config-views-favorites.html
[327] https://docs.alfresco.com/../references/mobile-config-views-tasks.html
[328] https://docs.alfresco.com/../references/mobile-config-views-users.html
[329] https://docs.alfresco.com/../references/mobile-config-views-local.html
[330] https://docs.alfresco.com/../references/mobile-config-views-search.html
[331] https://docs.alfresco.com/../references/mobile-config-views-sync.html
[332] https://docs.alfresco.com/../references/rule-actions.html
[333] https://docs.alfresco.com/6.2/concepts/auth-ldap-intro.html
[334] https://docs.alfresco.com/process-services1.11/topics/configuring_the_ldap_settings.html
[335] https://docs.alfresco.com/enabling-aps-review-processes.html
[336] https://docs.alfresco.com/../tasks/adding-alfresco-repository.html
[337] https://docs.alfresco.com/../tasks/aps-action-install.html
[338] https://docs.alfresco.com/../tasks/configuring-aps-acs.html
[339] https://docs.alfresco.com/../topics/enabling-aps-review-processes.html
[340] http://127.0.0.1:8080/alfresco/
[341] http://127.0.0.1:8080/share/