Issue

Even after updating the code successfully in crx/de, the newly deployed sightly code does not reflect in the AEM site. The site still displays the older sightly code on some publish instances.

Environment

AEM 6.1, 6.2, 6.3

Cause

Since, the code is deployed properly to all the publish instances, the issue is with the recompilation of sightly code on a particular instance or instances.

Whenever a code deployment takes place on an AEM instance, the newly deployed code must force a recompile of the existing code when the associated page is requested. There is a known issue with Sightly[1], which does not properly detect the newly added code and therefore, it does not force a recompilation.

[1] https://issues.apache.org/jira/browse/SLING-6612

Resolution

The complete solution for this problem is available in the AEM release featuring the Scripting HTL Engine version 1.0.34. In the meantime, incorporate the following steps into the deployment process to ensure a uniform experience on all the AEM instances.

  • Place the script [2] in the AEM install directory and grant the AEM user privileges to execute it.
  • Go to the location, where the script is placed on AEM server and execute it using the following command. In the following example, the sample script is placed in the AEM install directory.
./cq-force-recompilation.sh crx-quickstart/ http://localhost:4526 admin:admin
  • The output looks as the following:
stopping the org.apache.sling.commons.fsclassloader bundle...​
deleting file  sytem  classes cache: /Users/ anearora /Desktop/AEM/6.2/TestServer/ crx -quickstart/launchpad/ felix /bundle305/data/classes ...
deleting /var/classes in the JCR...
starting the org.apache.sling.commons.fsclassloader bundle...

It clears out the previously compiled libraries and forces the updated libraries to compile when the associated page is requested.

[2] force-recompilation.sh

#!/bin/bash

if [[ $# -ne 3 || $1 == "-h" ]]; then
    echo "Usage: force-recompilation.sh <crx-quickstart-dir> <http://server:port> <user:password>"
    echo
    echo "Example arguments: crx-quickstart/ http://localhost:4502 admin:admin"
    echo
    echo "This will force a recompilation of all Sling scripts (jsps, java, sightly etc.)."
    exit
fi

dir="$1"
host="$2"
user="$3"

if [ ! -d "$dir/../crx-quickstart" ]; then
    echo "No crx-quickstart directory found."
    exit
fi

echo "stopping the org.apache.sling.commons.fsclassloader bundle..."
bundle="org.apache.sling.commons.fsclassloader"
curl -f -s -S -u $user -F action=stop  $host/system/console/bundles/$bundle > /dev/null
exitCode=$?
if [ $exitCode -ne 0 ]; then
    echo
    if [ $exitCode -eq 22 ]; then
        echo "Invalid admin password."
    fi
    echo "aborted.";
    exit
fi

cd "$dir"

classesDir=`find launchpad/felix -path "*/bundle*/data/classes" -type d`
if [ -d "$classesDir" ]; then
    echo "deleting file sytem classes cache: `pwd`/$classesDir ..."
    rm -rf "$classesDir"
else
    echo "file system classes cache empty or already cleared"
fi

echo "deleting /var/classes in the JCR..."
curl -f -s -S -u $user -X DELETE $host/var/classes > /dev/null

echo "starting the org.apache.sling.commons.fsclassloader bundle..."
curl -f -s -S -u $user -F action=start $host/system/console/bundles/$bundle > /dev/null
if [ $? -ne 0 ]; then
    echo
    echo "aborted, bundle was likely not restarted.";
    exit
fi

echo "done."

Questo prodotto è concesso in licenza in base alla licenza di Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Unported di Creative Commons.  I post su Twitter™ e Facebook non sono coperti dai termini di Creative Commons.

Note legali   |   Informativa sulla privacy online