Problema

Anche dopo aver aggiornato con successo il codice in crx/de, il nuovo codice Sightly implementato non si riflette nel sito AEM. Il sito visualizza ancora il vecchio codice Sightly su alcune istanze di pubblicazione.

Ambiente

AEM 6.1, 6.2, 6.3

Causa

Poiché il codice viene implementato correttamente a tutte le istanze di pubblicazione, il problema è la ricompilazione di codice Sightly su una particolare istanza o istanze.

Ogni volta che il codice viene implementato su un'istanza AEM, il nuovo codice implementato deve forzare la ricompilazione del codice esistente quando viene richiesta la pagina associata. C'è un problema noto con Sightly[1], che non rileva correttamente il nuovo codice aggiunto e quindi non forza una ricompilazione.

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

Risoluzione

La soluzione completa a questo problema è disponibile nella versione AEM con lo Scripting HTL Engine versione 1.0.34. Nel frattempo, incorpora le seguenti fasi nel processo di implementazione per garantire un'esperienza uniforme su tutte le istanze AEM.

  • Inserisci lo script [2] nella directory di installazione di AEM e concedi i privilegi utente di AEM per eseguirlo.
  • Vai alla posizione, dove lo script è sul server AEM ed eseguilo con il seguente comando. Nell'esempio seguente, lo script di esempio è posizionato nella directory di installazione di AEM.
./cq-force-recompilation.sh crx-quickstart/ http://localhost:4526 admin:admin
  • L'output assomiglia a quanto segue:
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...

Elimina le librerie precedentemente compilate e costringe le librerie aggiornate a compilare quando viene richiesta la pagina associata.

[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