Use this information to configure Alfresco Content Services.
Use the following methods to configure Alfresco Content Services:
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.
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.
Use this information when modifying the alfresco-global.properties 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.
For example, dir.root=/var/data/alfresco/alf_data.
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.
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. |
system.webdav.rootPath=/app:company_home/cm:\u0444\u043E\u043B\u0434\u0435\u0440
<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.
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.
<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
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. |
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:
Example consoles include:
Some of these consoles also provide basic graphs and/or alerts for monitoring JMX-managed attributes.
<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.
<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.
-Dcom.sun.management.jmxremote
This tells the running JVM to start the JMX service.
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.
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.
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.
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
monitorRole new_pw controlRole new_pw
monitorRole readonly controlRole readwrite
-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
For example, the JDK directory is often java/bin.
jconsole
The JConsole New Connection window displays.
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.
The available managed beans display in JConsole.
The available subsystems display in an expandable tree structure. When you select a subsystem, the Attributes and Operations display below it in the tree.
Values that can be edited are shown with blue text.
When you change a configuration setting, the subsystem automatically stops.
There are two ways to trigger a subsystem to start:
The monitoring and management extensions can be subdivided into three categories:
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].
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"
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.
-Ddir.root=/alfresco/data -Ddb.url=xxxx
Use this information to understand the types of configuration files available in Alfresco Content Services, and how to configure them.
Extension files end with the extension .xml, and define <config> tags. A typical configuration file is <web-extension>/share-config-custom.xml.
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">
Modifying one property
The attribute replace completely replaces the configuration. To modify one property, add the changed piece.
For advanced configuration, you can also extend or override the Spring bean definitions that control the Alfresco Content Services Java classes.
Each file has a copy with a .sample extension.
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 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>
<property name="ignoredActivityTypes"> <set> <value>org.alfresco.documentlibrary.file-previewed</value> <value>org.alfresco.documentlibrary.file-downloaded</value> </set> </property>
Bean files end with the extension .xml and contain <bean> tags. You can modify <bean> tags to define properties or point to 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.
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.
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>
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>
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:
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] |
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] |
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.
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:
<!-- 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.
<!-- 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 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.
For example, under $TOMCAT_HOME/shared/classes.
alfresco/extension/subsystems/<category>/<type>/<id>/*.propertiesThe <id> is the subsystem instance identifier, which will be default for single instance subsystems, or the provided identifier for chained subsystems.
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.propertiesThe 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.propertiesUse this information to configure supported databases for use with Alfresco Content Services.
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.
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.
chmod 777 alfresco-enterprise-5.N.x-installer-linux-x64.bin sudo ./alfresco-enterprise-5.N.x-installer-linux-x64.bin
This release requires mysql-connector-java-5.1.40.jar for compatibility with the SQL Server database.
dir.root=
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}
Use this information to configure a MySQL database on Amazon RDS for use with Alfresco Content Services.
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.
chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin
The MySQL database connector is required when installing with MySQL. The database connector allows MySQL database to talk to the server.
For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.
For example: dir.root=C:/Alfresco/alf_data
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
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.
chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin
Use the ojdbc7.jar in the Oracle Database 12c Release 1 (12.1.0.1) drivers.
For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.
alter system set processes=275 scope=spfile sid='*'; alter system set sessions=305 scope=spfile sid='*'; alter system set transactions=330 scope=spfile sid='*';
For example: dir.root=C:/Alfresco/alf_data
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}
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.
chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin
For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.
This user must have write permissions on all tables and sequences.
dir.root=./alf_data
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}
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.
chmod 777 alfresco-enterprise-5.1.x-installer-linux-x64.bin sudo ./alfresco-enterprise-5.1.x-installer-linux-x64.bin
This release requires Microsoft JDBC Driver 6.0 for SQL Server for compatibility with the SQL Server database.
ALTER DATABASE alfresco SET ALLOW_SNAPSHOT_ISOLATION ON;
dir.root=
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}
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].
Use this information to configure a MySQL database for use with Alfresco Content Services.
The MySQL database connector is required when installing Alfresco Content Services with MySQL. The database connector allows MySQL database to talk to the server.
For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.
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.
max_connections = 275
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.
For example: dir.root=C:/Alfresco/alf_data
db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?useUnicode=yes&characterEncoding=UTF-8
db.name=alfresco db.username=alfresco db.password=alfresco db.host=localhost db.port=3306 db.pool.max=275
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
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.
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.
The alfresco user must have Connect and Resource privileges in Oracle.
This user must have write permissions on all tables and sequences.
You can remove these privileges once the server has started, but they might also be required for upgrades.
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>
dir.root=./alf_data
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}
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.
java.sql.SQLException: OAUTH marshaling failure
The database connector is a JAR file, for example postgresql-9.3-xxxx.jdbc4.jar.
For example, for Tomcat, copy the JAR file into the <TOMCAT_HOME>/lib directory.
max_connections = 275
This user must have write permissions on all tables and sequences.
dir.root=./alf_data
# 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}
db.name=alfresco db.username=alfresco db.password=alfresco db.host=localhost db.port=5432 db.pool.max=275
host all all 127.0.0.1/32 password
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.
This release requires Microsoft JDBC Driver 6.0 for SQL Server for compatibility with the SQL Server database.
Follow these instructions to update the setting: Configuring the user connections option [97].
Create the database using default collation settings.
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.
This can be removed once the server has started, but may be required during upgrades.
ALTER DATABASE alfresco SET ALLOW_SNAPSHOT_ISOLATION ON;
dir.root=
db.name=alfresco db.username=alfresco db.password=alfresco db.host=localhost db.port=1433 db.pool.max=275
db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver db.url=jdbc:sqlserver://${db.host}:${db.port};databaseName=${db.name};lockTimeout=1000; db.txn.isolation=4096
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.
Alfresco Content Services 6.2 supports Oracle, Microsoft SQL Server, as well as MySQL and PostgreSQL.
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.
[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.
db.pool.max=275For clarity, add this property immediately after the other database properties.
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.
Maintenance and Tuning:
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 |
Use this information to configure the Alfresco Content Services repository.
server.allowWrite=false
<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>
Change /alfresco to /new-context-path:
if(request.getMethod().equals("PROPFIND") || request.getMethod().equals("OPTIONS")) { ServletContext alfrescoContext = application.getContext("/alfresco"); ... }
If you are using Solr, modify the following files:
solr/workspace-SpacesStore/conf/solrcore.properties solr/archive-SpacesStore/conf/solrcore.propertiesto specify the properties relevant to your configuration:
alfresco.host=localhost alfresco.port=8080 alfresco.port.ssl=8443 alfresco.baseUrl=/alfresco
Follow this guidance if you want to run Alfresco Content Services with a reverse proxy.
alfresco.context=xxx alfresco.host=xxx alfresco.port=xxx alfresco.protocol=xxxwhere xxx are the externally visible context, host name, port number and protocol values.
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 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.
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.
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.
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) |
The standard JVM settings are as follows:
-Xms1G -Xmx2G -Dcom.sun.management.jmxremote
Tune the JVM using the following three steps:
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.
(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.
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.
JAVA_OPTS=%JAVA_OPTS% -server -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8082where address is a port for your system.
tomcat7w.exe //ES//<alfrescoTomcatnum1>where <alfrescoTomcatnum1> is the value from your tomcat_unique_service_name parameter.
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000where address is a port for your system.
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.
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:
The beans that load the alfresco-global.properties will give preferential treatment to any JVM-set properties.
Use this information to set the JVM properties.
Set JAVA_OPTS=-Ddir.root=e:/alfresco/data
export JAVA_OPTS=-Ddir.root=/srv/alfresco/data
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.
-Ddb.username=alfresco
-Ddb.password=alfresco
-Dindex.tracking.cronExpression='0/5 * * * * ?'
-Dindex.recovery.mode=AUTO
-Dalfresco.cluster.name=ALFRESCO_DEV
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. |
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. |
The System Settings page shows your server settings, the Alfresco Content Services web application repository settings, and the Alfresco Share application settings.
You see the System Settings page showing the details of your installation.
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. |
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. |
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. |
If you do not want to save the changes, click Cancel.
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.
tomcat/scripts/ctl.shIn a standard Windows installation, system properties can be listed in -Dname=value format (separated by semicolons) before ;-Dalfresco.home in:
tomcat/bin/service.batOnce 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
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].
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.
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.
/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/*
/alfresco/webdav /alfresco/webdav/*
/_vti_inf.html /_vti_bin/* /alfresco/aos /alfresco/aos/*and for OPTIONS and PROPFIND requests:
/ /alfresco /alfresco/
/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.
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>
alfresco.port=443 alfresco.protocol=https share.port=443 share.protocol=https
aos.baseUrlOverwrite=https://<external-proxy-host-name>/alfresco/aos
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/;
# ------- # 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.
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.
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
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].
If you are configuring SSL in a development or test environment, you can edit some configuration files to enable SSL.
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.
<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>
You can find the password in the .properties files from the sample alf_data/keystore folder.
Avoid using port 8443 as that is generally configured for Search Services.
# 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" ...
aos.baseUrlOverwrite=https://localhost/alfresco/aos
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].
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
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
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].
Access Alfresco Content Services and Alfresco Share using HTTPS:
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.
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).
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.
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>
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
For example, in the alfresco-global.properties file change the default setting from:
#cache.node.nodesSharedCache.tx.maxItems=125000 #cache.node.nodesSharedCache.maxItems=250000
cache.node.nodesSharedCache.tx.maxItems=250000 cache.node.nodesSharedCache.maxItems=2500000
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.
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:
The following properties are available for fully-distributed caches and are not supported by the other cache types:
Use this information to add a MIME type definition.
<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.
Metadata extraction automatically extracts metadata information from inbound and/or updated content and updates the corresponding nodes properties with the metadata values.
This file contains definitions of the default set of extractors.
The following example shows a new extractor written in class com.company.MyExtracter:
<bean id="com.company.MyExtracter" class="com.company.MyExtracter" parent="baseMetadataExtracter" />
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:
|
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. |
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.
Edit the contentModel.xml file to enable versioning for all content in the repository.
<mandatory-aspects> <aspect>cm:versionable</aspect> </mandatory-aspects>
<?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>
Use this information to disable auto-versioning for all versionable content in the repository.
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.
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.
Follow these replication steps for the MySQL database.
GRANT REPLICATION SLAVE ON *.* TO <slave_user> IDENTIFIED BY '<slave_password>'
[mysqld] log-bin server-id=1
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.
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.
Transformers start below the comment:
<!-- Content Transformations -->
(It is unlikely that you would want to modify an existing transformer.)
If you save the file in the <extension> directory, the filename must end with ‑context.xml.
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].
For information about modifying the alfresco-global.properties file, see Modifying the global properties file [162].
activities.feed.cleaner.cronExpression=0/1 * * * * ? activities.feed.cleaner.startDelayMins=2
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].
After the specified interval, the FeedCleaner trace logs will be generated. In the example, the logs will start after two minutes.
cors.enabled=
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:
|
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:
|
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
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.
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.
Alfresco Content Services supports access using the FTP protocol. Use File Servers in the Admin Console to enable, configure, and disable these services.
You see the File Servers page.
File Systems property | Example setting | What is it? |
---|---|---|
File System Name | Alfresco | The name given to the file system when using WebDAV, or FTP. |
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. |
If you do not want to save the changes, click Cancel.
For more information about configuring the FTP file server using the Admin Console, see Enabling file servers [165].
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.
The following properties can be overridden on the ftpServerConfig bean.
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 |
log4j.logger.org.alfresco.ftp.protocol=debug log4j.logger.org.alfresco.ftp.server=debug
There are two methods of running email server:
You see the Inbound Email page.
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:
|
If you do not want to save the changes, click Cancel.
The following properties can be set for Inbound SMTP email in the alfresco-global.properties file.
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.
You see the Outbound Email page.
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. |
If you do not want to save the changes, click Cancel.
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.
The following properties can be set to define a test message when the subsystem starts.
The following property is for setting the email site invitation behavior.
The following examples show which properties to set for two different email clients. Add these properties to the alfresco-global.properties file.
# 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
# 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
You can modify or extend the default behaviors by adding in custom handlers.
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.
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.
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.
You see the Activities Feed page.
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). |
If you do not want to save the changes, click Cancel.
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.
You see the Subscription Service page.
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.
If you do not want to save the changes, click Cancel.
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.
For information about working with Alfresco Content Services and Microsoft Outlook, see Installing and configuring Alfresco Outlook Integration [1].
imap.server.enabled=true
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.
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.
You see the IMAP Service page.
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. |
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. |
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. |
If you do not want to save the changes, click Cancel.
imap.config.home.rootPath=/app:company_home
/app:company_home/cm:HousesIf your folder has a space in the name, include _x0020_ where the space should be. For example:
/app:company_home/cm:Home_x0020_TownStop and start the IMAP subsystem for the changes to take effect.
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.
The IMAP integration offers the following access modes:
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
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.
You can see the site added to the IMAP Sites folder.
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.
repo.client-app.<client-name>.<propertyName>
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=
For more information, see 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.
You can create a folder to store your customized email templates here.
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=
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 |
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
It is also possible to use OpenOffice instead of LibreOffice.
You see the Transformation Services page.
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. |
If you do not want to save the changes, click Cancel.
The standard ActiveMQ installation runs with a basic configuration. You can configure and extend ActiveMQ based on your requirements.
For more advanced configuration, such as security, transport connectors, or memory settings, see Configuring advanced settings for ActiveMQ [192].
If you do not already have an ActiveMQ instance, install ActiveMQ [195] and follow the steps below.
See Supported Platforms [196] for supported versions.
messaging.broker.url=failover:(tcp://server:61616)?timeout=3000where 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.
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].
<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)
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].
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.
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]
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 folders can be displayed inside Smart Folders as long as the physical folder matches the query criteria.
Alfresco requirements
smart.folders.enabled=true
Ensure that your business analyst has considered the business case for enabling Smart Folders. See Planning and implementing Smart Folders [215] for more information.
This information is primarily for business analysts, who are responsible for creating and defining the business scenario that requires Smart Folders.
This diagram shows the recommended workflow:
smart.folders.enabled=true
Advanced Smart Folders settings are provided in the <tomcat>/shared/classes/alfresco-global.properties.sample file.
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.
The diagram shows the final folder structure that you will create during this tutorial:
For background information on Smart Folder Templates, see What is a Smart Folder? [202]
You can download a zip of the Smart Folders master directory here [231].
The Model Manager page is displayed.
You'll see the claims_example model and namespace, with a status of Inactive.
Click claims_example to see the Custom Types and Aspects that are defined for the model.
smart.folders.enabled=true smart.folders.config.type.templates.qname.filter=clex:claimFolderThe smart.folders.config.type.templates.qname.filter property specifies the custom type or aspect of the contents of the Smart Folder Template.
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.
You'll see the default smartFoldersExample.json Smart Folder Template is already in this folder.
This file provides additional function that is not available in the standard aspect and property settings.
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.
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.
Smart Folders are identified by this icon:
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.
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.
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.
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'll see the smartFoldersExample.json sample file (and any other templates you have added) already in this folder.
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.
If you need to navigate to the template, it lives in Repository/Data Dictionary/Smart Folder Templates.
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.
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.
See Smart Folders tutorial files [230] for an example file.
See Smart Folders tutorial files [230] for an example 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.
The diagram shows the final folder structure that you have set up for your claims
management:
Each method assigns a Smart Folder Template to a physical folder, which is then immediately available to all users.
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 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.
See Applying a Smart Folder Template [213] for more information.
See Enabling Smart Folders [205] and Applying multiple templates [228] for more information.
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].
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].
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 | 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. |
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. |
{ "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" } ] }
{ "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.
"query":"+ASPECT:'ins:claimFolder'" "query":"+TYPE:'cm:folder'"
"query":"cm:modifier:%CURRENT_USER% or cm:creator:%CURRENT_USER%"
{ "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%.
"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.
"[new_obj_prop_name]":"<[existing_obj_prop_name]>"For example, "cmg:claimDocumentId":"<cmg:claimId>"
"[new_obj_prop_name]":"[literal]"For example, "cmg:claimDocumentType":"Correspondence"
"query":"=cmg:claimDocumentType:Correspondence and cmg:claimDocumentId:<cmg:claimId>"
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
smart.folders.enabled=falseis the default, and must be set to true to enable Smart Folders.
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=trueback 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?
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:
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?
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]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.
What is a model?
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].
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.
The Create Model window appears. Fields marked with an asterisk (*) are required.
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.
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.
For example, Finance.
Only alphanumeric characters, hyphens (-), and underscores (_) are allowed. Do not use spaces or special characters.
If you leave this field blank, it will be auto-filled it based on the current signed in user.
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 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.
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:
The Model Manager page is displayed. The status of the relevant model is Inactive.
The status of the relevant model changes to Active. The types and aspects associated with this model are now available.
The Model Manager page is displayed. The status of the relevant model is Active.
The status of the relevant model changes to Inactive. The types and aspects associated with this model are no longer available.
The deleted model is removed from the Model Manager.
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.
The Model Manager page is displayed.
This will save the model locally on your computer as a ZIP package.
Importing a model
The Model Manager page is displayed.
The imported model appears in the Custom Models table on the Model Manager page.
The Model Manager page is displayed.
The relevant model page appears. This page shows the existing custom types and aspects associated with the selected model.
For custom type:
For aspect:
Only alphanumeric characters, hyphens (-), and underscores (_) are allowed. The model name will automatically prefix the model namespace.
The display label is shown to the users as the model name in the New Type drop down in Alfresco Share.
For example, Invoice.
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.
The Model Manager page is displayed.
The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.
Prerequisites for deleting custom types and aspects:
For aspects |
|
For custom types |
|
The Model Manager page is displayed.
The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.
If deleting a custom type, the Confirm Custom Type Deletion window appears.
If deleting an aspect, the Confirm Aspect Deletion window appears.
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.
The Model Manager page is displayed.
The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.
The property page relevant to the selected type is displayed. This is of the format model name:custom type name.
The property page relevant to the selected aspect is displayed. This is of the format model name:aspect name.
The Create Property window appears.
Only alphanumeric characters, hyphens (-) and underscores (_) are allowed. The property name will automatically prefix the model namespace.
The display label is shown as the property name to the end users in Alfresco Share.
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. |
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. |
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 |
|
|
d:mltext | Multi-value properties |
|
|
d:int | Single-value properties in Model Manager Multi-value properties in Share |
|
In Share, d:int does not support multiple values with constraint. |
d:long | Single-value properties in Model Manager Multi-value properties in Share |
|
In AShare, d:long does not support multiple values with constraint. |
d:float | Single-value properties in Model Manager Multi-value properties in Share |
|
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 |
|
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.
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.
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 |
|
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 |
|
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 |
|
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 |
|
Used for custom constraints implemented in Java. |
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:
Text date types:
|
Basic | Property is searchable but the values will not be available in the search result filters. | Yes | Non-text data types:
|
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:
|
Free text | Property is searchable but the values will not be available in the search result filters. | Yes |
Text date types:
|
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:
|
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:
|
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:
|
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:
|
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.
The Model Manager page is displayed.
The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.
The property page relevant to the selected type is displayed. This is of the format model name:custom type name.
The property page relevant to the selected aspect is displayed. This is of the format model name:aspect name.
The Edit Property window appears.
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.
Prerequisites for deleting a property for custom types and aspects:
For aspects |
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 |
|
The Model Manager page is displayed.
The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.
The property page relevant to the selected type is displayed. This is of the format model name:custom type name.
The property page relevant to the selected aspect is displayed. This is of the format model name:aspect name.
The Delete Property window appears.
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.
Components of the Layout Designer
Layout element
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:
The Model Manager page is displayed.
The selected model page appears. This page shows the existing custom types and aspects associated with the selected model.
The Layout Designer page is displayed.
After adding the layout elements onto the layout area, you can either edit, reorder, or delete the elements.
After adding the properties onto the layout elements, you can either edit, reorder, or delete the elements.
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. |
|
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 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. |
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.
The Model Manager page is displayed.
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]
The Document model page is displayed.
The Create Custom Type window appears.
The new custom type, dc:whitePaper appears in the Custom Types table.
back to top [296]
The Layout Designer page is displayed.
This displays the Edit Properties window.
The Document model page is displayed.
The Create Aspect window appears.
The new aspect, dc:webable appears in the Aspects table.
back to top [296]
back to top [296]
The Layout Designer page is displayed.
This displays the Edit Properties window.
The status of Document changes to Active.
To do so, follow the steps below:
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.
Click to remove any existing aspects from the
Currently Selected list.
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.
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]
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.
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.
The Alfresco Mobile configuration file that you create needs to be stored on the Alfresco Content Services server.
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.
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": {} }
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" } } } }
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 }
Enter the Alfresco Share url for your Alfresco Content Services installation.
"repository":{ "share-url": "https://hostname:port/share" }
"features":[ { "id": "<feature-id>", "type": "<feature-type>", "enable": true|false } ],
org.alfresco.client.feature.analyticsYou 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 } ],
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.
{ "<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" } }
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.
"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.
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.
"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" } }
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 } } } }
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" } }
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 |
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" } }
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) |
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) |
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) |
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" } }
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" } }
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 |
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", } }
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 |
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" } }
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 |
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" } }
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" } }
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" } } } ] } ]
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,
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.
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.
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.
You must add a repository from the Identity Management app in Alfresco Process Services.
To add a repository:
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 |
|
Share base URL |
|
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. |
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
Check the output from the script to ensure that the AMP file has installed successfully.
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:
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&view=sql-server-ver15
[105] https://docs.microsoft.com/en-us/sql/t-sql/statements/update-statistics-transact-sql?redirectedfrom=MSDN&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/