Configuration

This chapter covers the following topics:

Configuration overview

In eXo Platform, a lot of configuration options are customizable via properties. If you want to change the default configurations of eXo Platform, simply do as follows:

  1. Create your own .properties file that must be named exo.properties. This file contains all configurations to be customized.

    • $PLATFORM_TOMCAT_HOME/gatein/conf/exo.properties (Tomcat).
    • $PLATFORM_JBOSS_HOME/standalone/configuration/gatein/exo.properties

    (JBoss).

A .properties file has no header, so you do not need to preserve the header. You can refer to exo-sample.properties that is provided by default but has no effect on the eXo Platform configuration. This default file exposes all properties you can override or extend, but in comments (#). Instead of creating new, you can rename exo-sample.properties into exo.properties, then make changes on your needed properties and remove their comments.

  1. Add configurations to be customized in exo.properties. Pay attention to the followings:
    • Each property is defined on one line that conforms to the syntax: property_name=property_value.
    • Order of the property lines does not take any effect, but it is important that you use the exact key of each property in exo.properties that is already exposed in exo-sample.properties or listed in this chapter. The usage of properties and their keys are detailed in the later sections.
    • The text before the equal sign is the key that you should not change and the text after the equal sign is the property’s value that you can edit.
  2. Save and restart the eXo Platform server for your changes to take effect.

Besides the capability of customizing configurations in exo.properties, you can follow in another way by adding a system property, either in bin/setenv-customize.sample.(sh|bat) or bin/standalone-customize.sample.conf(.bat), or in any your custom scripts. See Customizing environment variables for detailed instructions.

Note

There are some configuration properties that will not be configurable by the system property but in exo.properties only, including:

  • exo.jcr.cluster.jgroups.config
  • exo.idm.cluster.jgroups.config
  • exo.jcr.cache.config
  • exo.jcr.cache.config.workspace.portal-system
  • exo.jcr.lock.cache.config
  • exo.jcr.index.cache.config
  • exo.cache.config.template
  • exo.idm.api.store.config

eXo Platform configuration

In eXo Platform, almost all configurations are performed in a folder that is controlled by a system property named exo.conf.dir. This property is set by setenv.* scripts (Tomcat) or standalone-exo-*.xml files (JBoss).

The default value of exo.conf.dir is:

  • $PLATFORM_TOMCAT_HOME/gatein/conf (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/configuration/gatein (JBoss).

That folder contains the following main files that you need to take care: exo.properties (if you need to override the eXo Platform configurations); configuration.xml and portal/${PORTAL_NAME}/configuration.xml (if having the ${PORTAL_NAME} portal container).

Note

The xml configuration is mainly done during the development phase, whereas the configuration in exo.properties targets the deployment phase. So configurations that you want to customize should be done in the exo.properties file.

To understand more clearly the role of those files, let’s begin with the portal container concept.

The eXo Platform Kernel collects runtime components in the portal containers. A portal container holds all components to run a portal instance. It serves pages under the servlet context for its name.

The default portal container in eXo Platform is called “portal”. This explains why the default URL of the samples is http://localhost:8080/portal. The default portal container can be configured directly inside exo.conf.dir.

eXo Platform is capable of running several portal instances simultaneously on the same server. Each instance can be configured and customized independently via files located at: portal/${PORTAL_NAME} (under exo.conf.dir), where ${PORTAL_NAME} is the name of the portal container.

Note

The name of the configuration file can be altered. Please refer to the PortalContainer section in the Kernel reference for more details on portal containers and other options to modify the location of the properties.

Services that run inside a portal container are declared via the xml configuration files like configuration.xml. Such files exist in jars, wars and below exo.conf.dir.

The .xml configuration files also serve as the main way to customize the portal via the multiple plugins offered by the eXo Platform components.

Additionally, the .xml files may contain variables that are populated via properties defined in exo.properties. Hence, the exo.properties file serves as exposing some selected variables that are necessary to configure eXo Platform in a server environment.

exo.properties

This file can be added to easily override or extend configurations of eXo Platform. The important variables that can be overridden are exposed in a sample properties file named exo-sample.properties, but in comments. See Configuration overview for more details.

configuration.xml

This file contains the built-in configuration for the “portal” portal container.

  • In most cases, you should not change this file.
  • In case you do not want to use “portal” as the default portal for your project, this file can be used to import another PortalContainerDefinition into the root container.

Note

To learn more about how to configure a new portal container, please refer to eXo Kernel.

portal/${PORTAL_NAME}/configuration.xml

The extra configuration for the ${PORTAL_NAME} portal container if any. This is where further customizations (for ${PORTAL_NAME} portal container) can be placed. Generally, custom configurations are provided by extension wars. However, this file is the last loaded by Kernel. It has a higher priority over any other configuration files, including extensions. So, you can override any internal component configuration.

This may turn handy services or configurations that are not exposed in exo.properties.

Properties reference

This page is a reference to configurations exposed via exo.properties.

Note

This is not an exhaustive list. Some properties are not documented in this chapter, because they are extremely rarely used by administrators. If the property you are searching for is not here, search it in the whole documentation and raise a question in Community Forum, if necessary.

Platform

Name Description Default
exo.base.url Generates links http://localhost:8080
exo.accountsetup.skip Skips “account setup” screen or not? false
exo.super.user

The predefined super user’s

name.
root
exo.portal.resetpassword .expiretime The expiration time of a reset password link. 24 (hours)

SMTP

Name Description Default
exo.email.smtp.from The “From” field in outgoing emails. noreply@exoplatform.com
exo.email.smtp.host The external mail server. emails. localhost
exo.email.smtp.port The external mail server port. 25
exo.email.smtp.start tls.enable Enable TLS or not? false
exo.email.smtp.auth Enable SMTP authentication or not? false
exo.email.smtp.usern ame Username to get authenticated with the mail server.  
exo.email.smtp.pass word Password to get authenticated with the mail server.  
exo.email.smtp.sock etFactory.port Port to connect to if a socket factory is specified.  
exo.email.smtp.sock etFactory.class A class to create SMTP sockets.  

JODConverter

Name Description Default
exo.jodconverter.enable Enable JODConverter or not? true
exo.jodconverter.port numbers List of ports used to create soffice processes. 2002
exo.jodconverter.office home The home folder of the Office installation. Blank (auto-detected)
exo.jodconverter.taskqu euetimeout The maximum living time in milliseconds of a task in the conversation queue. 30000
exo.jodconverter.taskex ecutiontimeout The maximum time in milliseconds to process a task. 120000
exo.jodconverter.maxtas ksperprocess The maximum number of tasks to process by an office server. 200
exo.jodconverter.retryt imeout The interval time in milliseconds to try to restart an office server in case it unexpectedly stops. 120000

Search connector

Name Description Default
exo.[searchConnectorName]. connector.[informationType] .enable Turn on/off a specific Search connector for a certain information type. true

Notification

Name Description Default
exo.notification. NotificationDailyJob. expression Cron expression to schedule daily emails. 0 0 23 ? * * (11:00pm every day)
exo.notification.Notif icationWeeklyJob.expression Cron expression to schedule weekly emails. 0 0 11 ? * SUN (11:00am every Sunday)
exo.notification.servic e.QueueMessage.period The delay time (in seconds) between two batches of sent mails. 60
exo.notification.servic e.QueueMessage.numberOfMailPe rBatch The maximum number of emails sent each batch. 30
exo.notification.portal name The “from” field in notification emails. eXo
exo.notification.maxite ms Maximum number of notifications displayed in the popup list. 8
exo.notification.viewal l Living days of items displayed in the View All page. 30
exo.notification.WebNot ificationCleanJob.expression Cron expression to schedule the job that cleans web notification old items. 0 0 23 ? * * (11:00pm every day)

JCR

Name Description Default
exo.jcr.datasource.dialect In most cases the dialect is auto-detected. Follow the link to know exceptions. auto
exo.jcr.storage.enabled Enable file system storage for JCR values? true

WebDav

Name Description Default
exo.webdav.def-folder -node-type Matching node type of folders. nt:folder
exo.webdav.def-file- node-type Matching node type of files. nt:file
exo.webdav.def-file- mimetype The mimetype to exchange file data. application/octet-stream
exo.webdav.update- policy The policy applied when there is an update via WebDav. create-version
exo.webdav.folder-icon -path The display icon of a folder. /eXoWCMResources/skin/ images/file/nt-folder. png
exo.webdav.cache- control The cache-control header that defines cache and cache live time. text/*:max-age=3600; image/*:max-age=1800; application/*:max-age= 1800;*/*:no-cache

ECMS

Name Description Default
exo.ecms.connector.drives. uploadLimit Maximum size (in MB) allowed of an uploaded file. 200
exo.portal.uploadhandler.p ublic-restriction Turn on/off public access to the upload service. true
exo.ecms.connector.drives. clientLimit The maximum number of concurrent uploaded files in client side. 3
exo.ecms.connector.drives. serverLimit The maximum number of concurrent uploaded files in server side. 20
exo.ecms.search.excluded-m imetypes Content of these mimetypes will not be searched. text/css,text/javascript ,application/x- javascript, text /ecmascript
exo.ecms.search.enableFuzz ySearch Enable fuzzy search or not? true
exo.ecms.search.fuzzySearc hIndex A float number between 0 and 1 expressing how much a returned word matches the keyword. 1 is exact search. 0.8
exo.ecms.lock.admin Users or groups who can manage locks.
*:/platform/s
administrator
exo.ecms.friendly.enabled Enable friendly URL maker or not? true
exo.ecms.friendly.servletN ame The friendly name used when making friendly URLs. content

ECMS Watch Document

Name Description Default
exo.ecms.watchdocument.sender The “from” field notification in the emails. support@exoplatform.com
exo.ecms.watchdocument.subject The subject of the notification emails. “Your watching document is changed”
exo.ecms.watchdocument.mimetype Mimetype of the message body. text/html
exo.ecms.watchdocument.content The message body. Check it yourself in exo-sample.properties

ECMS Document versioning

Name Description Default
exo.ecms.documents.versioning .drives The drives that are enabled for Document versioning. Managed Sites,Groups,Personal Documents
exo.ecms.documents.versions.max The max number of versions that a document can have. 0 (no limit)
exo.ecms.documents.versions.exp iration The expiration time (in days) of a document version. 0 (no limit)

ECMS Document viewer

Name Description Default
exo.ecms.documents.pdfview er.max-file-size Max file size of documents for preview, in MB 10
exo.ecms.documents.pdfview er.max-pages Max number of pages of documents for preview 99

Calendar

Name Description Default
exo.calendar.default.event .suggest An integer number n, used to auto-calculate and suggest the end time when users create/edit an event. 2 (equivalent to 1 hour)
exo.calendar.default.task. suggest An integer number n, used to auto-calculate and suggest the end time when users create/edit a task. 1 (equivalent to 30 mins)

Site metadata

Name Description Default
exo.intranet.portalConfig. metadata.override Don’t change this unless you customize the Intranet site. false
exo.intranet.portalConfig. metadata.importmode Don’t change this unless you customize the Intranet site. insert
exo.acme.portalConfig.meta data.override Only affect when you install the ACME addon. false
exo.ide.portalConfig.metad ata.override Only affect when you install the IDE addon. true

Datasource

Name Description Default
exo.jcr.datasource. name JCR datasource name. java:/comp/env/exo-jcr
exo.idm.datasource. name IDM datasource name. java:/comp/env/exo-idm

Clustering

Name Description Default
exo.cluster.partition.name Give a string to identify your cluster, to avoid conflict with other clusters in the network. DefaultPartition
exo.jcr.cluster.jgroups .tcp.* JGroups configuration for JCR using TCP.  
exo.jcr.cluster.jgroups .udp.* JGroups configuration for JCR using UDP.  
exo.idm.cluster.jgroups .tcp* JGroups configuration for IDM using TCP.  
exo.idm.cluster.jgroups .udp.* JGroups configuration for IDM using UDP.  
exo.jcr.cluster.jgroups .config Path to your customized JGroups configuration file, applied to JCR.  
exo.jcr.cluster.jgroups .config-url URL to your customized JGroups configuration file, applied to JCR.  
exo.idm.cluster.jgroups .config Path to your customized JGroups configuration file, applied to IDM.  

Quartz Scheduler

Main Scheduler Properties
Name Description Default
exo.quartz.scheduler.insta nceName The name of the scheduler instance. ExoScheduler
exo.quartz.scheduler.insta nceId The type of the scheduler instance. AUTO
ThreadPool configuration Properties
Name Description Default
exo.quartz.threadPool.clas s Is the name of the ThreadPool implementation used. org.quartz.simpl.SimpleThre adPool
exo.quartz.threadPool.thre adPriority It an integer value between Thread.MIN_PRIO RITY (which is 1) and Thread.MAX_PRIO RITY (which is 10). 5 (which is the value of Thread.NORM_PRIORITY)
exo.quartz.threadPool.thre adCount It is the number of threads that are available for concurrent execution of jobs. 25
JobStore configuration Properties
Name Description Default
exo.quartz.jobStore.misfir eThreshold The number of milliseconds the scheduler will tolerate a trigger to pass its next-fire-time by, before being considered misfired. 6000
exo.quartz.jobStore.class The Scheduler’s JobStore class name. org.quartz.impl.jdbcjobstor e.JobStoreTX
exo.quartz.jobStore.driver DelegateClass The Driver delegate which will understand the database system dialect. org.quartz.impl.jdbcjobstor e.StdJDBCDelegate
exo.quartz.jobStore.usePro perties The flag which instructs JDBCJobStore that all values in JobDataMaps will be Strings. false
exo.quartz.jobStore.dataSo urce The name of the DataSources defined in the configuration properties file for quartz. quartzDS
exo.quartz.jobStore.tableP refix The prefix used for to Quartz’s tables in the database. QRTZ_
exo.quartz.jobStore.isClus tered Set to “true” in order to turn on clustering features. false
exo.quartz.jobStore.cluste rCheckinInterval Set the frequency (in milliseconds) at which this instance “checks-in” with other instances of the cluster. 20000
exo.quartz.jobStore.maxMis firesToHandleAtATime The maximum number of misfired triggers the jobstore will handle in a given pass. 20
exo.quartz.jobStore.dontSe tAutoCommitFalse Setting this parameter to “true” tells Quartz not to call setAutoCommit(fa lse) on connections obtained from the DataSource(s). false
exo.quartz.jobStore.acquir eTriggersWithinLock Whether or not the acquisition of next triggers to fire should occur within an explicit database lock. false
exo.quartz.jobStore.lockHa ndler.class The class name to be used to produce an instance of a “org.quartz.impl .jdbcjobstore”.  
exo.quartz.jobStore.driver DelegateInitString A pipe-delimited list of properties (and their values) that can be passed to the DriverDelegate during initialization time.  
exo.quartz.jobStore.txIsol ationLevelSerializable A value of “true” tells Quartz (when using JobStoreTX or CMT) to call setTransactionIs olation(Connecti on.TRANSACTION_ SERIALIZABLE) on JDBC connections. This can be helpful to prevent lock timeouts with some databases under high load, and long-lasting transactions. false
exo.quartz.jobStore.select WithLockSQL Must be a SQL string that selects a row in the “LOCKS” table and places a lock on the row. SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE
Datasources configuration
Name Description Default
exo.quartz.dataSource.quar tzDS.jndiURL The JNDI URL for a DataSource that is managed by eXo Platform. java:/comp/env/exo-jpa_por tal

Password Encryption

Name Description Default
exo.plidm.password.class The class that encrypts the user password before it is stored in the database. DatabaseReadingSaltEncoder
exo.plidm.password.hash The encrypt algorithm. SHA-256

Elasticsearch Properties

Name Description Default
exo.es.version.minor The expected minor Elastisearch version compatible with eXo Platform. 5.6
exo.es.embedded.enabled Allows to run an Elasticsearch server embedded in eXo Platform (not recommended for production). true
es.cluster.name Cluster name identifies your Elasticsearch cluster for auto-discovery. If you’re running multiple clusters on the same network, make sure you’re using unique names. exoplatform-es
es.node.name Name of the mode for the embedded mode. If not specified, a name is generated dynamically at startup. exoplatform-es-embedded
es.network.host Sets both ‘bind_host’ and ‘publish_host’ params. More details here “127.0.0.1”
es.discovery.zen.ping. unicast.hosts In Unicast dicovery mode, this parameter lets you set a list of master nodes in the cluster to perform discovery when new nodes (master or data) are started. [“127.0.0.1”]
es.http.port TCP Port of the embedded ES node. 9200
es.path.data Local path to the directory where to Elasticsearch will store index data allocated for this node. gatein/data
Elasticsearch Client
Name Description Default
exo.es.search.server .url URL of the node used for searching. Required and exo.es.embedded. enabled=false http://127.0.0.1:9200
exo.es.search.server .username Username used for the BASIC authentication on the Elasticsearch node used for searching.  
exo.es.search.server .password Password used for the BASIC authentication on the Elasticsearch node used for searching.  
exo.es.index.server .url URL of the node used for indexing. http://127.0.0.1:9200
exo.es.index.server .username Username used for the BASIC authentication on the Elasticsearch node used for indexing.  
exo.es.index.server .password Password used for the BASIC authentication on the Elasticsearch node used for indexing.  
Elasticsearch Indexing properties
Name Description Default
exo.es.indexing.batch .number Maximum number of documents that can be sent to Elasticsearch in one bulk request. 1000
exo.es.indexing.requ est.size.limit Maximum size (in bytes) of an Elasticsearch bulk request. 10485760 (= 10Mb)
exo.es.reindex.batch. size Size of the chunks of the reindexing batch. 100
exo.es.indexing.repli ca.number.default Number of replicas of the index. 1
exo.es.indexing.shard .number.default Number of shards of the index. 5

Enable/Disable activity type

Name Description Default
exo.activity-type.acti vity-type-key.enabled The property that allows to enable or disable an activity having the type key `` activity-type -key `` from posting in the streams. true

File storage configuration

Name Description Default
exo.files.binaries. storage.type Allows to define the file storage way: File system (type=fs) or RDBMS (type=rdbms). fs
exo.commons.FileStorag eCleanJob.enabled Enables/disables the job that cleans unused files. true
exo.commons.FileStorag eCleanJob.retention-time The retention time of unused files 30 days
exo.commons.FileStorag eCleanJob.expression The cron job expression for scheduling the file cleaner job 0 0 11 ? * SUN
exo.files.storage.dir The location where to store binary files in case of file system storage. In cluster mode, this location (folder) should be shared. {exo.data.dir}/files

MongoDB configuration

MongoDB is the database for eXo Chat: all the below parameters could be configured in chat.properties file
Name Description Default
dbServerType Allows to define MongoDB type: either Mongo or embed. Embed value is used for unit tests. mongo
dbServerHost The host name or IP of MongoDB. (deprecated) localhost
dbServerPort
The port number to connect to MongoDB host.

(deprecated)

27017
dbServerHosts The MongoDB nodes to connect to, as a comma-separated list of <host:port> values. localhost:27017
dbName Name of the Mongo database name. chat
dbAuthentication Enables or disables authentication to access MongoDB. When set to true this means that authentication is required. false
dbUser Provide the username to access the database if authentication needed. EMPTY
dbPassword Provide the password to access the database if authentication needed. EMPTY
chatPassPhrase The password to access REST service on the eXo Chat server. chat
chatCronNotifCleanup The frequency of cleaning eXo Chat notifications.Th ey are cleaned up every one hour by default. 0 0/60 * * * ?
chatReadTotalJson The number of messages that you can get in the Chat room. 200
chatIntervalChat Time interval to refresh messages in a chat. 5000
chatIntervalSession Time interval to keep a chat session alive in milliseconds. 60000
chatIntervalNotif Time interval to refresh Notifications in the main menu in milliseconds. 5000
chatTokenValidity Time after which a token will be invalid. The use will then be considered offline. 60000

Groovy templates statistics

Name Description Default
exo.statistics.groovy .template.enabled Enables/disables Groovy Templates statistics that is collected asynchronously. true

CometD configuration

Name Description Default
exo.cometd.oort.url The CometD Oort URL used in clustering mode. http://localhost:8080/come td/cometd”, localhost should be replaced by the hostname or the IP of the cluster node.
exo.cometd.oort. configType The CometD configuration type which could be either “static” or “multicast”. multicast
exo.cometd.oort.cloud A comma-separated list of URLs of other Oort comets to connect to at startup.  

Update of last login time

Name Description Default
exo.idm.user.updateLast LoginTime Enables/disables the update of last login time each time the user login. true

Define spaces administrators group

Name Description Default
exo.social.spaces. administrators Defines the list of spaces administrators groups.  

Assets versions used in static resources URLs

Name Description Default
exo.assets.version Defines the assets version. It is set to eXo Platform binary version.

Username case sensitive

Name Description Default
exo.auth.case.insensitive Defines if usernames in eXo Platform are case sensitive or not. false.

User inactivity delay

Name Description Default
exo.user.status. offline.delay Defines the time laps which makes the user in offline status. Its value is expressed in milliseconds. 240000

Notifications channels

Name Description Default
exo.notification.channels Defines the activated notification channels. WEB_CHANNEL, MAIL_CHANNEL

Wiki application base URI

Name Description Default
wiki.permalink.appuri Defines the base URI for the wiki application permalinks. wiki

Files upload limit

Name Description Default
exo.ecms.connector.dr ives.uploadLimit Maximum size (in MB) allowed of an uploaded file. 200
exo.social.activity.upl oadLimit Maximum size (in MB) allowed of an uploaded image through the CKEditor. 200
exo.wiki.attachment. uploadLimit Maximum size (in MB) allowed of an uploaded file in Wiki application. 200

Configure username case sensitive

By default, eXo Platform is case insensitive. You can configure it to become case sensitive through a parameter in exo.properties file:

  • exo.auth.case.insensitive, default value set to true.

If you set the exo.auth.case.insensitive to true this means that the username “user” is the same as “User” or “uSEr”. If it is set to false, this means that the user should take care of capital and minimal letters when typing the username.

User inactivity delay configuration

When a user does not make any action on the platform i.e he is inactive for a time lapse, he is considered as offline.

The time lapse is configurable in exo.properties file using this parameter exo.user.status.offline.delay.

The parameter is expressed in millisecond and the value default is 240000 milliseconds.

 # The delay when we consider a user as offline. Default value is 240000 milliseconds
exo.user.status.offline.delay=240000

Data directory configuration

JCR data is stored in both SQL databases and File System. JCR Database configuration is explained in Database. The JCR File System configuration is explained in this section.

Typically, the JCR File System data consists of four folders:

  • JCR indexes.

  • JCR values storage.

    To store JCR value, SQL database is used as primary storage and another directory can be used as a secondary, dedicated storage for BLOB data. It is optional and you can configure to not store BLOB data in File System, by changing the default configuration in the exo.properties file.

    exo.jcr.storage.enabled=true
    
  • JTA (Transaction information).

  • Swap data (temporary memory space).

By default, these four folders are located under a common directory that is $PLATFORM_TOMCAT_HOME/gatein/data (Tomcat), $PLATFORM_JBOSS_HOME/standalone/data/gatein (JBoss).

In production, it is recommended to configure it to use a directory separated from the package. Especially in cluster mode, it should be a network shared folder.

Configuration in Platform Tomcat

In Tomcat, the directory is configured by the environment variable EXO_DATA_DIR. Edit the bin/setenv-customize.(sh|bat) script:

EXO_DATA_DIR=/mnt/nfs/shared/exo/data

You need to create the script file by copying/renaming the sample bin/setenv-customize.sample.(sh|bat). See Customizing environment variables for more information.

Configuration in Platform JBoss

In JBoss, the directory is configured by the system property exo.data.dir. Edit standalone/configuration/standalone-exo.xml like below:

<system-properties>
    ...
    <property name="exo.data.dir" value="/mnt/nfs/shared/exo/data"/>
    ...
</system-properties>

Note that if you are configuring the cluster mode, the configuration might be different. The file should be standalone-exo-cluster.xml and the property should be exo.shared.dir. See Setting up eXo Platform cluster.

Assets version configuration

Between versions, eXo Platform makes various changes on various layers. To avoid that browsers use cached assets and display old behavior, a parameter exo.assets.version is added in exo.properties file.

When eXo Platform is updated, his parameter allows to:

  • Enforce browsers to reload javascript and css.
  • Build eXo Platform urls for resources serving.
  • Avoid asking users to clear their browser’s cache.

By default, this parameter is set to eXo Platform package version, i.e for the version 5.0.x it is set to 5.0.x.

# Assets versions used in static resources URLs. Useful to manage caches.
exo.assets.version=5.0.x

Quartz Scheduler configuration

eXo Platform uses Quartz Scheduler, the Java Framework for scheduling jobs, in a wide range of features. When eXo Platform runs in cluster mode, it is important to prevent jobs to execute concurrently. Quartz has its own cluster mode, with each instance of eXo Platform server as a node of Quartz load balancing and failover group.

Since the version 4.4 of eXo Platform, Quatrz is used in persisted mode. So it is automatically configured in eXo Platform. As an administrator, you can change default Quartz settings in eXo Platform through exo.properties file.

By default, here are Quartz properties:

#Configure Main Scheduler Properties
#exo.quartz.scheduler.instanceName=ExoScheduler
#exo.quartz.scheduler.instanceId=AUTO

#Configure ThreadPool
#exo.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
#exo.quartz.threadPool.threadPriority=5
#exo.quartz.threadPool.threadCount=25

#Configure JobStore
#exo.quartz.jobStore.misfireThreshold=6000
#exo.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
#For SQL server set exo.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.MSSQLDelegate
#For postgres set exo.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
#exo.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#exo.quartz.jobStore.useProperties=false
#exo.quartz.jobStore.dataSource=quartzDS
#exo.quartz.jobStore.tablePrefix=QRTZ_
#exo.quartz.jobStore.isClustered=false
#exo.quartz.jobStore.clusterCheckinInterval=20000
#exo.quartz.jobStore.maxMisfiresToHandleAtATime=20
#exo.quartz.jobStore.dontSetAutoCommitFalse=false
#exo.quartz.jobStore.acquireTriggersWithinLock=false
#exo.quartz.jobStore.lockHandler.class=
#exo.quartz.jobStore.driverDelegateInitString=
#exo.quartz.jobStore.txIsolationLevelSerializable=false
#exo.quartz.jobStore.selectWithLockSQL=SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE
#exo.quartz.dataSource.quartzDS.jndiURL=java:/comp/env/exo-jpa_portal

More details about the definition and default values of the above properties could be found in the table Properties reference. You can also refer to Quartz Configuration Reference documentation for more details about quartz parameters.

Configure documents multiupload in the activity stream

Through the MultiUpload feature, you are able to upload up to 20 files per activity having each one 200 MB as max size.

You can change the default behavior through exo.properties file by configuring these two parameters:

  • exo.social.composer.maxToUpload=20, default value set to 20.
  • exo.social.composer.maxFileSizeInMB=200, default value set to 200 MB.

Transaction service

The JCR transaction timeout is 420 seconds by default. If your application runs longer transactions, you might need a bigger timeout.

Configure the timeout by adding the exo.jcr.transaction.timeout property in exo.properties file.

exo.jcr.transaction.timeout=3600

The value is in seconds.

Server base URL

The property exo.base.url is used to generate links in some cases, like a topic link in an email notification.

Generally you need to configure it to the base URL that users use to access eXo Platform. For example, if you use a reverse proxy, the URL should be the proxy’s host.

The following is the default configuration. To change it, edit exo.properties file.

# The Server Base URL is the URL via which users access eXo platform. All links created (for emails etc) will be prefixed by this URL.
# The base URL must be set to the same URL by which browsers will be viewing your eXo platform instance.
# Sample: exo.base.url=https://intranet.mycompany.com
exo.base.url=http://localhost:8080

Wiki application base URI

The property wiki.permalink.appuri allows you to define the base URI for the wiki application permalinks.

It is configurable through exo.properties file. Its default value is wiki.

The parameter wiki.permalink.appuri utility is to well redirect wiki pages when moving wiki application to different location than the default one.

wiki.permalink.appuri=wiki

Account setup

At the first startup of eXo Platform, the Account Setup and Greetings! screens will appear by default. However, in some scenarios, these screens are not necessary, for example:

  • When you have an extension that declares sample users.
  • When you want to connect to an existing user directory.

To skip these screens, simply change the default value from “false” into “true” in the exo.properties file.

exo.accountsetup.skip=true

Custom data validators configuration

Custom data validator, or user-configurable validator is the mechanism allowing users to define their own validation rules. For example, the username must be lowercase, or shorter than 20 characters. In eXo Platform, there are 6 validators that administrators can configure to use and the architecture allows developers to add more validators as they wish.

The validators can be configured via properties in exo.properties file.

A configuration is created by adding an entry with the gatein.validators. prefix in exo.properties file. This prefix is followed by a validator name, a period ‘.’ and a validator aspect. Currently, there are the following validators and validator aspects:

  • Validators:

    • username: Validates the ‘Username’ field in the Create or Edit user form.

    • groupmembership: There is a built-in regex that is currently not used to validate any field:

      GROUP_MEMBERSHIP_VALIDATION_REGEX = "^(\\p{Lower}[\\p{Lower}\\d\\._]+)(\\s*,\\s*(\\p{Lower}[\\p{Lower}\\d\\._]+))*$";
      
    • email: Validates the Email Address field in the Create or Edit user form.

    • displayname: Validates the Display Name field in the Create or Edit user form.

    • jobtitle: Validates the Job Title field in the User Profile form.

    • grouplabel: Validates the Label field in Add or Edit group form.

    • pagename: Validates the page name field in the Add new page form. Its label is Page Name if you create a page from the Page ManagementAdd New Page menu. In the Page Creation Wizard, the label is Node Name.

  • Validator aspects:

    • gatein.validators.{validatorName}.length.min: The minimum length of the validated field.
    • gatein.validators.{validatorName}.length.max: The maximum length of the validated field.
    • gatein.validators.{validatorName}.regexp: The regular expression to which the validated field must conform.
    • gatein.validators.{validatorName}.format.message: The information message that is displayed when the field does not conform to the specified regular expression.

See details about the “username” validator as below. For instructions on how to add a new validator (not in the above list), see Developing your own validator.

Configuration of username validator

By default, the username will be validated as follows:

  • The length must be between 3 and 30 characters.
  • Only lowercase letters, numbers, underscores (_) and period (.) can be used.
  • No consecutive underscores (_) or periods (.) can be used.
  • Must start with a lowercase letter.
  • Must end with a lowercase letter or number.

Note

Some components that leverage GateIn depend on usernames being all lowercase. Therefore, you are strongly recommended to use a lowercase username only.

If you want to validate that username format is email-like, you could use the following configuration:

# validators
gatein.validators.username.regexp=^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$
gatein.validators.username.format.message=Username must be a valid email address

When the username field does not conform to this rule, the account is not created and there will be a warning message:

The field "User Name" must match the format "Username must be a valid email address".

In case you do not define gatein.validators.username.format.message, the value of gatein.validators.username.regexp will be used in the warning message:

The field "User Name" must match the format "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$".

Outgoing mail service

eXo Platform includes an email sending service that needs to be configured before it can function properly. This service, for instance, is used to send notifications of connection requests.

The service requires an external SMTP server that allows accounts to send email from applications. A suggestion is to use Google SMTP, as detailed below.

In configuration, you need to provide your account and password, and other information so that eXo Platform can connect to the SMTP server.

The configuration file exo.properties is as follows:

Here is the default configuration (it will not work of course, you will need to edit it):

# Email display in "from" field of emails sent by eXo platform.
exo.email.smtp.from=noreply@exoplatform.com
# SMTP Server hostname.
exo.email.smtp.host=localhost
# SMTP Server port.
exo.email.smtp.port=25
# True to enable the secure (TLS) SMTP. See RFC 3207.
exo.email.smtp.starttls.enable=false
# True to enable the SMTP authentication.
exo.email.smtp.auth=false
# Username to send for authentication. Sample: exo.email.smtp.username=account@gmail.com
exo.email.smtp.username=
# Password to send for authentication.
exo.email.smtp.password=
# Specify the port to connect to when using the specified socket factory. Sample: exo.email.smtp.socketFactory.port=465
exo.email.smtp.socketFactory.port=
# This class will be used to create SMTP sockets. Sample: exo.email.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
exo.email.smtp.socketFactory.class=

Read the inline comments to understand each property. Here are some remarks:

  • You need to provide SMTP server host/port, a username/password to be authenticated by that server. Others are optional.

  • Typically, administrators want to mask the From field in the system emails with something like no-reply@exoplatform.com so that the receivers recognize it is robotic. Many SMTP services allow you to set From field in outgoing emails to another email address than the authenticated account. That’s why here you see the property exo.email.smtp.from.

    If this parameter is not valid, the value of exo.email.smtp.username will be used instead.

  • If you want to use SMTP gateway over SSL, configure a certificate truststore containing your SMTP server’s public certificate. Depending on the key sizes, you may then also need to install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for your Java Runtime Environment.

Using Gmail as your SMTP server

Here is the sample using smtp.gmail.com server:

exo.email.smtp.from=noreply@exoplatform.com
exo.email.smtp.host=smtp.gmail.com
exo.email.smtp.port=465
exo.email.smtp.starttls.enable=true
exo.email.smtp.auth=true
exo.email.smtp.username=exo.test100@gmail.com
exo.email.smtp.password=***
exo.email.smtp.socketFactory.port=465
exo.email.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

To make the configuration work, you need to:

  • Register a Google account that is exo.test100@gmail.com in the sample.

  • Enable POP and IMAP for that account. This can be done simply in your Gmail settings, see the screenshot below.

    image0

Here is a checklist provided by Google to help you solve problem if any.

Besides, for securing your account, Google may block access from an app and send you an email to review the access. So in case the mail service does not work, check your inbox and get the link to allow the app access.

Note

In case of Gmail, exo.email.smtp.from must be a real account that you own. It does not need to be a Gmail account, as you can guess by the sample. You will configure your main account (that is exo.email.smtp.username) to add this from email as another “send as”.

To do so, follow this guide of Google.

In case the from parameter is not valid, it does not fail the email sending and the main account will be displayed instead.

Changing sender information of email notification

In eXo Platform, email notifications are sent to users when significant actions involving them occur (for example, new users, connection request, space invitation, and more). These emails help them to track of activities taking place in their Social Intranet.

As an administrator, you can configure information (name and email address) of the sender, from which all notifications are sent, via two ways:

  • In UI, click AdministrationPortalNotifications. Then edit Email Notification Sender section.

  • Via exo.properties file. See Configuration overview if you have not created this file yet.

    exo.notification.portalname=eXo
    exo.email.smtp.from=noreply@exoplatform.com
    

    In which:

    • exo.notification.portalname: Name of the sender. The default value is eXo.
    • exo.email.smtp.from: Email address of the sender. The default value is noreply@exoplatform.com.

Subscribing to notifications of document changes

The function Watch document in Sites Explorer allows users to receive notification by email when a document is updated. The email address of receivers is the email they declare in their profile. Administrators can customize the sender, subject, mimetype and content of the notification.

Note

To get the email notification feature work, you first need to configure Outgoing mail service first.

To customize the email notification, simply add the following properties in exo.properties file.

# Email content for WatchDocumentService
exo.ecms.watchdocument.subject=Your watching document is changed
exo.ecms.watchdocument.mimetype=text/html
exo.ecms.watchdocument.content=Dear $user_name,<br><br>The document $doc_name ($doc_title) has changed.<br><br>Please go to <a href="$doc_url">$doc_title</a> to see this change.<br><br>

In which:

Property Default value Description
exo.ecms.watchdocument.subj ect Your watching document is changed The subject of the email notification.
exo.ecms.watchdocument.mime type text/html The format of the email content. There are two types: text/html and text/plain.
exo.ecms.watchdocument.cont ent Dear $user_name,<br><br> The document $doc_name ($doc_title) has changed.<br><br>Plea se go to <a href=”$doc_url”>$do c_title</a> to see this change.<br><br> The content of the email notification.

You can use four parameters below in the exo.ecms.watchdocument.content property:

  • $user_name: The full name of the receiver.
  • $doc_name: The name of the document.
  • $doc_title: The title of the document.
  • $doc_url: The link to view the document in Sites Explorer.

WebDAV configuration

The embedded WebDAV server lets you configure some parameter via exo.properties file.

# JCR Webdav configuration
exo.webdav.def-folder-node-type=nt:folder
    exo.webdav.def-file-node-type=nt:file
    exo.webdav.def-file-mimetype=application/octet-stream
    exo.webdav.update-policy=update
    exo.webdav.folder-icon-path=/eXoWCMResources/skin/images/file/nt-folder.png
    exo.webdav.cache-control=text/*:max-age=3600;image/*:max-age=1800;application/*:max-age=1800;*/*:no-cache

Open in Office configuration

With the Open in Office feature, you are able to easily edit documents, spreadsheets and presentations in the native applications installed on your client, without keeping a local copy.

By default, there are 4 labels displayed for corresponding file types as below:

Label File types
Open in Word docx, doc, docm, dot, dotm, dotx.
Open in Excel xltx, xltm, xlt, xlsx, xlsm, xlsb, xls, xll, xlam, xla.
Open in Powerpoint pptx, pptm, ppt, ppsx, ppsm, pps, ppam, ppa, potx, potm, pot
Open on Desktop Non-MS Office files, such as Open Document text files (odp, ods, odt, and more) or archive files (zip, rar, war, and more).

As an administrator, you can easily configure the file types associated with the application named as in “Open in Word”, and set a new label via exo.properties file.

exo.remote-edit.$CATEGORY=$SET_OF_FILETYPES
exo.remove-edit.$CATEGORY.label=$LABEL
  • Replace $CATEGORY with any text as you want, but it should represent the application in correspondence to the file types defined in $SET_OF_FILETYPES.
  • Replace $LABEL with the application label that will be displayed in the UI, for example “Word” or “MS Word”.

Here are some examples:

  • Changing the default labels from “Open in Word”, “Open in Excel”, and “Open in Powerpoint” into “Open in MS Word”, “Open in MS Excel” and “Open in MS Powerpoint”:

    #MS Word
    exo.remote-edit.word=docx,doc,docm,dot,dotm,dotx
    exo.remote-edit.word.label=MS Word
    
    #MS Excel
    exo.remote-edit.excel=xltx,xltm,xlt,xlsx,xlsm,xlsb,xls,xll,xlam,xla
    exo.remote-edit.excel.label=MS Excel
    
    #MS Powerpoint
    exo.remote-edit.powerpoint=pptx,pptm,ppt,ppsx,ppsm,pps,ppam,ppa,potx,potm,pot
    exo.remote-edit.powerpoint.label=MS Powerpoint
    

    image1

  • Adding a new label “Open in LibreOffice” for some Open Document Text file types:

    exo.remote-edit.libreoffice=odp,ods,odt
    exo.remote-edit.libreoffice.label=LibreOffice
    

    image2

  • Setting a new label “Open in Writer” for some both Word and Open Document Text file types:

    exo.remote-edit.writer=docx,doc,odm,odt
    exo.remote-edit.writer.label=Writer
    

    image3

JODConverter configuration

In Sites Explorer or Activity Stream, users can preview documents of various types, without downloading it. To support this feature, eXo Platform uses the JODConverter service that requires OpenOffice or LibreOffice to be installed locally (in the same machine with the eXo Platform server).

Installing OpenOffice/LibreOffice

Follow OpenOffice guideline or LibreOffice guideline to install.

Note that those softwares might be installed in some Linux distributions by the OS already.

Note

JODConverter is already built in eXo Platform, so you do not need to install it.

Sigar Framework

In Windows, Sigar is recommended. JODConverter uses Sigar - if available - to manage Office processes. Without Sigar, there is possibility that Office processes are not stopped successfully when you shut down eXo Platform, and it causes problem in your next start.

So download the following files and install them to the lib folder ($PLATFORM_TOMCAT_HOME/lib in Tomcat, $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear/lib in JBoss:

  • sigar.jar
  • sigar-x86-winnt.dll for Windows 32.
  • sigar-amd64-winnt.dll for Windows 64.

JODConverter version

eXo Platform uses JODConverter v3.0 that enhances processing different file types much.

Activating and deactivating

JODConverter is activated by default. You can deactivate it (and consequently not use the preview feature) by setting exo.jodconverter.enable=false in exo.properties file.

Configurations

Note

In most cases, you do not need to configure JODConverter because it can work with default configurations. However, if you are using

OpenOffice 4 (or later), or have installed the Office server untypically, you will need to specify exo.jodconverter.officehome by yourself. See Specifying exo.jodconverter.officehome.

JODConverter configurations can be edited in the exo.properties file. See Configuration overview if the file has not been created yet.

# JOD Converter
exo.jodconverter.enable=true
exo.jodconverter.portnumbers=2002
exo.jodconverter.officehome=
exo.jodconverter.taskqueuetimeout=30000
exo.jodconverter.taskexecutiontimeout=120000
exo.jodconverter.maxtasksperprocess=200
exo.jodconverter.retrytimeout=120000
Key Default value Description
exo.jodconverter.portnumbers 2002 List of ports, separated by commas - those used by each JODConverter processing thread. The number of office instances is equal to the number of ports.
exo.jodconverter.officehome See here The absolute path to Office installed folder.
exo.jodconverter.taskqueuetimeo ut 30000 The maximum living time of a task in the conversation queue. The task will be removed from the queue if the waiting time is longer than taskQueueTimeout.
exo.jodconverter.taskexecutiont imeout 120000 The maximum time to process a task. If the processing time of a task is longer than taskExecutionTimeout, this task will be aborted and the next task is processed.
exo.jodconverter.maxtasksperpro cess 200 The maximum number of tasks are processed.
exo.jodconverter.retrytimeout 120000 The interval time to restart the Office services after an unexpected crash.

Specifying exo.jodconverter.officehome

Again, the default configuration should work in many cases. Most likely you need to change it for OpenOffice 4.

Note

Note that EXO_JODCONVERTER_OFFICEHOME variable is not used as of 4.1.0. The customize script does not overlap JODConverter configuration anymore, so only use exo.properties for it.

Here are some examples of the property:

  • In Windows: exo.jodconverter.officehome=C:\\Program Files (x86)\\OpenOffice 4

Note

Remember to use double slash (\) for Windows.

  • In OS X: exo.jodconverter.officehome=/Applications/OpenOffice.app/Contents (OpenOffice 4) or exo.jodconverter.officehome=/Applications/LibreOffice.app/Contents (LibreOffice).

  • In Linux: exo.jodconverter.officehome=/opt/openoffice4.

    In Linux, if you do not know the path, you might check the followings:

    • /opt/openoffice.org3
    • /opt/libreoffice
    • /usr/lib/openoffice
    • /usr/lib/libreoffice

Services details

To support as many as possible document types, it is recommended you install all available services of Open Office. However, if you do not want to do so, refer to the following table to know which packages are needed for which services.

File extensions Service names Open Office installation package Libre Office installation package

doc

docx

odt

writer openoffice.org-writer libreoffice-writer
odf math openoffice.org-math libreoffice-math
odg draw openoffice.org-draw libreoffice-draw

odp

ppt

pptx

impress openoffice.org-impres s libreoffice-impress

ods

ots

xls

xlsx

xlt

calc openoffice.org-calc libreoffice-calc

Limiting size of uploaded files

Files can be uploaded in multiple applications such as Documents, Wiki, Forum, … The maximum allowed size for the uploaded files can be changed by configuration for each application.

In Documents application

When you upload a file in Documents or Sites Explorer, its size is limited to 200 MB by default.

To change this limit, edit the exo.ecms.connector.drives.uploadLimit property in exo.properties file.

For example:

exo.ecms.connector.drives.uploadLimit=300

Note

As of 4.1, this configuration also takes effect on files uploaded from Activity Stream (using the Share function).

In activities posts and comments

In a message post or a comment, it is possible to attach an image through the CKEditor. By default the image size is limited to 200 MB.

You can change this limit by editing the value of the exo.social.activity.uploadLimit property in exo.properties file.

For example:

exo.social.activity.uploadLimit=200

In Wiki application

Same as for the previous applications, files upload size in Wiki is limited, by default to 200 MB which could be redefined through the property exo.wiki.attachment.uploadLimit in exo.properties file.

For example:

exo.wiki.attachment.uploadLimit=200

In Forum application

In forum application, you can upload files as attachements in topics or import a whole forum to eXo Platform forum application.

Both sizes could be defined through these properties:

  • File size in topic:
exo.forum.attachment.upload.limit=10
  • Forum import size:
exo.forum.import.upload.limit=200

Note

The size is in MB for all the above properties.

Warning

If you are using eXo Platform in JBoss application server, note that in addition to the parameters described above aiming to customize files size, you should configure the value of the parameter max-post-size in standalone/configuration/standalone-exo.xml which is set by default to 200 MB in eXo Platform package.

<http-listener name="default" socket-binding="http" redirect-socket="https" max-post-size="209715200"/>

Tip

For any others file upload location, the maximum file size is defined by the property exo.uploadLimit.

Default value set to 10 Mb.

Limiting public access to the upload service

By default, unauthenticated users are not allowed to upload resources to the server through the Upload component on UI or by accessing directly the “/upload” handler, because this may cause some problems of server disk space. However, you can definitely configure the UploadHandler to allow this.

To change this restriction, edit the exo.portal.uploadhandler.public-restriction property in the :ref:`exo.properties <Configuration.ConfigurationOverview>`file as follows:

exo.portal.uploadhandler.public-restriction=false

Customizing site data

eXo Platform provides 2 built-in sites: Intranet and ACME. In case you want to customize data of these sites, for example, modifying or overwriting the existing data, use the externalized parameters in exo.properties file.

Intranet

  • exo.intranet.portalConfig.metadata.override: Allow (true) or not allow (false) overriding the Intranet data. See Overriding Portal Data for more details.
  • exo.intranet.portalConfig.metadata.importmode: Customize data import strategy (CONSERVE, INSERT, MERGE, or OVERWRITE). See here for more details about these modes.

Enabling/Disabling auto-creating a taxonomy tree

eXo Platform allows you to enable/disable auto-creating a taxonomy tree during a new site creation by adding the ecms.taxonomy.autoCreateWithNewSite parameter to exo.properties file.

# Configuration for a taxonomy tree
ecms.taxonomy.autoCreateWithNewSite=false

By default, the parameter is set to false, it means the creation of a taxonomy tree is disabled when you create a new site.

To enable the function, simply set the parameter to true.

Enabling/Disabling any activity type

eXo Platform allows you to enable/disable any activity type. Disabling an activity type means that this kind of activities will not be posted in the streams.

To enable/disable an activity type, you need to add exo.activity-type.activity-type-key.enabled parameter to exo.properties file.

# Configuration for activity type enabling/disabling
exo.activity-type.activity-type-key=false

By default, the parameter is set to true, it means the activity of type `` activity-type-key`` is enabled i.e it posts in the streams.

To disable the activity type, simply set the parameter to false.

Note

In the exo.activity-type.activity-type-key.enabled, activity-type-key could take many values depending on the activity type. Learn more about different activity types below.

activity-type-key could take these values:

  • DEFAULT_ACTIVITY: Activity posted by a user, without documents or link attached.
  • SPACE_ACTIVITY: Activity posted when a space is created. It contains the space’s description and the number of members.
  • USER_ACTIVITIES_FOR_SPACE: Activity posted when a user creates an activity in a space.
  • LINK_ACTIVITY: Activity with a link attachement.
  • sharecontents\:spaces: Activity for contents sharing in a space.
  • USER_PROFILE_ACTIVITY: Activity automatically posted the first time a user updates his/her profile.
  • DOC_ACTIVITY: Activity with document posted via the Share feature of the mobile application.
  • files\:spaces: Activity with documents attached.
  • sharefiles\:spaces: Activity automatically posted when a document is shared in a space.
  • contents\:spaces: Activity automatically posted when a content is created.
  • cs-calendar\:spaces: Activity automatically posted when a new event is created.
  • ks-forum\:spaces: Activity automatically posted when a new forum topic or post is created.
  • ks-answer\:spaces: Activity automatically posted when a new question or answer is created.
  • ks-poll\:spaces: Activity automatically posted when a new poll is created.
  • ks-wiki\:spaces: Activity automatically posted when a new wiki page is created in a space wiki.
  • USER_ACTIVITIES_FOR_RELATIONSHIP: Activity automatically posted the first time a user is getting connected to another one, containing the number of relations.
  • CALENDAR_ACTIVITY: Comment posted when an event is updated
  • exosocial\:people: Comment posted when a user updates his/her profile.
  • exosocial\:spaces: Comment posted when a member joins/leaves a space.
  • poll\:spaces: Comment posted when a poll is updated.
  • USER_COMMENTS_ACTIVITY_FOR_RELATIONSHIP: Comment automatically posted when two users are getting connected.
  • sharecontents\:spaces: Activity automatically posted when a content is shared in a space.
  • exosocial\:relationship: Activity post when two user are connected together.

Configure spaces administration group

By default, only the super user is able to manage all the spaces of the platform:

  • Create pages on spaces.
  • Add/delete/promote members.
  • Add/modify/delete space data (Wiki pages, forum Posts, activities, tasks…).

With eXo Platform 5.0 it is possible to define a group of users to manage spaces. This group of users is able to edit and delete all kind of spaces: visible and hidden.

The group of spaces administrators could be defined by adding this property to exo.properties file:

  • exo.social.spaces.administrators

Note

  • You should specify the membership type (*, member, manager…)

in the value of the property.

  • It is possible to specify a list of groups separated by commas ,.

In this example, all users of the two groups /platform/administrators and /developers are allowed to manage spaces: exo.social.spaces.administrators=*:/platform/administrators,*:/developers

Logs

The logs of eXo Platform are controlled by the Java Logging API.

By default, the logs are configured to:

  • log errors and warnings on the console.
  • log $PLATFORM_TOMCAT_HOME/logs/platform.log (Tomcat), or $PLATFORM_JBOSS_HOME/standalone/log/server.log (JBoss).

The logs are configured via the file:

  • $PLATFORM_TOMCAT_HOME/conf/logging.properties (Tomcat). Please refer to Tomcat’s Logging Documentation for more information on how to adjust this file to your needs.
  • $PLATFORM_JBOSS_HOME/standalone/configuration/logging.properties (JBoss).

Hibernate properties for JPA

Since 4.3 version, eXo Platform uses Java Persistance API (JPA) to manage relational data and Hibernate as a JPA provider. In tis section, we will define properties allowing to configure Hibernate in eXo Platform. The following properties should be set in exo.properties file.

Name Description Value
General configuration    
exo.jpa.hibernat e.dialect The classname of a Hibernate org.hibernate.dialect.Dialect A fully-qualified classname for example for HSQl database it is org.hibernate.di alect.HSQLDialec t
exo.jpa.hibernat e.show_sql Enables/disables log about SQL statements. true or false
exo.jpa.hibernat e.format_sql Format log about SQL statements. true or false
exo.jpa.hibernat e.default_schema The schema name. ${gatein.idm.dat asource.schema:}
exo.jpa.hibernat e.default_catalo g The catalog name, it qualifies unqualified table names with the given catalog in generated SQL.  
exo.jpa.hibernat e.session_factor y_name The org.hibernate.SessionFactory is automatically bound to this name in JNDI after it is created. JNDI name
exo.jpa.hibernat e.max_fetch_dept h Sets a maximum depth for the outer join fetch tree for single-ended associations. A single-ended assocation is a one-to-one or many-to-one assocation. A value of 0 disables default outer join fetching. A value between 0 and 3
exo.jpa.hibernat e.default_batch_ fetch_size Default size for Hibernate batch fetching of associations. 4,8 or 16
exo.jpa.hibernat e.default_entity _mode Default mode for entity representation for all sessions opened from this SessionFactory, defaults to pojo. dynamic-map or pojo
exo.jpa.hibernat e.order_updates Forces Hibernate to order SQL updates by the primary key value of the items being updated. This reduces the likelihood of transaction deadlocks in highly-concurrent systems. true or false
exo.jpa.hibernat e.order_by.defau lt_null_ordering Defines precedence of null values in ORDER BY clause. Defaults to none which varies between RDBMS implementation. none, first or last
exo.jpa.hibernat e.generate_stati stics Causes Hibernate to collect statistics for performance tuning true or false
exo.jpa.hibernat e.use_identifier _rollback if true, generated identifier properties are reset to default values when objects are deleted. true or false
exo.jpa.hibernat e.use_sql_commen ts If true, Hibernate generates comments inside the SQL, for easier debugging. true or false
Database configuration: JDBC    
exo.jpa.hibernat e.jdbc.fetch_siz e A non-zero value determines the JDBC fetch size, by calling Statement.setFetchSize(). An integer or 0
exo.jpa.hibernat e.jdbc.batch_siz e A non-zero value causes Hibernate to use JDBC2 batch updates. A value between 5 and 30
exo.jpa.hibernat e.jdbc.batch_ver sioned_data Set this property to true if your JDBC driver returns correct row counts from executeBatch(). This option is usually safe, but is disabled by default. If enabled, Hibernate uses batched DML for automatically versioned data. true or false
exo.jpa.hibernat e.jdbc.factory_c lass Select a custom org.hibernate.jdbc.Batcher. Irrelevant for most applications. The fully-qualified class name of the factory
exo.jpa.hibernat e.jdbc.use_scrol lable_resultset Enables Hibernate to use JDBC2 scrollable resultsets. This property is only relevant for user-supplied JDBC connections. Otherwise, Hibernate uses connection metadata. true or false
exo.jpa.hibernat e.jdbc.use_strea ms_for_binary Use streams when writing or reading binary or serializable types to or from JDBC. This is a system-level property. true or false
exo.jpa.hibernat e.jdbc.use_get_g enerated_keys Allows Hibernate to use JDBC3 PreparedStatement.getGenerate dKeys() to retrieve natively-generated keys after insert. You need the JDBC3+ driver and JRE1.4+. Disable this property if your driver has problems with the Hibernate identifier generators. By default, it tries to detect the driver capabilities from connection metadata. true or false
Database configuration: Cache properties    
exo.jpa.hibernat e.cache.provider _class The classname of a custom CacheProvider. org.hibernate.ca che.HashtableCac heProvider
exo.jpa.hibernat e.cache.use_mini mal_puts Optimizes second-level cache operation to minimize writes, at the cost of more frequent reads. This is most useful for clustered caches and is enabled by default for clustered cache implementations. true or false
exo.jpa.hibernat e.cache.use_quer y_cache Enables the query cache. You still need to set individual queries to be cachable. true or false
exo.jpa.hibernat e.cache.use_seco nd_level_cache Completely disable the second level cache, which is enabled by default for classes which specify a cache mapping. true or false
exo.jpa.hibernat e.cache.query_ca che_factory A custom QueryCache interface. The default is the built-in StandardQueryCache. Fully-qualified classname
exo.jpa.hibernat e.cache.region_p refix A prefix for second-level cache region names. a string
exo.jpa.hibernat e.cache.use_stru ctured_entries Forces Hibernate to store data in the second-level cache in a more human-readable format. true or false
exo.jpa.hibernat e.cache.use_refe rence_entries Optimizes second-level cache operation to store immutable entities (aka “reference”) which do not have associations into cache directly, this case, lots of disassemble and deep copy operations could be avoided. Default value of this property is false. true or false
Database configuration: Transactions properties    
exo.jpa.hibernat e.transaction.fa ctory_class The classname of a TransactionFactory to use with Hibernate Transaction API. The default is JDBCTransactionFactory. org.hibernate.tr ansaction.JTATra nsactionFactory
exo.jpa.hibernat e.jta.UserTransa ction The JTATransactionFactory needs a JNDI name to obtain the JTA UserTransaction from the application server. a JNDI name
exo.jpa.hibernat e.transaction.ma nager_lookup_cla ss The classname of a TransactionManagerLookup, which is used in conjunction with JVM-level or the hilo generator in a JTA environment. org.hibernate.tr ansaction.JBossT ransactionManage rLookup
exo.jpa.hibernat e.transaction.fl ush_before_compl etion Causes the session be flushed during the before completion phase of the transaction. If possible, use built-in and automatic session context management instead. true or false
exo.jpa.hibernat e.transaction.au to_close_session Causes the session to be closed during the after completion phase of the transaction. If possible, use built-in and automatic session context management instead. true or false
Database configuration: Miscellaneous properties    
exo.jpa.current_ session_context_ class Supply a custom strategy for the scoping of the Current Session. jta, thread, managed, or custom.Class
exo.jpa.factory_ class Chooses the HQL parser implementation. org.hibernate.hq l.internal.ast.A STQueryTranslato rFactory or org.hibernate.hq l.internal.class ic.ClassicQueryT ranslatorFactory
exo.jpa.query.su bstitutions Map from tokens in Hibernate queries to SQL tokens, such as function or literal names. hqlLiteral=SQL_L ITERAL or hqlFunction=SQLF UNC
exo.jpa.hbm2ddl. auto Validates or exports schema DDL to the database when the SessionFactory is created. With create-drop, the database schema is dropped when the SessionFactory is closed explicitly. validate, update, create, create-drop
Connection pool properties    
exo.jpa.hibernat e.proxool.xml Configure Proxool provider using an XML file (.xml is appended automatically)  
exo.jpa.hibernat e.proxool.proper ties Configure the Proxool provider using a properties file (.properties is appended automatically)  
exo.jpa.hibernat e.proxool.existi ng_pool Whether to configure the Proxool provider from an existing pool.  
exo.jpa.hibernat e.proxool.pool_a lias Proxool pool alias to use. Required.  

JCR Configuration

Because JCR Configuration is a very advanced topic, it is recommended you:

  • Learn about eXo JCR configuration.
  • Use default values, change them only if you know what you are doing.
  • Understand how to configure datasource in the Database chapter.

The configurations introduced here are a subset of JCR configurations. There are many JCR configurations which are packed in .war files, so you have to unpack to edit them. To avoid unpacking them, the subset is externalized to be configured easily in exo.properties file.

Here is the list of externalized configurations with their short descriptions.

  • Repository:

    exo.jcr.repository.default=repository
    exo.jcr.workspace.default=collaboration
    exo.jcr.workspace.system=system
    

    In which, “repository”, “collaboration” and “system” are names of default repository, default workspace and system workspace respectively. Refer to Repository Configuration for details.

  • Datasource:

    exo.jcr.datasource.name=java:/comp/env/exo-jcr
    exo.jcr.datasource.dialect=auto
    exo.jcr.db-structure-type=single
    

    These configurations are applied to all workspaces. Refer to Workspace for details.

  • Jgroups:

    exo.jcr.cluster.jgroups.config-url=file:${exo.jcr.cluster.jgroups.config}
    

    This externalizes the jgroups-configuration parameter of all workspace caches, query-handlers and lock-managers. Refer to Workspace for details.

  • Value Storage:

    exo.jcr.storage.enabled=true
    

    This externalizes the enabled property of file system value-storage (that is configured at workspace level). The true value (default) means all binary values are stored in file system. The false value means all binary values are stored in the database. Refer to Value Storage plugin for data container for details.

Cache configuration

To retrieve and display content faster, eXo Platform uses some cache services. See Basic concepts for explanation of properties used for eXo Platform caches.

Note

More details about the eXo Platform caches can be found in:

The below properties are all the cache configuration properties with their default value.

Note

Default values should be changed to better tune eXo Platform.

Portal caches

eXo Platform provides a list of Portal caches, including:

These Portal caches can be overridden in exo.properties file.

# Portal Cache Configuration - MOP session Manager
exo.cache.portal.mop.MaxNodes=5000
exo.cache.portal.mop.TimeToLive=-1
exo.cache.portal.mop.strategy=LIRS
# For Cluster mode
exo.cache.portal.mop.cacheMode=asyncInvalidation

# Portal Cache Configuration - Navigation Service
exo.cache.portal.navigation.MaxNodes=5000
exo.cache.portal.navigation.TimeToLive=-1
exo.cache.portal.navigation.strategy=LIRS
# For Cluster mode
exo.cache.portal.navigation.cacheMode=asyncInvalidation

# Portal Cache Configuration - Description Service
exo.cache.portal.description.MaxNodes=5000
exo.cache.portal.description.TimeToLive=-1
exo.cache.portal.description.strategy=LIRS
# For Cluster mode
exo.cache.portal.description.cacheMode=asyncReplication

# Portal Cache Configuration - Page Service
exo.cache.portal.page.MaxNodes=5000
exo.cache.portal.page.TimeToLive=-1
exo.cache.portal.page.strategy=LIRS
# For Cluster mode
exo.cache.portal.page.cacheMode=asyncInvalidation

# Portal Cache Configuration - Template Service
exo.cache.portal.template.MaxNodes=5000
exo.cache.portal.template.TimeToLive=-1
exo.cache.portal.template.strategy=LIRS
# For Cluster mode
exo.cache.portal.template.cacheMode=asyncInvalidation

# Portal Cache Configuration - ResourceBundleData
exo.cache.portal.ResourceBundleData.MaxNodes=3000
exo.cache.portal.ResourceBundleData.TimeToLive=-1

The specific configuration of Portal caches can be found in the files:

i. For MOPSessionManager, NavigationService, DescriptionService, PageService:

  • $PLATFORM_TOMCAT_HOME/webapps/portal.war!/WEB-INF/conf/portal/portal-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear!/exo.portal.web.portal.war!/WEB-INF/conf/portal/portal-configuration.xml (JBoss).

ii. For TemplateService and ResourceBundle:

  • $PLATFORM_TOMCAT_HOME/webapps/platform-extension.war!/WEB-INF/conf/platform/cache-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear!/platform-extension-webapp.war!/WEB-INF/conf/platform/cache-configuration.xml (JBoss).

MOPCache

The MOPCache caches all model objects of the portal (MOP), such as sites, pages and preferences. When the cached MOP objects are called, they will be directly retrieved from cache rather than the database.

  • The cached MOP object is invalidated when it is modified or removed.
  • The MOPCache size equals to the number of MOP objects in cache.
  • The maximum heap size cannot be calculated exactly because the MOPCache caches many types of MOP objects that are different in size.

DescriptionCache

The DescriptionCache caches a pair of name-description. Accordingly, the cached pair of name-description will be taken directly from cache rather than the database.

  • The cached pair of name-description is invalidated when the data of this name-description pair is modified or destroyed.
  • The DescriptionCache size equals to the number of name-description pairs in cache.
  • The maximum heap size is dependent on length of name and description of each pair stored in cache. The size of a name-description pair is often less than 200 bytes, so the maximum heap size equals to the cache size multiplied by 200 bytes.

PageCache

The PageCache caches data of a page when one user visits it for the first time. When the cached page is visited, it will be loaded from cache rather than the database.

  • The cached page is invalidated when the page is destroyed. When the page is modified, its new data will be updated into cache.
  • The PageCache size equals to the number of pages in cache.
  • The maximum heap size is dependent on some dynamic attributes of a page, for example, site name that contains the page, length of access/edit permission, display name of page.

TemplateCache

The TemplateCache caches all Groovy templates of the portal by its template path and ResourceResolver. When the cached template is called, it will be loaded from cache rather than the database or the file system.

  • The cached Groovy template is invalidated when it is removed or modified.
  • The TemplateCache size equals to the number of Groovy templates in cache.
  • The maximum heap size is dependent on length of Groovy template. The size of a Groovy template is often less than 100KB, so the maximum heap size equals to the cache size multiplied by 100KB.

ResourceBundleCache

The ResourceBundleCache caches all resource bundles by name and locale. When the cached resource bundle is called, it will be directly loaded from cache rather than the database or the file system.

  • The cached resource bundle is invalidated when it is removed or modified.
  • The ResourceBundleCache size equals to the number of resource bundles in cache.
  • The maximum heap size is dependent on the size of resource bundle. The size of a resource bundle is often less than 100KB, so the maximum heap size equals to the cache size multiplied by 100KB.

Notications, settings and user state caches

eXo Platform provides a list of Caches for notifications, settings and user state:

  • SettingCache
  • Web Notification Count Cache
  • Web Notification Cache
  • Web Notifications Cache
  • User State Service
  • User Setting Service

The Settings, Notifications and User State caches can be overridden in exo.properties file.

#== Notications, settings and user state Caches Configuration == #

# Commons Cache Configuration - Settings Service
exo.cache.commons.SettingService.MaxNodes=2000
exo.cache.commons.SettingService.TimeToLive=360000
exo.cache.commons.SettingService.strategy=LIRS
# For cluster mode
exo.cache.commons.SettingService=asyncInvalidation

# Commons Cache Configuration - Web Notification Count
exo.cache.commons.WebNotificationCountCache.MaxNodes=5000
exo.cache.commons.WebNotificationCountCache.TimeToLive=-1
exo.cache.commons.WebNotificationCountCache.strategy=LIRS
exo.cache.commons.WebNotificationCountCache.cacheMode=asyncReplication

# Commons Cache Configuration - Web Notification
exo.cache.commons.WebNotificationCache.MaxNode=5000
exo.cache.commons.WebNotificationCache.TimeToLive=3600
exo.cache.commons.WebNotificationCache.strategy=LIRS
exo.cache.commons.WebNotificationCache.cacheMode=asyncReplication

# Commons Cache Configuration - Web Notifications
exo.cache.commons.WebNotificationsCache.MaxNodes=5000
exo.cache.commons.WebNotificationsCache.TimeToLive=3600
exo.cache.commons.WebNotificationsCache.strategy=LIRS
exo.cache.commons.WebNotificationsCache.cacheMode=asyncReplication

# Commons Cache Configuration - User State Service
exo.cache.commons.UserStateService.MaxNodes=5000
exo.cache.commons.UserStateService.TimeToLive=600
exo.cache.commons.UserStateService.strategy=LIRS
exo.cache.commons.UserStateService.cacheMode=asyncReplication

# Commons Cache Configuration - User Setting Service
exo.cache.commons.UserSettingService.MaxNodes=5000
exo.cache.commons.UserSettingService.TimeToLivee=86400
exo.cache.commons.UserSettingService.strategy=LIRS
exo.cache.commons.UserSettingService.cacheMode=asyncInvalidation

The specific configuration of SettingCache can be found in the file:

  • $PLATFORM_TOMCAT_HOME/lib/commons-component-common-X.Y.Z.jar!/conf/portal/configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear!/lib/commons-component-common.jar!/conf/portal/configuration.xml (JBoss).

SettingCache

The SettingCache caches the setting value for all contexts and all scopes. When any users ask for the cached setting value, it will be retrieved from cache rather than the database.

  • The SettingCache is never invalidated.
  • The SettingCache size equals to the number of setting values in cache.
  • Each entry of cache is a pair and key is a composite key(Context context, Scope scope, String key). The value is String, Double, Long or Boolean. In reality, the size of these values should be less than 100 bytes, so the maximum heap size equals to the cache size multiplied by 400 bytes.

ECMS caches

eXo Platform provides a list of ECMS caches, including:

Here are the configurations in exo.properties file:

# == ECMS Caches Configuration == #

# ECMS Cache Configuration - Drive Service
    exo.cache.ecms.drive.MaxNodes=5000
    exo.cache.ecms.drive.TimeToLive=600
    exo.cache.ecms.drive.strategy=LIRS
    exo.cache.ecms.drive.cacheMode=syncInvalidation

    # ECMS Cache Configuration - Script Service
    exo.cache.ecms.scriptservice.MaxNodes=300
    exo.cache.ecms.scriptservice.TimeToLive=86400

    # ECMS Cache Configuration - Fragment Cache Service (Markup Cache)
    exo.cache.ecms.fragmentcacheservice.MaxNodes=10000
    exo.cache.ecms.fragmentcacheservice.TimeToLive=30

    # ECMS Cache Configuration - Templates Service
    exo.cache.ecms.templateservice.MaxNodes=100
    exo.cache.ecms.templateservice.TimeToLive=-1
    exo.cache.ecms.TemplateService.strategy=LIRS
    exo.cache.ecms.templateservice.cacheMode=asyncReplication

    # ECMS Cache Configuration - Initial Webcontent
    exo.cache.ecms.initialwebcontentplugin.MaxNodes=300
    exo.cache.ecms.initialwebcontentplugin.TimeToLive=86400
    exo.cache.ecms.InitialWebContentPlugin.strategy=LIRS
    exo.cache.ecms.initialwebcontentplugin.cacheMode=asyncInvalidation

    # ECMS Cache Configuration - PDF Viewer Service
    exo.cache.ecms.PDFViewerService.MaxNodes=1000
    exo.cache.ecms.PDFViewerService.TimeToLive=3600
    exo.cache.ecms.PDFViewerService.strategy=LIRS
    exo.cache.ecms.PDFViewerService.cacheMode=syncInvalidation

    # ECMS Cache Configuration - SEO Cache
    exo.cache.ecms.seoservice.MaxNode=1000
    exo.cache.ecms.seoservice.TimeToLive=3600
    exo.cache.ecms.seoservice.strategy=LIRS
    exo.cache.ecms.seoservice.cacheMode=asyncReplication

    # ECMS Cache Configuration - Query Service
    exo.cache.ecms.queryservice.MaxNodes=5000
    exo.cache.ecms.queryservice.TimeToLive=600000
    exo.cache.ecms.queryservice.strategy=LIRS
    exo.cache.ecms.queryservice.cacheMode=asyncReplication

    # ECMS Cache Configuration - SiteSearch Service found
    exo.cache.ecms.sitesearchservice.found.MaxNodes=10000
    exo.cache.ecms.sitesearchservice.found.TimeToLive=3600

    # ECMS Cache Configuration - SiteSearch Service drop
    exo.cache.ecms.sitesearchservice.drop.MaxNodes=10000
    exo.cache.ecms.sitesearchservice.drop.TimeToLive=3600

    # ECMS Cache Configuration - Javascript Cache
    exo.cache.ecms.javascript.MaxNodes=1000
    exo.cache.ecms.javascript.TimeToLive=3600
    exo.cache.ecms.javascript.strategy=LIRS
    exo.cache.ecms.javascript.cacheMode=asyncReplication

    # ECMS Cache Configuration - Lock
    exo.cache.ecms.lockservice.MaxNodes=300
    exo.cache.ecms.lockservice.TimeToLive=-1
    exo.cache.ecms.LockService.strategy=LIRS
    exo.cache.ecms.lockservice.cacheMode=replication

    # ECMS Cache Configuration - Folksonomy Service
    exo.cache.ecms.folkservice.MaxNodes=300
    exo.cache.ecms.folkservice.TimeToLive=-1
    exo.cache.ecms.folkservice.strategy=LIRS
    exo.cache.ecms.folkservice.cacheMode=asyncReplication

These properties are exposed via exo.properties for administrators. The full configuration can be found in XML configuration files. For SEO Cache, the file is:

  • $PLATFORM_TOMCAT_HOME/webapps/ecm-wcm-extension.war!/WEB-INF/conf/wcm-extension/wcm/seo-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear!/ecms-packaging-wcm-webapp.war!/WEB-INF/conf/wcm-extension/wcm/seo-configuration.xml (JBoss).

For the other caches, the file is:

  • $PLATFORM_TOMCAT_HOME/webapps/ecm-wcm-core.war!/WEB-INF/conf/wcm-core/core-services-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear!/ecms-core-webapp.war!/WEB-INF/conf/wcm-core/core-services-configuration.xml (JBoss).

Drive Cache

The managedrive caches visited drives of Sites Explorer by their names. When any users visit the cached drives, these drives will be directly retrieved from cache rather than the database.

  • The cache is invalidated when the drive is removed or added.
  • The cache size equals to the number of drives in cache.
  • The maximum heap size consumed by the cache are calculated as below:
    • Each item of drive cache contains: name, workspace, homePath, permission, view, icon, allowcreatefolders, viewReferences, viewNondocument, viewSidebar, showHiddenNode.
    • The first 7 elements are String and their length often should not be greater than 1000 bytes.
    • The last 4 elements are Boolean and the size of each element is 1 byte.
    • Thus, the maximum heap size equals to the cache size multiplied by 7004 bytes.

Script Cache

The scriptservice caches the ECMS Script objects. When there are any requests for cached scripts, these scripts are retrieved from cache rather than the database.

  • The scriptservice cache is never invalidated.
  • The cache size equals to the number of scripts in cache.
  • The maximum heap size equals to the cache size multiplied by size of the script object.

Template Cache

The templateservice caches the list of document nodetypes. When any users call for the cached document nodetypes, data will be retrieved from cache rather than the database.

  • The templateservice cache is invalidated when the document template is updated.
  • The cache size is 1.
  • The heap size consumed by the cache is unlimited. However the cache contains node names only, so it consumes less than 10KB.

Initial Web Content Cache

The webcontent.initialwebcontentplugin caches the artifacts (nodes) that are used to initialize a new portal. When a cached artifact is called, it will be read and returned from cache rather than the database.

  • The cache is never invalidated because the initial artifact is never changed.
  • The cache size equals to the number of the cached artifacts.
  • The maximum heap size equals to the total size of all artifacts.

Fragment Cache

The fragmentcacheservice caches content of SCVs and CLVs. When any users call for these cached portlets, these portlets will be retrieved from cache rather than the database.

  • The fragmentcacheservice is invalidated when SCVs and CLVs are switched from the edit to the live mode.
  • The cache size equals to the number of SCVs/CLVs in cache.
  • The maximum heap size consumed by the cache: total size of cached SCVs/CLVs (the SCVs/CLVs size is unlimited).

PDF Viewer Cache

The pdfviewer caches the path to a specific page of a specific PDF file. In eXo Platform, when a user views an Office document or PDF file, the viewed page is extracted into a PDF file, and REST is used to return that file content to client browser.

  • The pdfviewer cache is never invalidated.
  • The cache size equals to the number of pages viewed by users.
  • The maximum heap size equals to the cache size multiplied by 200 bytes (supposing that the longest file path is 200 characters).

SEO Cache

The seoservice caches the SEO metadata of all pages in all sites. When the SEO metadata of these cached pages are called, the created pages will be got based on the page path from cache rather than the database.

  • The seoservice cache is never invalidated.
  • The cache size equals to the number of pages to which the SEO metadata is added.
  • The maximum heap size is calculated as follows:
    • Each Metadata object contains 8 String objects: uri, rbcontent, keywords, description, title, frequency, fullStatus, pageReference. Each object is usually less than 100 characters.
    • 5 bytes (a float and a boolean) for priority and sitemap.
    • Thus, the total heap size equals to the cache size multiplied by 805 bytes.

Social caches

eXo Platform provides 4 Social caches, including:

You can change values of these Social caches in exo.properties file.

In particular:

# == SOCIAL Caches Configuration == #

# Social Cache Configuration - Identity
exo.cache.social.IdentityCache.MaxNodes=5000
exo.cache.social.IdentityCache.TimeToLive=86400
exo.cache.social.IdentityCache.strategy=LIRS
exo.cache.social.IdentityCache.cacheMode=asyncInvalidation

# Social Cache Configuration - Identity Index
exo.cache.social.IdentityIndexCache.MaxNodes=5000
exo.cache.social.IdentityIndexCache.TimeToLive=86400
exo.cache.social.IdentityIndexCache.strategy=LIRS
exo.cache.social.IdentityIndexCache.cacheMode=asyncInvalidation

# Social Cache Configuration - Profile
exo.cache.social.ProfileCache.MaxNodes=5000
exo.cache.social.ProfileCache.TimeToLive=86400
exo.cache.social.ProfileCache.strategy=LIRS
exo.cache.social.ProfileCache.cacheMode=asyncInvalidation

# Social Cache Configuration - Identities
exo.cache.social.IdentitiesCache.MaxNodes=5000
exo.cache.social.IdentitiesCache.TimeToLive=86400
exo.cache.social.IdentitiesCache.strategy=LIRS
exo.cache.social.IdentitiesCache.cacheMode=asyncInvalidation

# Social Cache Configuration - Identities Count
exo.cache.social.IdentitiesCountCache.MaxNodes=5000
exo.cache.social.IdentitiesCountCache.TimeToLive=86400
exo.cache.social.IdentitiesCountCache.strategy=LIRS
exo.cache.social.IdentitiesCountCache.cacheMode=asyncInvalidation


# Social Cache Configuration - Relationship
exo.cache.social.RelationshipCache.MaxNodes=10000
exo.cache.social.RelationshipCache.TimeToLive=86400
exo.cache.social.RelationshipCache.strategy=LIRS
exo.cache.social.RelationshipCache.cacheMode=asyncReplication

# Social Cache Configuration - Relationship From Identity
exo.cache.social.RelationshipFromIdentityCache.MaxNodes=10000
exo.cache.social.RelationshipFromIdentityCache.TimeToLive=86400
exo.cache.social.RelationshipFromIdentityCache.strategy=LIRS
exo.cache.social.RelationshipFromIdentityCache.cacheMode=asyncReplication

# Social Cache Configuration - Relationships Count
exo.cache.social.RelationshipsCountCache.MaxNodes=5000
exo.cache.social.RelationshipsCountCache.TimeToLive=86400
exo.cache.social.RelationshipsCountCache.strategy=LIRS
exo.cache.social.RelationshipsCountCache.cacheMode=asyncReplication

# Social Cache Configuration - Relationships
exo.cache.social.RelationshipsCache.MaxNodes=5000
exo.cache.social.RelationshipsCache.TimeToLive=86400
exo.cache.social.RelationshipsCache.strategy=LIRS
exo.cache.social.RelationshipsCache.cacheMode=asyncReplication

# Social Cache Configuration - Activity
exo.cache.social.ActivityCache.MaxNodes=6000
exo.cache.social.ActivityCache.TimeToLive=3600
exo.cache.social.ActivityCache.strategy=LIRS
exo.cache.social.ActivityCache.cacheMode=asyncReplication

# Social Cache Configuration - Activities Count
exo.cache.social.ActivitiesCountCache.MaxNodes=5000
exo.cache.social.ActivitiesCountCache.TimeToLive=86400

# Social Cache Configuration - Activities
exo.cache.social.ActivitiesCache.MaxNodes=5000
exo.cache.social.ActivitiesCache.TimeToLive=86400

# Social Cache Configuration - Space
exo.cache.social.SpaceCache.MaxNodes=500
exo.cache.social.SpaceCache.TimeToLive=86400
exo.cache.social.SpaceCache.strategy=LIRS
exo.cache.social.SpaceCache.cacheMode=asyncReplication

# Social Cache Configuration - Space Ref
exo.cache.social.SpaceRefCache.MaxNodes=2000
exo.cache.social.SpaceRefCache.TimeToLive=86400
exo.cache.social.SpaceRefCache.strategy=LIRS
exo.cache.social.SpaceRefCache.cacheMode=asyncReplication

# Social Cache Configuration - Spaces Count
exo.cache.social.SpacesCountCache.MaxNodes=5000
exo.cache.social.SpacesCountCache.TimeToLive=86400
exo.cache.social.SpacesCountCache.strategy=LIRS
exo.cache.social.SpacesCountCache.cacheMode=asyncInvalidation

# Social Cache Configuration - Spaces
exo.cache.social.SpacesCache.MaxNodes=5000
exo.cache.social.SpacesCache.TimeToLive=86400
exo.cache.social.SpacesCache.strategy=LIRS
exo.cache.social.SpacesCache.cacheMode=asyncInvalidation

# Social Cache Configuration - Active Identities
exo.cache.social.ActiveIdentitiesCache.MaxNodes=4000
exo.cache.social.ActiveIdentitiesCache.TimeToLive=86400
exo.cache.social.ActiveIdentitiesCache.strategy=LIRS
exo.cache.social.ActiveIdentitiesCache.cacheMode=asyncInvalidation

# Social Cache Configuration - Suggestions Cache
exo.cache.social.SuggestionsCache.MaxNodes=5000
exo.cache.social.SuggestionsCache.TimeToLive=86400
exo.cache.social.SuggestionsCache.strategy=LIRS
exo.cache.social.SuggestionsCache.cacheMode=asyncInvalidation

The specific configuration of each Social cache can be found in:

  • $PLATFORM_TOMCAT_HOME/webapps/social-extension.war!/WEB-INF/conf/social-extension/social/cache-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear/social-extension-war.war!/WEB-INF/conf/social-extension/social/cache-configuration.xml (JBoss).

IdentityCache

The IdentityCache caches information related to identities, such as index, count or profile. When any users view or take actions on users/spaces or activity page that contains the cached identity information, information will be directly retrieved from cache rather than the database.

  • The IdentityCache is invalidated when the user/space is deleted or updated.
  • The IdentityCache size equals to the number of identities in cache.
  • The maximum heap size is calculated as follows:
    • Identity Data: 33Kb (Max size: 500)
    • Identity Index: 24Kb (Max size: 500)
    • Identities List: 3747Kb (Max size: 2000)
    • Identities Count: 739Kb (Max size: 2000)
    • Profile Data: 170Kb (Max size: 500)

RelationshipCache

The RelationshipCache caches relationship information of users in the social networking. Any connection status (connection, pending, invitation, suggestion and count of relationships) is cached. When any users ask for these cached relationships, their information will be retrieved from cache rather than the database.

  • The RelationshipCache is invalidated when the connection is changed/removed or when a new connection is added.
  • The RelationshipCache size equals to the number of relationships in cache.
  • The maximum heap size is calculated as follows:
    • Relationship Data: 14610Kb (Max size: 20000)
    • Relationships Count: 16Kb (Max size: 800)
    • Relationships: 171Kb (Max size: 800)
    • Suggestion: 400Kb (Max size: 500)

SpaceCache

The SpaceCache caches all information of spaces, including the count and space references. When any users visit the cached spaces, their information will be retrieved from cache rather than the database.

  • The SpaceCache is invalidated when the space is deleted or updated.
  • The SpaceCache size equals to the number of spaces in cache.
  • The maximum heap size is calculated as follows:
    • Space Data: 1177Kb (Max size: 1000)
    • Spaces List: 1126Kb (Max size: 1000)
    • Spaces Count: 203Kb (Max size: 4000)
    • Space Ref: (38Kb) (Max size: 10000)

ActivityCache

The ActivityCache caches information related to activities, such as the count of activities. When any users visit the cached activities, information of these activities will be retrieved from cache rather than the database.

  • The ActivityCache is invalidated when the activity is deleted or updated (a new comment is added to the activity).
  • The ActivityCache size equals to the number of activities in cache.
  • The maximum heap size is calculated as follows:
    • Activities Data: 3697Kb (Max size: 10000)
    • Activities List: 2555Kb (Max size: 4000)
    • Activities Count: 98Kb (Max size: 4000)

Forum caches

eXo Platform provides 9 Forum caches, including:

You can override these Forum caches in exo.properties file.

# == FORUM Caches Configuration == #

# Forum Cache Configuration - ForumPermissions
exo.cache.forum.ForumPermissionsUsers.MaxNodes=300
exo.cache.forum.ForumPermissionsUsers.TimeToLive=-1
exo.cache.forum.ForumPermissionsUsers.strategy=LIRS
exo.cache.forum.ForumPermissionsUsers.cacheMode=asyncInvalidation

# Forum Cache Configuration - BBCodeData
exo.cache.forum.BBCodeData.MaxNodes=500
exo.cache.forum.BBCodeData.TimeToLive=-1
exo.cache.forum.BBCodeData.strategy=LIRS
exo.cache.forum.BBCodeData.cacheMode=asyncReplication

# Forum Cache Configuration - BBCodeListData
exo.cache.forum.BBCodeListData.MaxNodes=500
exo.cache.forum.BBCodeListData.TimeToLive=-1
exo.cache.forum.BBCodeListData.strategy=LIRS
exo.cache.forum.BBCodeListData.cacheMode=asyncReplication

# Forum Cache Configuration - User Profile
exo.cache.forum.UserProfile.MaxNodes=800
exo.cache.forum.UserProfile.TimeToLive=14400
exo.cache.forum.UserProfile.strategy=LIRS
exo.cache.forum.UserProfile.cacheMode=asyncInvalidation

# Forum Cache Configuration - User Profile List
exo.cache.forum.UserProfileList.MaxNodes=300
exo.cache.forum.UserProfileList.TimeToLive=1800
exo.cache.forum.UserProfileList=LIRS
exo.cache.forum.UserProfileList.cacheMode=asyncInvalidation

# Forum Cache Configuration - User Profiles List Count
exo.cache.forum.UserProfileListCount.MaxNodes=300
exo.cache.forum.UserProfileListCount.TimeToLive=1800
exo.cache.forum.UserProfileListCount=LIRS
exo.cache.forum.UserProfileListCount.cacheMode=asyncInvalidation

# Forum Cache Configuration - Login User Profiles
exo.cache.forum.LoginUserProfile.MaxNodes=500
exo.cache.forum.LoginUserProfile.TimeToLive=-1
exo.cache.forum.LoginUserProfile.strategy=LIRS
exo.cache.forum.LoginUserProfile.cacheMode=asyncInvalidation

# Forum Cache Configuration - Category List
exo.cache.forum.CategoryList.MaxNodes=50
exo.cache.forum.CategoryList.TimeToLive=-1
exo.cache.forum.CategoryList.strategy=LIRS
exo.cache.forum.CategoryList.cacheMode=asyncInvalidation

# Forum Cache Configuration - Category Data
exo.cache.forum.CategoryData.MaxNodes=150
exo.cache.forum.CategoryData.TimeToLive=-1
exo.cache.forum.CategoryData.strategy=LIRS
exo.cache.forum.CategoryData.cacheMode=asyncReplication

# Forum Cache Configuration - Forum List
exo.cache.forum.ForumList.MaxNodes=100
exo.cache.forum.ForumList.TimeToLive=-1
exo.cache.forum.ForumList.strategy=LIRS
exo.cache.forum.ForumList.cacheMode=asyncInvalidation

# Forum Cache Configuration - Forum Data
exo.cache.forum.ForumData.MaxNodes=500
exo.cache.forum.ForumData.TimeToLive=-1
exo.cache.forum.ForumData.strategy=LIRS
exo.cache.forum.ForumData.cacheMode=asyncReplication

# Forum Cache Configuration - Topic Data
exo.cache.forum.TopicData.MaxNodes=2000
exo.cache.forum.TopicData.TimeToLive=86400
exo.cache.forum.TopicData.strategy=LIRS
exo.cache.forum.TopicData.cacheMode=asyncReplication

# Forum Cache Configuration - Topic List
exo.cache.forum.TopicList.MaxNodes=500
exo.cache.forum.TopicList.TimeToLive=-1
exo.cache.forum.TopicList.strategy=LIRS
exo.cache.forum.TopicList.cacheMode=asyncInvalidation

# Forum Cache Configuration - Topic List Count
exo.cache.forum.TopicListCount.MaxNodes=500
exo.cache.forum.TopicListCount.TimeToLive=-1
{exo.cache.forum.TopicListCount.strategy=LIRS
exo.cache.forum.TopicListCount.cacheMode=asyncInvalidation

# Forum Cache Configuration - Post data
exo.cache.forum.PostData.MaxNodes=20000
exo.cache.forum.PostData.TimeToLive=-1
exo.cache.forum.PostData.strategy=LIRS
exo.cache.forum.PostData.cacheMode=asyncReplication

# Forum Cache Configuration - Post List
exo.cache.forum.PostList.MaxNodes=500
exo.cache.forum.PostList.TimeToLive=-1
exo.cache.forum.PostList.strategy=LIRS
exo.cache.forum.PostList.cacheMode=asyncInvalidation

# Forum Cache Configuration - Post List Count
exo.cache.forum.PostListCount.MaxNodes=500
exo.cache.forum.PostListCount.TimeToLive=-1
exo.cache.forum.PostListCount.strategy=LIRS
exo.cache.forum.PostListCount.cacheMode=asyncInvalidation

# Forum Cache Configuration - Poll Data
exo.cache.poll.PollData.MaxNodes=100
exo.cache.poll.PollData.TimeToLive=-1
exo.cache.poll.PollData.strategy=LIRS
exo.cache.poll.PollData.cacheMode=asyncInvalidation

# Forum Cache Configuration - Poll List
exo.cache.poll.PollList.MaxNodes=500
exo.cache.poll.PollList.TimeToLive=-1
exo.cache.poll.PollList.strategy=LIRS
exo.cache.poll.PollList.cacheMode=asyncInvalidation

# Forum Cache Configuration - Poll Summary Data
exo.cache.poll.PollSummaryData.MaxNodes=500
exo.cache.poll.PollSummaryData.TimeToLive=-1
exo.cache.poll.PollSummaryData.strategy=LIRS
exo.cache.poll.PollSummaryData.cacheMode=asyncInvalidation

# Forum Cache Configuration - Watch List Data
exo.cache.forum.WatchListData.MaxNodes=5000
exo.cache.forum.WatchListData.TimeToLive=-1
exo.cache.forum.WatchListData.strategy=LIRS
exo.cache.forum.WatchListData.cacheMode=asyncInvalidation

# Forum Cache Configuration - Link List Data
exo.cache.forum.LinkListData.MaxNodes=150
exo.cache.forum.LinkListData.TimeToLive=-1
exo.cache.forum.LinkListData.strategy=LIRS
exo.cache.forum.LinkListData.cacheMode=asyncInvalidation

# Forum Cache Configuration - Object Name Data
exo.cache.forum.ObjectNameData.MaxNodes=10000
exo.cache.forum.ObjectNameData.TimeToLive=-1
exo.cache.forum.ObjectNameData.strategy=LIRS
exo.cache.forum.ObjectNameData.cacheMode=asyncReplication

# Forum Cache Configuration - Misc Data
exo.cache.forum.MiscData.MaxNodes=10000
exo.cache.forum.MiscData.TimeToLive=86400
exo.cache.forum.MiscData.strategy=LIRS
exo.cache.forum.MiscData.cacheMode=asyncReplication

The specific configuration of each Forum cache can be found in:

  • $PLATFORM_TOMCAT_HOME/webapps/forum-extension.war!/WEB-INF/ks-extension/ks/forum/cache-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear/forum-extension-webapp.war!/WEB-INF/ks-extension/ks/forum/cache-configuration.xml (JBoss).

UserProfilesCache

The UserProfilesCache caches information of users, for example, name, number of topics, number of posts, user settings information in the forum system. These cached information will be used when the users log in the forum for next times.

  • The UserProfilesCache is invalidated when the user is deleted or updated, or when the user creates a new topic/post or changes his/her user settings, logs in/out of the system.
  • The UserProfilesCache size equals to the number of user profiles in forum.
  • The maximum heap size of UserProfilesCache is 213Kb (Max size: 500).

CategoriesCache

The CategoriesCache caches information of categories, such as name, order, description, permissions. Information of these cached categories are used when the Forums application is opened not for the first time.

  • The CategoriesCache is invalidated when the category is modified (for example, when the user updates his/her profile, or watches a category, or adds/deletes a space).
  • The CategoriesCache size equals to the number of categories in cache.
  • The maximum heap size is calculated as follows:
    • Categories List: 207Kb (Max size: 50)
    • Categories Data: 54Kb (Max size: 150)

ForumsCache

The ForumsCache caches information related to forums, such as name, order, description, permission. Information of these cached forums is used when any users open the Forums application not for the first time.

  • The ForumsCache is invalidated when the forum is modified (updating user profile, users watch on Forum, spaces updated).
  • The ForumsCache size equals to the number of forums in cache.
  • The maximum heap size is calculated as follows:
    • Forum List: 66Kb (Max size: 500)
    • Forum Data: 982Kb (Max size: 2500)

TopicsCache

The TopicsCache caches information related to topics, such as name, description, owner, last updated time and permission. When any users go to the cached topics, their information will be retrieved from cache rather than the database.

  • The TopicsCache is invalidated when the topic is modified (for example, when the user watches a topic, or adds/deletes a post, or deletes a space).
  • The TopicsCache size equals to the number of topics in cache.
  • The maximum heap size is calculated as follows:
    • Topic List: 194Kb (Max size: 150)
    • Topic Data: 581Kb (Max size: 500)

PostsCache

The PostsCache caches information of posts, such as title, message, owner. When any users do anything related to the cached posts, information will be retrieved from cache rather than the database.

  • The PostsCache is invalidated when the post is modified (or updated).
  • The PostsCache size equals to the number of topics in cache.
  • The maximum heap size is calculated as follows:
    • Post List: 228Kb (Max size: 150)
    • Post Data: 720Kb (Max size: 500)

WatchesCache

The WatchesCache caches information related to watches, such as users and emails. These cached information will be used when the forum/category/topic is loaded not for the first time.

  • The WatchesCache is invalidated when a post is modified (unwatched/watched).
  • The WatchesCache size equals to the number of watches in cache.
  • The maximum heap size of watched data is 257Kb (Max size: 500)

ObjectNameDataCache

The ObjectNameDataCache caches simple information of categories/forums/topics, such as name and jcr-path. When any users ask for these cached forums/categories/topics, the information will be retrieved from cache rather than the database.

  • The ObjectNameDataCache is invalidated when a category/forum/topic is updated.
  • The ObjectNameDataCache size equals to the number of ObjectNameData in cache.
  • The maximum heap size of ObjectNameDataCache is 239Kb (Max size: 500).

MiscDataCache

The MiscDataCache caches simple information related to categories list size, forums list size, topic list size, screen name of users. These cached information is used when the Forums application is opened not for the first time.

  • The MiscDataCache is invalidated when a category/forum/topic/post/user profile is modified.
  • The MiscDataCache size equals to the number of MiscData in cache.
  • The maximum heap size equals to 45Kb (Max size: 600).

BBCodeCache

The BBCodeCache caches information related to BBCodes, such as tag name, replacement, description, isOption. When any users open the topic containing the cached BBCodeCache or add/edit the BBCode, information will be retrieved from cache rather than the database.

  • The BBCodeCache is invalidated when the BBCode is modified.
  • The BBCodeCache size equals to the number of BBCodes in cache.
  • The maximum heap size is calculated as follows:
    • BBCode List: 9Kb (Size: 10).
    • BBCode Data: 11,25Kb (Size: 50).

Wiki caches

eXo Platform provides 3 Wiki caches, including:

You can change these Social caches that are handled by PageRenderingCacheService in exo.properties file.

In particular:

# == WIKI Caches Configuration == #

    # Wiki Cache Configuration - Page Rendering
    exo.cache.wiki.PageRenderingCache.MaxNodes=3500
    exo.cache.wiki.PageRenderingCache.TimeToLive=-1
    exo.cache.wiki.PageRenderingCache.strategy=LIRS
    exo.cache.wiki.PageRenderingCache.cacheMode=asyncReplication

    # Wiki Cache Configuration - Page Uuid
    exo.cache.wiki.PageUuidCache.MaxNodes=3500
    exo.cache.wiki.PageUuidCache.TimeToLive=-1
    exo.cache.wiki.PageUuidCache.strategy=LIRS
    exo.cache.wiki.PageUuidCache.cacheMode=asyncReplication

    # Wiki Cache Configuration - Page Attachment
    exo.cache.wiki.PageAttachmentCache.MaxNodes=3500
    exo.cache.wiki.PageAttachmentCache.TimeToLive=-1
    exo.cache.wiki.PageAttachmentCache.strategy=LIRS
    exo.cache.wiki.PageAttachmentCache.cacheMode=asyncReplication

The specific configuration of each Wiki cache can be found in:

  • $PLATFORM_TOMCAT_HOME/lib/wiki-service-xxx.jar!/conf/portal/cache-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear/lib/wiki-service.jar!/conf/portal/cache-configuration.xml (JBoss).

RenderingCache

The RenderingCache caches content of visited wiki pages. When any users visit the cached wiki pages, their content will be retrieved from cache rather than the database.

  • The RenderingCache is updated when a wiki page is removed or modified.
  • The RenderingCache size equals to the number of wiki pages in cache.
  • The size of a wiki page is unlimited, so the maximum heap size consumed by the cache is unlimited too. However, most of wiki pages are often less than 100KB. Therefore, the maximum heap size equals to the cache size multiplied by 100KB.

UuidCache

The UuidCache caches Uuid of nodes that stores the visited wiki pages. When any users visit these wiki pages, Wiki gets the nodes by UUID in cache that is much faster than query in the database.

  • The UuidCache is updated when the wiki page is removed.
  • The UuidCache size equals to the number of wiki pages in cache.
  • Every Uuid has the length of 32 bytes, so the maximum heap size equals to the cache size multiplied by 32 bytes.

AttachmentCountCache

The AttachmentCountCache caches the number of attachments of the visited wiki pages. When the visited wiki pages are called, the number of page attachments will be retrieved from cache rather than the database.

  • The AttachmentCountCache is updated when the wiki page is removed/modified or when its attachment is added/removed.
  • The AttachmentCountCache size equals to the number of wiki pages in cache.
  • The maximum heap size equals to the cache size multiplied by 4 bytes (“4” - size of Integer).

Calendar caches

eXo Platform provides 6 Calendar caches, including:

You can change values of these Calendar caches in exo.properties file.

# == CALENDAR Caches Configuration == #

     # Calendar Cache By Id - Group/User/Shared Calendars
     exo.cache.calendar.Calendar.MaxNodes=1000
     exo.cache.calendar.Calendar.TimeToLive=3600
     exo.cache.calendar.Calendar.strategy=LIRS
     exo.cache.Calendar.Calendar.cacheMode=asyncReplication

     # Calendar originating datasource by calendarId
     exo.cache.calendar.dsNameById.MaxNodes=1000
     exo.cache.calendar.dsNameById.TimeToLive=-1

     # Calendar Cache Configuration - Group Calendar
     exo.cache.calendar.GroupCalendar.MaxNodes=100
     exo.cache.calendar.GroupCalendar.TimeToLive=86400
     exo.cache.calendar.GroupCalendar.strategy=LIRS
     exo.cache.calendar.GroupCalendar.cacheMode=asyncReplication

     # Calendar Cache Configuration - Group Calendar Event
     exo.cache.calendar.GroupCalendarEvent.MaxNodes=1000
     exo.cache.calendar.GroupCalendarEvent.TimeToLive=3600
     exo.cache.calendar.GroupCalendarEvent.strategy=LIRS
     exo.cache.calendar.GroupCalendarEvent.cacheMode=asyncReplication

     # Calendar Cache Configuration - Group Calendar Recurrent Event
     exo.cache.calendar.GroupCalendarRecurrentEvent.MaxNodes=1000
     exo.cache.calendar.GroupCalendarRecurrentEvent.TimeToLive=3600
     exo.cache.calendar.GroupCalendarRecurrentEvent.strategy=LIRS
     exo.cache.calendar.GroupCalendarRecurrentEvent.cacheMode=asyncReplication

     # Calendar Cache Configuration - User Calendar
     exo.cache.calendar.UserCalendar.MaxNodes=1000
     exo.cache.calendar.UserCalendar.TimeToLive=3600
     exo.cache.calendar.UserCalendar.strategy=LIRS
     exo.cache.calendar.UserCalendar.cacheMode=asyncInvalidation

     # Calendar Cache Configuration - User Calendar Setting
     exo.cache.calendar.UserCalendarSetting.MaxNodes=1000
     exo.cache.calendar.UserCalendarSetting.TimeToLive=3600
     exo.cache.calendar.UserCalendarSetting.strategy=LIRS
     exo.cache.calendar.UserCalendarSetting.cacheMode=asyncInvalidation

     # Calendar Cache Configuration -Event Categories
     exo.cache.calendar.EventCategories.MaxNodes=1000
     exo.cache.calendar.EventCategories.TimeToLive=3600
     exo.cache.calendar.EventCategories.strategy=LIRS
     exo.cache.calendar.EventCategories.cacheMode=asyncReplication

The specific configuration of each Calendar cache can be found in:

  • $PLATFORM_TOMCAT_HOME/webapps/calendar-extension.war!/WEB-INF/cs-extension/cs/cs-configuration.xml (Tomcat).
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear!/calendar-extension-webapp.war!/WEB-INF/cs-extension/cs/cs-configuration.xml (JBoss).

GroupCalendarCache

The GroupCalendarCache caches the Calendar objects. This object contains metadata information of a calendar, such as calendar name, time zone, permissions. When any users access the cached group calendar, the metadata of this group calendar will be retrieved from cache rather than the database.

  • The cached GroupCalendarCache is invalidated when the user updates calendar metadata, such as creating, deleting, updating calendars (changing time zone).
  • The GroupCalendarCache size equals to the number of Calendar objects in cache.
  • Each Calendar object is approximately 75 bytes, so the maximum heap size equals to the cache size multiplied by 75 bytes.

UserCalendarCache

The UserCalendarCache caches the Calendar object. When any users access the cached user calendar, the metadata of this user calendar will be retrieved from cache rather than the database.

  • The UserCalendarCache is invalidated when the user updates calendar metadata, such as creating, deleting, updating calendar (changing time zone).
  • The UserCalendarCache size equals to the number of Calendar objects in cache.
  • Each Calendar object is approximately 75 bytes, so the maximum heap size equals to the cache size multiplied by 75 bytes.

GroupCalendarEventCache

The GroupCalendarEventCache caches information about events, for example, summary, datetime, invitations, attachments. When any users show content of a group calendar (for example, its events, tasks) for the first time, a query will be made, then put the result to the cache. When another users access the cached content, its data will be retrieved from cache rather than the database.

  • The GroupCalendarEventCache is invalidated when the users make changes on content of the group calendar, for example, creating, deleting tasks, updating summary of events.
  • The GroupCalendarEventCache size equals to the number of events in cache.
  • If the event does not contain the attachment file, each event object is approximately 200 bytes. Therefore, the maximum heap size equals to the cache size multiplied by 200 bytes.

GroupCalendarRecurrentEventCache

The GroupCalendarRecurrentEventCache caches information about recurring events, for example, summary, datetime, invitations, and attachment. When any users show content of a group calendar that contains the recurring event (for example, its events, tasks) for the first time, a query will be made, then put the result to the cache. When another users access the cached content, the data query will be retrieved from cache rather than the database.

  • The GroupCalendarRecurrentEventCache is invalidated when the user makes changes on recurring events, for example, deleting, updating summary of recurring events.
  • The GroupCalendarRecurrentEventCache size equals to the number of recurring events in cache.
  • If the recurring event does not contain the attachment file, each object is approximately 200 bytes. Therefore, the maximum heap size equals to the cache size multiplied by 200 bytes.

UserCalendarSettingsCache

The UserCalendarSettingsCache caches information about calendar settings, such as datetime format, calendar filter, view types. When the user needs calendar settings, such as access to calendar page and need to render current view (month view, week view), a query is made and put the setting information to the cache. If another users access the cached calendar settings, the data will be directly retrieved from cache rather than the database.

  • The UserCalendarSettingsCache is invalidated when the user changes his settings or the user is deleted.
  • The UserCalendarSettingsCache size equals to the number of calendar settings in cache.
  • Each Calendar setting object is approximately 80 bytes, so the maximum heap size equals to the cache size multiplied by 80 bytes.

Calendar Cache by ID

This cache will manage:

  • User private calendars by id and username.
  • User shared calendar by id and username.
  • Group calendar by id.

Calendar originating datasource by calendarId

This cache will manage originating datasource name (“jcr” or “task”) to be able to search for the calendar information from the dedicated store.

EventCategoriesCache

The EventCategoriesCache caches event category names and Ids. When an event category is called for the first time, a query is made and data is put into the cache. For next time, when another users call the cached event category, its data will be retrieved from cache rather than the database.

  • The EventCategoriesCache is invalidated when the user creates, updates or deletes the event category.
  • The EventCategoriesCache size equals to the number of event categories in cache.
  • The EventCategoriesCache size is approximately 24 bytes, so the maximum heap size equals to the cache size multiplied by 24 bytes.

End-date suggestion

eXo Platform offers the end-date suggestion feature in Calendar that you can change in exo.properties file.

# auto suggest the end of event time to 1 hour (2 x 30 min)
exo.calendar.default.event.suggest=2
# auto suggest the end of task time to 30 minutes (1 x 30 min)
exo.calendar.default.task.suggest=1

In which:

  • The numeric value of duration suggestion is complied with the following rules: 1 = 30 minutes, 2 = 1 hour, 3 = 1 hour 30 minutes, 4 = 2 hours. This means 1 block equals to 30 minutes.
  • exo.calendar.default.event.suggest: Defines the duration of an event. That is, if the start-time is 7:00AM in the From field, the end-time will be auto-increased to 8:00AM in the To field. “2” is set by default for the duration of events.
  • exo.calendar.default.task.suggest: Defines the duration of a task. That is, if the start-time is 7:00AM in the From field, the end-time will be auto-increased to 7:30AM in the To field. “1” is set by default for the duration of tasks.

Predefined users, groups and memberships

When eXo Platform starts for the first time, it initializes some users, groups and memberships, such as user root and group /platform. Some user attributes are set also, including password, firstname, lastname and email.

First you should get familiar with the expression of group and membership. If a user has the member:/platform/users membership, it means the user is a member of the /platform/users group. The groups are organized like a tree, in which /platform/users is a sub-group of /platform group.

A membership is formed by a membership type and a group. Member, editor and manager are some of predefined membership types. So strictly speaking, “membership type” and “membership” are different concepts. However, the word “membership” is sometimes used with the meaning of “membership type”.

Next you will learn the configurations of predefined users, groups and memberships which are written in:

  • $PLATFORM_TOMCAT_HOME/webapps/platform-extension.war!/WEB-INF/conf/organization/organization-configuration.xml (Tomcat)
  • $PLATFORM_JBOSS_HOME/standalone/deployments/platform.ear!/platform-extension-webapp.war!/WEB-INF/conf/organization/organization-configuration.xml (JBoss)

This section does not directly aim at changing those predefined organizational data, but if it is the further step you want to go, you can easily perform via the extension mechanism provided by eXo Platform.

Organizational data initializer

At top of the configuration file, you see the initializer declaration that is supposed to create all the predefined data discussed here:

<component-plugin>
    <name>init.service.listener</name>
    <set-method>addListenerPlugin</set-method>
    <type>org.exoplatform.services.organization.OrganizationDatabaseInitializer</type>
    <description>this listener populate organization data for the first launch</description>
    <init-params>
        <value-param>
            <name>checkDatabaseAlgorithm</name>
            <description>check database</description>
            <value>entry</value>
        </value-param>
        ...
    </init-params>
</component-plugin>

Notice the value of checkDatabaseAlgorithm. If it is set to entry, each user, group and membership listed in the configuration is checked each time eXo Platform is started. If an entry does not exist in the database yet, it will be created. If the value is set to empty, the data will be updated to the database only if the database is empty.

Predefined membership types

All predefined membership types can be found under the membershipType field. Here is an extract:

<field name="membershipType">
    <collection type="java.util.ArrayList">
        <value>
            <object type="org.exoplatform.services.organization.OrganizationConfig$MembershipType">
                <field name="type"><string>*</string></field>
                <field name="description"><string>Any membership type</string>  </field>
            </object>
        </value>
        <value>
            <object type="org.exoplatform.services.organization.OrganizationConfig$MembershipType">
                <field name="type"><string>manager</string></field>
                <field name="description"><string>manager membership type</string></field>
            </object>
        </value>
        ...
    </collection>
</field>

Predefined groups

All predefined groups can be found under the group field. Here is an extract:

<field name="group">
    <collection type="java.util.ArrayList">
        <value>
            <object type="org.exoplatform.services.organization.OrganizationConfig$Group">
                <field name="name"><string>developers</string></field>
                <field name="parentId"><string /></field>
                <field name="description"><string>the /developers group</string></field>
                <field name="label"><string>Development</string></field>
            </object>
        </value>
        ...
    </collection>
</field>

Predefined users

All predefined users can be found under the user field. The configurations are username, firstname, lastname, email, password and the list of memberships granted to the user. Here is an extract:

<field name="user">
    <collection type="java.util.ArrayList">
        <value>
            <object type="org.exoplatform.services.organization.OrganizationConfig$User">
                <field name="userName"><string>${exo.super.user}</string></field>
                <field name="password"><string>gtn</string></field>
                <field name="firstName"><string>Root</string></field>
                <field name="lastName"><string>Root</string></field>
                <field name="email"><string>root@localhost</string></field>
                <field name="groups">
                    <string>*:/platform/administrators,*:/platform/users,*:/platform/web-contributors,*:/organization/employees,member:/organization/management/executive-board</string>
                </field>
            </object>
        </value>
        ...
    </collection>
</field>

Note that the code above uses the exo.super.user property which is set to root in exo.properties file:

Gadget configuration

Gadget configuration consists of OAuth key, Shindig properties, and security token key. By default those configuration files are located at:

  • gatein/conf/gadgets for Tomcat.
  • standalone/configuration/gatein/gadgets for JBoss.

To use your customized configuration files, it is recommended that you replace default files in that location with yours.

It is possible to change the location by pointing exo.conf.dir to another folder. However, exo.conf.dir holds many configuration files besides gadgets, so take care that you have those files in the new folder. Also note that the folder of gadgets files will be ${exo.conf.dir}/gadgets.

To change exo.conf.dir:

  • In Tomcat: customize the variable EXO_CONF_DIR=/path/to/your/folder (see Customizing variables for how-to).

  • In JBoss: edit the property exo.conf.dir in standalone/configuration/standalone-exo.xml (standalone-exo-cluster.xml in cluster mode).

    <sytem-properties>
        <property name="exo.conf.dir" value="/path/to/your/folder"/>
    </system-properties>
    

The security token key (key.txt) is automatically generated by the server so you just need to acknowledge its location. Next is more information about OAuth key and Shindig properties.

OAuth key configuration

In eXo Platform, the OAuth gadgets use an OAuth key to authorize with external service providers. There is always a default key defined in the oauthkey.pem file. This key will be used in case the OAuth gadgets do not indicate a key. It is strongly recommended that you create your own oauthkey.pem file by using the openssl tool and some commands as follows:

openssl req -newkey rsa:1024 -days 365 -nodes -x509 -keyout testkey.pem -out testkey.pem -subj '/CN=mytestkey'
openssl pkcs8 -in testkey.pem -out oauthkey.pem -topk8 -nocrypt -outform PEM

Then, replace the default oauthkey.pem with yours.

Disabling Shindig online features

Some Shindig features require online access which may lead to significant delay time at startup time. Administrators can disable those features in the shindig.properties file. Once the online features, for example analytics, are disabled, they will not be available in gadgets.

Default (enabled):

shindig.features.default=res://features/default-features.txt,res://features/online-features.txt

To disable:

shindig.features.default=res://features/default-features.txt

Enabling/Disabling groovy templates statistics

Management and Monitoring Gadgets is a set of administrative gadgets that provide a global vision for the system and they can provide performance statistics useful for administrators.

With eXo Platform 4.4, a new parameter configurable through exo.properties file, was introduced:

exo.statistics.groovy.template.enabled=true

This parameter allows to enable/disable groovy templates statistics that is collected asynchronously. Enabling it (i.e setting it to “True”) activates the statistics collection to be made in memory without logs.

Note

This parameter is not necessary for production environements. It could be activated for testing purposes.

Search connector configuration

There are a number of built-in Search connectors which are activated by default in eXo Platform. You can easily turn any of them off by setting its corresponding property to false in the exo.properties file, as referring the following table:

Property Description
exo.unified-search.connector.f ile.enable Turn on/off Unified Search connector for all files. The default is true, that is, all files are included in the search scope.
exo.unified-search.connector.w iki.enable Turn on/off Unified Search connector for all Wiki pages. The default is true, that is, all Wiki pages are included in the search scope.
exo.unified-search.connector.p age.enable Turn on/off Unified Search connector for all portal pages. The default is true, that is, all portal pages are included in the search scope.
exo.unified-search.connector.p ost.enable Turn on/off Unified Search connector for all Forum posts. The default is true, that is, all Forum posts are included in the search scope.
exo.unified-search.connector.t ask.enable Turn on/off Unified Search connector for all Calendar tasks. The default is true, that is, all Calendar tasks are included in the search scope.
exo.unified-search.connector.s pace.enable Turn on/off Unified Search connector for all spaces. The default is true, that is, all spaces are included in the search scope.
exo.unified-search.connector.e vent.enable Turn on/off Unified Search connector for all Calendar events. The default is true, that is, all Calendar events are included in the search scope.
exo.unified-search.connector.p eople.enable Turn on/off Unified Search connector for all users. The default is true, that is, all users are included in the search scope.
exo.unified-search.connector.d ocument.enable Turn on/off Unified Search connector for all documents. The default is true, that is, all documents are included in the search scope.

Unified Search configuration

eXo Platform exposes several parameters for effective use of Unified Search Engine. You can change these parameters in :ref:`exo.properties <Configuration.ConfigurationOverview>`file.

# Enables Fuzzy search engine
# Values: true/false
exo.unified-search.engine.fuzzy.enable=true

# Sets the required similarity between the query term and the matching terms
# Values : Between 0 and 1
exo.unified-search.engine.fuzzy.similarity=0.5

# List characters will be ignored by indexer
exo.unified-search.excluded-characters=.-

Fuzzy parameters

Since 4.0.4, there are two properties that allow you to enable/disable Fuzzy search and adjust its effectiveness. You can read about Fuzzy search here. Basically, the engine searches for not only exact keyword but also similar words. It is likely a feature expected by end-users, but it is also a deal with search speed. That is why you should have ability to adjust degree of similarity and enable/disable Fuzzy search.

By default, Fuzzy search is enabled. Fuzzy search will be performed when the user adds a tilde (~) after a single keyword. So the “Home~” keyword triggers a Fuzzy search of which the result may include “Rome”. Also, the user can append a similarity to narrow or extend the search result, for example “Home~0.8”.

Property Description
exo.unified-search.engine.fuzz y.enable The value can be true or false that means Fuzzy search is enabled or disabled respectively. The default is true.
exo.unified-search.engine.fuzz y.similarity

The default similarity that varies between 0 and 1. The closer to 1 this value is set, the more found words are similar to the keyword. The value of this property is effective when the user does not add a similarity.

Use the period (.) for floating point, for example “0.1”, “0.2”. The default is 0.5.

Excluded characters

By default only the whitespace is recognized as the word separator - means if the data is “Lorem Ipsum”, there are two indexes will be created for “Lorem” and “Ipsum”.

The built-in indexing service of eXo Platform allows more word separators, like dot (.) or hyphen (-). To define those, edit the property exo.unified-search.excluded-characters.

When a user types a phrase to search, the word separator is used also. For example if hyphen is configured, and the user types “Lorem-Ipsum”, then the query is sent as if it is two words.

Elasticsearch Embedded mode Configuration

When deployed as embedded, the Elasticsearch configuration files (elasticsearch.yml and logging.yml) are embedded in the add-on. All the properties can be set directly in exo.properties and will override the default properties defined in elasticsearch.yml and logging.yml.

Properties of the Elasticsearch embedded node

All the properties below are standard properties of Elasticsearch. When a property es.xxx is defined in exo.properties, it is automatically picked by the embedded Elasticsearch node (without the “es.” prefix).

################################ Elasticsearch Embedded node ################################

es.cluster.name=exoplatform-es
es.node.name=exoplatform-es-embedded
es.network.host=127.0.0.1
es.discovery.zen.ping.unicast.hosts=["127.0.0.1"]
es.http.port=9200
es.path.data=gatein/data

More details about these properties can be found in the Properties reference chapter.

Properties of the Elasticsearch client

eXo Platform communicates with the Elasticsearch server via multiple components through so-called client code. The client code differentiates calls done to the server for indexing and for searching. It allows to have different a deployment topology where different Elasticsearch server have different roles. The following client paramters are configurable in exo.properties

################################ Elasticsearch ################################
exo.es.embedded.enabled=true
exo.es.index.server.url=http://127.0.0.1:9200
exo.es.index.server.username=root
exo.es.index.server.password=xxxxx
exo.es.indexing.batch.number=1000
exo.es.indexing.replica.number.default=1
exo.es.indexing.shard.number.default=5
exo.es.indexing.request.size.limit=10485760
exo.es.reindex.batch.size=100
exo.es.search.server.url=http://127.0.0.1:9200
exo.es.search.server.username=root
exo.es.search.server.password=xxxxx

The parameter

exo.es.embedded.enabled=true

allows to enable/disable Elasticsearch Embedded node startup. It is set to True by default. More details about the parameters in Properties reference.

Properties of the indexing processor and connectors

The properties below allow to configure indexing parameters such as the number of shards, replicas, batch size…

For more details about indexing with Elasticseach, you can take a look in this documentation.

################################ Properties of the indexing processor ################################
exo.es.indexing.batch.number=1000
exo.es.indexing.request.size.limit=10485760
exo.es.reindex.batch.size=100
################################ Properties of the indexing connectors ################################
exo.es.indexing.replica.number.default=1
exo.es.indexing.shard.number.default=5

More details about the parameters in Properties reference chapter.

CometD

What is CometD?

CometD is a set of libraries that facilitates the writing of web applications that perform messaging over the web such as web chat applications.

The role of CometD is to deliver messages over the wire using the best available transport: Websocket or HTTP, independently of the APIs used in the application. It also provides transparent fallback in case WebSocket does not work.

CometD clustering

CometD provides a clustering solution called Oort that allows you to scale horizontally your web applications. With a CometD based system in cluster mode, clients connect to multiple nodes instead of a single node.

Oort clustering is not a high-availability solution. In fact, when a node is down, all the clients are disconnected and then connected to another node by a new handshake. When this happens then if the application did not implement a method to retrieve information, the data build on the client side is lost.

CometD configuration

To configure CometD in either cluster or standalone mode, some parameters are needed. A list of parameters is provided in CometD’s Official documentation.

Note

All CometD parameters are configurable in eXo Platform in the exo.properties file by prefixing them with exo.cometd.. For example, to override the maximum size of Websocket messages, a value must be set for the parameter ws.maxMessageSize. Thus, in eXo Platform this value must be set in exo.properties through the exo.cometd.ws.maxMessageSize.

Youtube integration

eXo Platform uses YouTube Data API v3 that provides access to YouTube data, such as videos, playlists, and channels. To enable this, you should configure a Youtube V3 API Key property via exo.properties file.

For instance:

youtube.v3.api.key=AIzaSyDToZc6oTOpe7kZIJeSUMvxfyoS6hhKJuI

In which:

Notification

The feature related to configuration in this section is the Email/On-site notification. Here are some aspects of the feature:

  • Users can receive daily/weekly emails that sum up the activities they are interested in. This is performed in the background by jobs called NotificationDailyJob and NotificationWeeklyJob.

  • In the Web UI, the notifications pop up immediately when an activity happens. And there is a page called “View All” where users can see all the recent notifications.

    In the background, a job called WebNotificationJob takes care to remove notifications that are older than a configurable live time.

Here under is the list of related properties that you can configure via exo.properties file.

  • exo.notification.NotificationDailyJob.expression

    This is the Cron expression to schedule the daily emails. By default it is 0 0 23 ? * * (11:00pm every day).

    Learn to write Cron expression string here.

  • exo.notification.NotificationWeeklyJob.expression

    This is the Cron expression to schedule the weekly emails. By default it is 0 0 11 ? * SUN (11:00am every Sunday).

  • exo.notification.service.QueueMessage.period

    When they run, the jobs divide emails into batches and send them sequentially for preventing overloads. This configuration is the delay time (in seconds) between two batches.

    The default is 60 (one minute).

  • exo.notification.service.QueueMessage.numberOfMailPerBatch

    This is the (maximum) number of emails of each batch. The default is 30.

  • exo.notification.portalname

    This is the “from” field in the emails. The default is eXo.

  • exo.notification.maxitems

    The maximum number of notifications displayed in the popover list. The default is 8.

  • exo.notification.viewall

    The number of days a notification takes place in the “View All” page. When it reaches its live time, it will be removed by the WebNotificationJob. The default is 30 (days).

  • exo.notification.WebNotificationCleanJob.expression

    The Cron expression to schedule the WebNotificationJob. By default it runs at 11:00pm every day (0 0 23 ? * *).

Notification channels configuration

In eXo Platform, two notification channels are available by default:

  • Web channel: notifications are sent on the web browser.
  • Email channel: notifications are sent via the email.

It is possible to define which channels to activate through the parameter exo.notification.channels in exo.properties file.

It is a comma separated property which could take these values:

  • MAIL_CHANNEL
  • WEB_CHANNEL

By default (when the property is not customized or empty), all the available channels are activated. When a notification channel is added through an extension, it is automatically activated.

Document versioning

By default, versioning is enabled for documents contained in the Managed Sites, Groups and Personal Documents drives. To change this configuration, edit the exo.ecms.documents.versioning.drives property in the exo.properties file.

For example:

exo.ecms.documents.versioning.drives=Managed Sites,Personal Documents

in which the drives are separated by commas.

Besides, to control the data arisen from this feature, eXo Platform provides you with the two properties:

  • exo.ecms.documents.versions.max: defines the maximum number of versions that a document can have. When the maximum number of versions is reached, only the X last versions are kept while the other ones are permanently deleted. A non-positive value means no limit - by default this property is set to 0 (no limit).
  • exo.ecms.documents.versions.expiration: defines the expiration time (in days) of a document version. When the expiration time is reached, the version is permanently deleted. The last version of a document is never deleted. A non-positive value means no limit - by default this property is set to 0 (no limit).

Note

If the value of the property exo.ecms.documents.versioning.drives is updated to add or remove drives, the documents already existing in the old and new drives are not impacted. Only the new documents are impacted by the updates. All the previous rules apply, depending on whether the document is versioned or not.

Document Viewer

The Document Viewer relies on document conversion on serverside which can take significant resources on large files. In order to avoid excessive resource consumption, this component limits the size of files it can display. Limits are set both in file weight and in number of pages in the document:

  • exo.ecms.documents.pdfviewer.max-file-size: defines the maximum size in Megabytes that a file can weight to be displayed in the document viewer. Beyond that size, the document viewer displays a warning message instead of the document content :

    image4

    Default limit is 10MB. Any non-positive or invalid value will fallback to default.

  • exo.ecms.documents.pdfviewer.max-pages: defines the maximum number of pages that a document can contain to be displayed in the document viewer. Beyond that number of pages, the document viewer displays a warning message instead of the document content.

    image5

    Default limit is 99 pages. Any non-positive value or invalid value will fallback to default.

Forgot Password

If you forget your password, you can request the system to send you a link to reset it. The link will be sent to your email and will expire as soon as you successfully reset the password or after an expiration time.

The expiration time is 24 hours by default. To change it, edit the following in exo.properties file.

exo.portal.resetpassword.expiretime=24

The time unit is hour.

Password Encryption

For security, the user passwords are encrypted before being stored into the database. When a user logs in, he provides a password in clear text. This given password is then encrypted by the same algorithm and the same encoder class before being compared with the stored password. If they match, the user gets authenticated.

As of eXo Platform 4.3, the encoder and the algorithm can be configured via exo.properties file.

Note

It is not likely administrators will want to change the default encoder and algorithm. However for users who upgrade from a previous version older than 4.3, it is important to know that the default encoder and the default algorithm have changed, so you will need to re-configure it back to the old one which has been used, otherwise old users will not be able to log in.

Before 4.3, the defaults are:

  • Encoder class: org.picketlink.idm.impl.credential.HashingEncoder
  • Algorithm: MD5

As of 4.3, the defaults are:

  • Encoder class: org.picketlink.idm.impl.credential.DatabaseReadingSaltEncoder
  • Algorithm: SHA-256

To change the defaults in 4.3 back to the old ones, edit exo.properties to have:

exo.plidm.password.class=org.picketlink.idm.impl.credential.HashingEncoder
exo.plidm.password.hash=MD5

Task Management

Note

The Task Management application is packaged as an add-on, so you need to install it first. Refer to this guide for more details.

To define a default workflow for new projects in the Task Management application, you can configure a property named exo.tasks.default.status via exo.properties file.

For instance:

exo.tasks.default.status=To Do, In Progress, Wait, Validate, Done

in which, each status in the workflow is separated by a comma.

File storage configuration

With eXo Platform 4.4 version, a new file storage subsystem has been introduced besides JCR. It’s currently used for wiki attachments and user and space profile pictures. Read more in File Storage. A property allows to indicate which file storage method should be used:

exo.files.binaries.storage.type=fs

Setting exo.files.binaries.storage.type to rdbms means that files will be stored as BLOBs in the database.

Setting exo.files.binaries.storage.type to fs means that files will be stored on the server file system.

Other properties related to file storage can be configured in exo.properties file:

  • exo.commons.FileStorageCleanJob.expression=0 0 11 ? * SUN: defines the scheduling (a cron expression) of the job responsible to clean unused files.

  • exo.commons.FileStorageCleanJob.retention-time=30: defines how long unused files should be retained before deletion. It is set to 30 days by default.

  • exo.commons.FileStorageCleanJob.enabled=true: enables/disables the cron job. By default, the job is enabled i.e set to true.

  • In case you set exo.files.binaries.storage.type to fs, you can parameter the files storage location with this parameter: exo.files.storage.dir. Its default value is set to ${exo.data.dir}/files

    The directory exo.files.storage.dir should be shared in cluster mode.

Chat Configuration

Configuring the eXo Chat add-on can be done by creating a chat.properties file or using the exo.properties file (if you have not created this file, see Configuration Overview).

These configuration files are located in:

  • $PLATFORM_TOMCAT_HOME/gatein/conf/ for Tomcat.
  • $PLATFORM_JBOSS_HOME/standalone/configuration/gatein/ for JBoss.

Note

You were asked to create the files for security during the setup. If you include any parameter below into the exo.properties, you should add the prefix chat. to its name, such as chat.dbServerHost. Besides, in case both of these files are used, parameters in the exo.properties file will have higher priority than those in the chat.properties file.

Database

Parameter Default Description
dbServerType mongo You should always use the default value. The other value, embed, is used for unit testing.
dbServerHost localhost The host name or IP of MongoDB.
dbServerPort 27017 The port number to connect to MongoDB host.
dbServerHosts   The MongoDB nodes to connect to, as a comma-separated list of <host:port> values. For example “host1:27017,host2:27017,host3:27017 “.
dbName chat Name of the Mongo database name.
``dbAuthentication `` false Set it true if authentication is required to access MongoDB.
dbUser EMPTY Provide the username to access the database if authentication needed.
dbPassword EMPTY Provide the password to access the database if authentication needed.

Warning

It is highly recommended to define the parameter dbServerHosts instead of defining the two parameters dbServerHost and dbServerPort as they are depracated starting from eXo Platform 5.0 version.

Generally, you do not need to configure those unless you have secured your MongoDB. See details about connecting to secured MongoDB in Secured MongoDB.

Mail Server

This server is used for Sending meeting notes (see Recording a discussion). The parameters of mail configuration for the eXo Chat server are the same as those of Outgoing Mail Service, but without the prefix exo.. Notice that if you include these parameters into the exo.properties file, you should add the prefix chat. to their name.

Chat Server

Parameter Default Description
  false

The mode of the chat server:

  • The parameter is set to true if the chat is in a standalone mode.
  • The parameter is set to false if the the chat is in embedded mode.
chatPassPhrase chat The password to access REST service on the eXo Chat server.
chatCronNotifCle anup 0 0/60 * * * ? The notifications are cleaned up every one hour by default. To learn the syntax of Cron expression, see Scheduled synchronization, Administrator guide
teamAdminGroup /platform/adminis trators The eXo group who can create teams.
chatReadDays 30 (days) When a user reads a chat, the application displays messages of some days in the past.
chatReadTotalJso n 200 The number of messages that you can get in the Chat room.

Chat Client updates

Parameter Default Description
``chatIntervalChat `` 5000 (milliseconds) Time interval to refresh messages in a chat.
chatIntervalSess ion 60000 (milliseconds) Time interval to keep a chat session alive in milliseconds.
chatIntervalStat us 60000 (milliseconds) Time interval to refresh user status in milliseconds.
chatIntervalNoti f 5000 (milliseconds) Time interval to refresh Notifications in the main menu in milliseconds.
chatIntervalUser s 60000 (milliseconds) Time interval to refresh Users list in milliseconds.
chatTokenValidit y 60000 (milliseconds) Time after which a token will be invalid. The use will then be considered offline.

Configuring eXo Web Conferencing

eXo Web Conferencing add-on enables users to make video calls through the interface of eXo Platform. You can parameter this add-on by configuring the below variables in exo.properties file.

Parameter Default Description
webconferencing.webrtc.bundlePolicy balanced WebRTC setting to indicate which media-bundling policy to use when gathering ICE candidates.
webconferencing.webrtc.iceCandidatePoolSize 0 WebRTC setting which define the size of the prefetched ICE pool.
webconferencing.webrtc.iceTransportPolicy all WebRTC setting to indicate which candidates the ICE Agent is allowed to use.
webconferencing.webrtc.default.stun.enabled true Indicates if the default defined STUN servers must be used.
webconferencing.webrtc.exo.stun.enabled false Indicates if the default defined eXo STUN servers must be used.
webconferencing.webrtc.xirsys.stun.enabled false Indicates if the Xirsys STUN servers must be used.
webconferencing.webrtc.exo.turn.enabled false Indicates if the default defined TURN servers must be used.
webconferencing.webrtc.exo.turn.username   Username to authenticate on default TURN servers.
webconferencing.webrtc.exo.turn.credential   Password to authenticate on default TURN servers.
webconferencing.webrtc.xirsys.turn.enabled false Indicates if the Xirsys TURN servers must be used.
webconferencing.webrtc.xirsys.username   Username to authenticate on Xirsys TURN servers.
webconferencing.webrtc.xirsys.credential   Password to authenticate on Xirsys TURN servers.
webconferencing.webrtc.active true Indicates if the WebRTC connector is active.

Update of last login time

By default, eXo Platform persists the last login time information for each user in an internal database. You may need to disable this parameter to optimize login time especially when your system is highly solicited by a lot of concurrent users. You can disable this feature by configuring the parameter exo.idm.user.updateLastLoginTime in exo.properties file. The default value is set to true.

Setting exo.idm.user.updateLastLoginTime to true enables the update, in the IDM database, of the last login time each time the user login to eXo Platform.

Setting exo.idm.user.updateLastLoginTime to false disables the update of the user’s last login time and if the platform is connected to an external system for users storage (such as LDAP or AD), the last login time will be updated in this external system.