Support for relational database persistence in AEM is implemented using the Document Microkernel. The Document Microkernel is the basis that is also used for implementing MongoDB persistence.
It consists of a Java API that is based on the Mongo Java API. An implementation of a BlobStore API is also provided. By default, blobs are stored in the database.
Support for PostgreSQL 9.4 is also provided, but only for demo purposes. It will not be available for production environments.
The following databases are fully supported in AEM:
- DB2 10.5
- Oracle 12c
Experimental support is also available for these databases:
- Microsoft SQL Server
The repository is created by configuring the DocumentNodeStoreService OSGi service. It has been extended to support relational database persistence in addition to MongoDB.
In order for it to work, a data source needs to be configured with AEM. This is done via the org.apache.sling.datasource.DataSourceFactory.config file. The JDBC drivers for the respective database need to be provided separately as OSGi bundles inside the local configuration.
For steps on creating OSGi bundles for JDBC drivers, please see this documentation on the Apache Sling website.
Once the bundles are in place, follow the below steps in order to configure AEM with RDB persistence:
Configure the data source and the JDBC parameters by creating another configuration file with the following name in the crx-quickstart\install folder:
For detailed information on the data source configuration for each supported database, see Data Source Configuration Options.
The org.apache.sling.datasource.DataSourceFactory-oak.config OSGi configuration is used to configure the parameters needed for communication between AEM and the database persistence layer.
The following configuration options are available:
- datasource.name: The data source name. The default is oak.
- url: The URL string of the database that needs to be used with JDBC. Each database type has its own URL string format. For more info, see URL String Formats below.
- driverClassName: The JDBC driver class name. This will differ depending on the database you want to use and subsequently, the driver that is needed to connect to it. Below are the class names for all the databases supported by AEM:
- org.postgresql.Driver for PostgreSQL;
- com.ibm.db2.jcc.DB2Driver for DB2;
- oracle.jdbc.OracleDriver for Oracle;
- com.mysql.jdbc.Driver for MySQL and MariaDB (experimental);
- com.microsoft.sqlserver.jdbc.SQLServerDriver for Microsoft SQL Server (experimental).
- username: The username the database runs under.
- password: The database password.
A different URL string format is used in the data source configuration depending on the database type that needs to be used. Below is a list of formats for the databases that AEM currently supports:
- jdbc:postgresql:databasename for PostgreSQL;
- jdbc:db2://localhost:port/databasename for DB2;
- jdbc:oracle:thin:localhost:port:SID for Oracle;
- jdbc:mysql://localhost:3306/databasename for MySQL and MariaDB (experimental);
- jdbc:sqlserver://localhost:1453;databaseName=name for Microsoft SQL Server (experimental).