Problem

Auch nach der erfolgreichen Aktualisierung des Codes in crx/de wird der neu bereitgestellte, visuelle Code nicht in der AEM-Seite angezeigt. Die Website zeigt immer noch den alten, visuellen Code für einige Veröffentlichungsinstanzen an.

Umgebung

AEM 6.1, 6.2, 6.3

Ursache

Da der Code für alle Instanzen bereitgestellt wird, besteht das Problem in der Neukompilierung von visuellem Code für bestimmte Instanzen.

Immer wenn eine Entwicklung von Code auf einer AEM-Instanz ausgeführt wird, muss sich der neu bereitgestellte Code aus dem vorhandenen Code zwingen und neu kompilieren, wenn die verknüpfte Seite angefordert wird. Es gibt ein bekanntes Problem mit Sightly[1], das den neu hinzugefügten Code nicht richtig erkennt und daher keine Neukompilierung erzwingt.

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

Lösung

Die vollständige Lösung für dieses Problem ist in der AEM-Version mit der HTL-Engine-Scripting-Version 1.0.34 verfügbar. In der Zwischenzeit sollten Sie die folgenden Schritte in den Bereitstellungsprozess integrieren, um eine einheitliche Nutzung aller AEM-Instanzen sicherzustellen.

  • Platzieren Sie das Skript [2] im AEM-Installationsverzeichnis und erteilen Sie dem AEM-Benutzer Berechtigungen zum Ausführen.
  • Gehen Sie zur Position, an der das Skript auf dem AEM-Server platziert wird und führen Sie es mithilfe des folgenden Befehls aus. Im folgenden Beispiel wird das Beispielskript im AEM abgelegt.
./cq-force-recompilation.sh crx-quickstart/ http://localhost:4526 admin:admin
  • Die Ausgabe sieht wie folgt aus:
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...

Die zuvor kompilierten Bibliotheken werden gelöscht und die aktualisierten Bibliotheken werden kompiliert, wenn die zugehörige Seite angefordert wird.

[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."

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie