Problema

Mesmo depois de atualizar o código com êxito em crx/de, o código sightly recém-implantado não é refletido no site AEM. O site ainda exibe o código mais antigo em algumas instâncias de publicação.

Ambiente

AEM 6.1, 6.2, 6.3

Causa

Como o código é implantado corretamente em todas as instâncias de publicação, o problema é com a recompilação do código de mira em uma instância ou instâncias específicas.

Sempre que uma implantação de código ocorre em uma instância do AEM, o código recém-implantado deve forçar uma recompilação do código existente quando a página associada é solicitada. Há um problema conhecido com o Sightly [1], que não detecta corretamente o código recém-adicionado e, portanto, não força uma recompilação.

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

Resolução

A solução completa para este problema está disponível na versão AEM apresentando o Scripting HTL Engine versão 1.0.34. Enquanto isso, incorpore as etapas a seguir no processo de implantação para garantir uma experiência uniforme em todas as instâncias do AEM.

  • Coloque o script [2] no diretório de instalação do AEM e conceda os privilégios de usuário do AEM para executá-lo.
  • Vá para o local, onde o script é colocado no servidor AEM, e o execute usando o seguinte comando. No exemplo a seguir, o script de amostra é colocado no diretório de instalação do AEM.
./cq-force-recompilation.sh crx-quickstart/ http://localhost:4526 admin:admin
  • A saída é semelhante à seguinte:
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...

Isso limpa as bibliotecas previamente compiladas e força as bibliotecas atualizadas a compilar quando a página associada é solicitada.

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

Esta obra está licenciada sob uma licença não adaptada da Creative Commons Attribution-Noncommercial-Share Alike 3.0  As publicações do Twitter™ e do Facebook não são cobertas pelos termos do Creative Commons.

Avisos legais   |   Política de privacidade online