Configure Bloomreach Experience Manager for PostgreSQL

Overview

This guide describes how to configure Bloomreach Experience Manager (XM) to use a PostgreSQL database for its content repository and the Tomcat application container.

When to Use

Use this configuration when you want to run Bloomreach Experience Manager with PostgreSQL as the backing database.

Prerequisites

Configuration Steps

1. Configure the DataSource

Set up the DataSource to connect to your PostgreSQL database.

  • JDBC URL:
    jdbc:postgresql://DBHOST:DBPORT/DBNAME
  • Driver class:
    org.postgresql.Driver
  • Validation query:
    SELECT 1

2. Update Repository Configuration

Modify the repository configuration to use PostgreSQL-specific classes and settings.

Set the following properties:

  • databaseType:
    postgresql
  • FileSystem class:
    org.apache.jackrabbit.core.fs.db.DbFileSystem
  • PersistenceManager class:
    org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager
  • Journal class:
    org.apache.jackrabbit.core.journal.DatabaseJournal
  • DataStore class:
    org.apache.jackrabbit.core.data.db.DbDataStore

Example Configurations

Example JNDI Resource for Tomcat

Define the JNDI resource in Tomcat's conf/context.xml:

<Resource name="jdbc/repositoryDS" auth="Container" type="javax.sql.DataSource" maxTotal="20" maxIdle="10" initialSize="2" maxWaitMillis="10000" testWhileIdle="true" testOnBorrow="false" validationQuery="SELECT 1" timeBetweenEvictionRunsMillis="10000" minEvictableIdleTimeMillis="60000" username="DBUSER" password="DBPASS" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://DBHOST:DBPORT/DBNAME" />

Example repository.xml

The following is a complete example of a repository.xml configured for PostgreSQL:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 2.6//EN" "http://jackrabbit.apache.org/dtd/repository-2.6.dtd"> <Repository> <DataSources> <DataSource name="repositoryDS"> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/repositoryDS"/> <param name="databaseType" value="postgresql"/> </DataSource> </DataSources> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="dataSourceName" value="repositoryDS"/> <param name="schemaObjectPrefix" value="repository_"/> </FileSystem> <Security appName="Jackrabbit"> <SecurityManager class="org.hippoecm.repository.security.SecurityManager"/> <AccessManager class="org.hippoecm.repository.security.HippoAccessManager"/> <LoginModule class="org.hippoecm.repository.security.HippoLoginModule"/> </Security> <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/> <Workspace name="${wsp.name}"> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="dataSourceName" value="repositoryDS"/> <param name="schemaObjectPrefix" value="${wsp.name}_"/> </FileSystem> <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager"> <param name="dataSourceName" value="repositoryDS"/> <param name="schemaObjectPrefix" value="${wsp.name}_"/> <param name="externalBLOBs" value="true"/> <param name="consistencyCheck" value="false"/> <param name="consistencyFix" value="false"/> <param name="bundleCacheSize" value="256"/> </PersistenceManager> <SearchIndex class="org.hippoecm.repository.FacetedNavigationEngineImpl"> <param name="indexingConfiguration" value="indexing_configuration.xml"/> <param name="indexingConfigurationClass" value="org.hippoecm.repository.query.lucene.ServicingIndexingConfigurationImpl"/> <param name="path" value="${wsp.home}/index"/> <param name="useSimpleFSDirectory" value="true"/> <param name="useCompoundFile" value="true"/> <param name="minMergeDocs" value="100"/> <param name="volatileIdleTime" value="10"/> <param name="maxMergeDocs" value="100000"/> <param name="mergeFactor" value="5"/> <param name="maxFieldLength" value="10000"/> <param name="bufferSize" value="1000"/> <param name="cacheSize" value="1000"/> <param name="onWorkspaceInconsistency" value="log"/> <param name="forceConsistencyCheck" value="false"/> <param name="enableConsistencyCheck" value="false"/> <param name="autoRepair" value="true"/> <param name="analyzer" value="org.hippoecm.repository.query.lucene.StandardHippoAnalyzer"/> <param name="queryClass" value="org.apache.jackrabbit.core.query.QueryImpl"/> <param name="respectDocumentOrder" value="false"/> <param name="resultFetchSize" value="1000"/> <param name="extractorTimeout" value="100"/> <param name="extractorBackLogSize" value="100"/> <param name="excerptProviderClass" value="org.apache.jackrabbit.core.query.lucene.DefaultHTMLExcerpt"/> <param name="supportSimilarityOnStrings" value="true"/> <param name="supportSimilarityOnBinaries" value="false"/> </SearchIndex> <ISMLocking class="org.apache.jackrabbit.core.state.FineGrainedISMLocking"/> </Workspace> <Versioning rootPath="${rep.home}/version"> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="dataSourceName" value="repositoryDS"/> <param name="schemaObjectPrefix" value="version_"/> </FileSystem> <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager"> <param name="dataSourceName" value="repositoryDS"/> <param name="schemaObjectPrefix" value="version_"/> <param name="externalBLOBs" value="true"/> <param name="consistencyCheck" value="false"/> <param name="consistencyFix" value="false"/> <param name="bundleCacheSize" value="64"/> </PersistenceManager> <ISMLocking class="org.apache.jackrabbit.core.state.FineGrainedISMLocking"/> </Versioning> <Cluster> <Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal"> <param name="dataSourceName" value="repositoryDS"/> <param name="databaseType" value="postgresql"/> <param name="schemaObjectPrefix" value="repository_"/> <param name="revision" value="${rep.home}/revision.log"/> <!-- clean up journal table --> <param name="janitorEnabled" value="true"/> <param name="janitorSleep" value="86400"/> <!-- a day in seconds --> <param name="janitorFirstRunHourOfDay" value="3"/> </Journal> </Cluster> <DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore"> <param name="dataSourceName" value="repositoryDS"/> <param name="minRecordLength" value="1024"/> <param name="maxConnections" value="5"/> <param name="copyWhenReading" value="true"/> </DataStore> </Repository>

