Search code examples
jaraemslingoperator-precedence

order of precedence of Sling run modes


I have a doubt over this question

Question: What is the correct order of precedence to setup runmodes in aem? (From left to right, left beign the highest)?

A. System property, Sling properties file, jar file
B. jar file, sling properties file, system property
C. Sling properties file, jar file, system property
D. jar file, System property, Sling properties file

Answer : B

I had gone through various docs and had done multiple experiments over this.

Acc to Adobe documentation the order is - Sling.properties, System property, jar file

Similarly, this Adobe doc has a contradictory opinion - jar file, sling.properties, system property

Also, Apache Sling Doc says that any property to option D (-D) set in manner, n=v, overwrites same named properties in the sling.properties file. which means system property has higher precedence then sling.properties.

Now, these are all according to docs, what I had experimented is-

I made a path ${dir}/crx-quickstart/conf and created a file sling.properties and wrote sling.run.modes=publish. Then renamed the jar file as cq-author-7502.jar. Then run this jar with the command java -jar cq-author-7502.jar -Dsling.run.modes=prod

This is my observation:
1. When the jar runs, Setting 'sling.run.modes' to 'publish' from sling.properties. this message is shown in the terminal.
2. The instance up in author mode. And
3. When I checked the instance-mode in felix console, it was prod

I am totally confused about the order of precedence. As everything seems contradictory to me.

It would be grateful if anyone can put some light on it..

Thank you


Solution

  • I think it depends on when we are checking the run mode precedence, at the time of installation or later on a running instance and how we are starting our instance. There are 2 kinds of run modes. Installation time run mode, custom run modes.

    • Installation time run mode - As explained by official run modes documentation and setup instructions, this can be set only one time at the time of installation. This includes author,publish,nosamplecontent,samplecontent
    • Custom run mode - Own customized run modes e.g. dev, qa, prod etc

    I did some tests (AEM 6.1), precedence is working in following way

    Initial setup

    • Start jar (by double clicking) - In this you do not have option to set run mode in sling.properties, start script first time. JAR name takes precedence.
    • Unpack jar and specify run mode as system properties in start script - JAR name doesn't comes to picture here. In this you do not have option to set run mode in sling.properties. System properties takes precedence.

    Running instance

    • Even if we change run mode in JAR name, it doesn't changes the installation time run mode. For custom run mode, JAR file name is not applicable. Order of precedence is sling.properties -> specifying -r option (command line jar option) -> system properties (start script)

    As far as the question (seems to be AEM certification question), the context is not clear with respect to which they are asking. Helpx article is contributed by community, context might be different. Sling documentation link (it seems as per this link the launchpad version in AEM is old, not 2.4.0). Need to ask Adobe to confirm :).