Adobe Experience Manager 6 with a MongoDB Setup

With AEM 6 the persistence layer which is used to store content, configurations, and program code, is called a MicroKernel (MK). AEM 6 introduced a new MicroKernel and here's what you should know.

AEM 6 introduced a new MicroKernel (MongoMK) which allows the use of MongoDB as a repository. Further MicroKernels may be added along the line but are not fully confirmed yet. In this article we will be looking at a very basic local MongoDB setup.

A simple and local MongoDB with AEM

Requirements:

Follow the steps below to get an AEM author (or publish) up and running using a local MongoDB

1. Prepare a folder structure (sample) as below

./aem_600_mongodb<br>
./aem_600_mongodb/mongodb<br>
./aem_600_mongodb/mongodb/data<br>
./aem_600_mongodb/mongodb/logs

2. Download MongoDB for Mac OSX or other OS (configs in this guide also work with Linux)

http://www.mongodb.org/downloads

3. extract the packages content directly into the mongodb directory as created under point 1. -> ( ./aem_600_mongodb/mongodb/bin should then exist )

4. in your mongodb directory, parallel to the data & logs & bin directory create the mongod.cfg file

mongod.cfg

bind_ip = 127.0.0.1<br>
port = 27017<br>
quiet = false<br>
dbpath = ../data<br>
logpath = ../logs/mongod.log<br>
logappend = true<br>
journal = true<br>
directoryperdb = true<br>
rest = true<br>
httpinterface = true<br>

5. now place your license.properties & AEM 6 quickstart jar in your base directory (in this case ./aem_600_mongodb)

6. extract the AEM 6 jar file (java -jar aem-6.0.0.20140515.jar -unpack)

7. edit the start script under ./aem_600_mongodb/crx-quickstart/bin and add the following properties

CQ_RUNMODE='author,crx3mongo' -&gt; crx3mongo is added here<br>
CQ_JVM_OPTS='-server -Xmx1024m -XX:MaxPermSize=256M -Djava.awt.headless=true -Doak.mongo.uri=mongodb://localhost:27017' -&gt; -Doak.mongo.uri=mongodb://localhost:27017 is added here

8. once the above steps are completed go to your bin directory in your mongodb directory and start mongo db & tail the log

./mongod --config ../mongod.cfg &amp;&amp; tail -f ../logs/mongod.log

9. now start your AEM from the ../crx-quickstart/bin directory and tail the log

./start &amp;&amp; tail -f ../error.log

10. once your AEM is started and everything has been created you got an AEM running on MongoDB

11. for administration purposes have a look at using the robomongo app: http://robomongo.org/

The Adobe documentation and MongoDB documentation is your best bet for further details.

Setup a replica set

A. Change mongod.cfg

bind_ip = mongotest
port = 27017
quiet = false
dbpath = ../data
logpath = ../logs/mongod.log
logappend = true
journal = true
directoryperdb = true
rest = true
httpinterface = true

B. Modify /etc/hosts

172.32.10.10 mongotest

C. Start Mongo with Option --replSet

./mongod --replSet "rs0" --config ../mongod.cfg

D. Open Mongo Console

./mongo 192.168.36.72
rs.initiate()
rs.conf()
{
"_id" : "rs0",
"version" : 1,
"members" : [
{
"_id" : 1,
"host" : "mongotest:27017"
}
]
}
rs.add(mongotest2)
rs.status()
{
"set" : "rs0",
"date" : ISODate("2014-07-21T16:45:15Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "mongotest:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 5559,
"optime" : Timestamp(1405961115, 1),
"optimeDate" : ISODate("2014-07-21T16:45:15Z"),
"electionTime" : Timestamp(1405955596, 2),
"electionDate" : ISODate("2014-07-21T15:13:16Z"),
"self" : true
},
{
"_id" : 3,
"name" : "mongotest2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3445,
"optime" : Timestamp(1405961115, 1),
"optimeDate" : ISODate("2014-07-21T16:45:15Z"),
"lastHeartbeat" : ISODate("2014-07-21T16:45:15Z"),
"lastHeartbeatRecv" : ISODate("2014-07-21T16:45:15Z"),
"pingMs" : 4,
"syncingTo" : "mongotest:27017"
},
],
"ok" : 1
}

**Failover logic with a MongoDB replica set **