Example repository.xml for Repository Consistency Checker

The Repository Consistency Checker requires a dedicated repository.xml configuration. Use the following example for PostgreSQL:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 2.6//EN" "http://jackrabbit.apache.org/dtd/repository-2.6.dtd"> <Repository> <DataSources> <DataSource name="ds1"> <param name="driver" value="org.postgresql.Driver"/> <param name="url" value="jdbc:postgresql://DBHOST:DBPORT/DBNAME"/> <param name="user" value="DBUSER"/> <param name="password" value="DBPASS"/> <param name="databaseType" value="postgresql"/> <param name="validationQuery" value="select 1"/> <param name="maxPoolSize" value="10"/> </DataSource> </DataSources> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="dataSourceName" value="ds1"/> <param name="schemaObjectPrefix" value="repository_" /> </FileSystem> <Security appName="Jackrabbit"> <SecurityManager class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager"/> <AccessManager class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager"/> <LoginModule class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule"/> </Security> <DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore"> <param name="dataSourceName" value="ds1"/> <param name="minRecordLength" value="1024" /> <param name="copyWhenReading" value="true" /> <param name="tablePrefix" value="" /> <param name="schemaObjectPrefix" value="" /> </DataStore> <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default" maxIdleTime="2"/> <Workspace name="${wsp.name}"> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="dataSourceName" value="ds1"/> <param name="schemaObjectPrefix" value="${wsp.name}_" /> </FileSystem> <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager"> <param name="dataSourceName" value="ds1"/> <param name="schemaObjectPrefix" value="${wsp.name}_" /> </PersistenceManager> </Workspace> <Versioning rootPath="${rep.home}/version"> <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="dataSourceName" value="ds1"/> <param name="schemaObjectPrefix" value="version_" /> </FileSystem> <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.PostgreSQLPersistenceManager"> <param name="dataSourceName" value="ds1"/> <param name="schemaObjectPrefix" value="version_" /> </PersistenceManager> <ISMLocking class="org.apache.jackrabbit.core.state.FineGrainedISMLocking"/> </Versioning> <Cluster> <Journal class="org.apache.jackrabbit.core.journal.CleanOnCloseDatabaseJournal"> <param name="dataSourceName" value="ds1"/> <param name="schemaObjectPrefix" value="repository_"/> </Journal> </Cluster> </Repository>

Verification

  • Start the Bloomreach Experience Manager application.
  • Confirm that the repository initializes without errors.
  • Verify that content is persisted and retrieved from PostgreSQL.

Troubleshooting

If the application fails to connect to PostgreSQL:

  • Check the JDBC URL, username, and password.
  • Ensure the PostgreSQL server is running and accessible from the application server.
  • Review Tomcat logs for connection errors.
  • Verify that the PostgreSQL JDBC driver is available in the Tomcat lib directory.
Share Feedback
Page: /deploy/on-premise-deployment/configuration/configuring-brxm-for-postgresql
Section: Deploy
Category *
Configure Bloomreach Experience Manager for PostgreSQL | Bloomreach Content Documentation