Pergunta

Devido a vários motivos (por exemplo, consolidação de infraestrutura), pode fazer sentido migrar dados binários existentes armazenados em um DataStore [1] para outro. Como essa migração pode ser executada?

Resposta, Resolução

Atualmente, não há nenhuma ferramenta disponível que faça essa migração do DataStore. No entanto, com a ajuda de uma instância temporária de CRX montada via WebDAV [2], isso pode ser facilmente alcançado. O exemplo a seguir mostra como migrar binários de um FileDataStore para um DbDataStore.

Atenção: este procedimento deve ser testado e validado em uma instância de teste antes de ser aplicado em uma instância de produção.

Preparar instância temporária de CRX

O primeiro passo é configurar uma segunda instância de CRX temporária e simples com um armazenamento baseado em banco de dados (DbDataStore) configurado:

  • copie crx-xxx-quickstart.jar e license.properties para um local temporário, por exemplo /tmp/crx_dbdatastore
  • execute o comando unpack: java -jar crx-xxx-quickstart.jar -unpack
  • uma vez terminado, vá para o diretório descompactado crx-quickstart/server/webapps
  • descompacte o aplicativo do CRX-web no diretório crx-explorer_crx: unzip -d crx-explorer_crx crx-explorer_crx.war
  • exclua crx-explorer_crx.war
  • edite repository.xml

A configuração do DataStore precisa ser adaptada para usar a implementação do DbDataStore, por exemplo:

<DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore"> <param name="url" value="jdbc:h2:~/test" /> <param name="user" value="sa" /> <param name="password" value="sa" /> <param name="databaseType" value="h2" /> <param name="driver" value="org.h2.Driver" <param name="maxConnections" value="3"/> <param name="copyWhenReading" value="true"/> <param name="tablePrefix" value=""/> <param name="schemaObjectPrefix" value=""/> <param name="minRecordLength" value="4096"/> </DataStore> 

Feito isso:

  • copie a biblioteca que contém o driver específico do banco de dados para crx-explorer_crx/WEB-INF/lib
  • renomeie o diretório crx-explorer_crx para crx-explorer_crx.war
  • inicie esta instância do CRX

Durante a instalação, o CRX criará vários arquivos binários no repositório que devem ser armazenados no banco de dados configurado. Verifique se isso está funcionando corretamente.

Monte a instância temporária do CRX com o WebDAV

A próxima etapa é montar a instância temporária do CRX via WebDAV [2] no servidor que hospeda a instância atual do CRX. Neste exemplo, o ponto de montagem do WebDAV /tmp/crxwebdav é usado.

Copie arquivos do FS para a instância temporária via WebDAV

O FileDataStore persiste arquivos binários por padrão em <crx_home>/crx-quickstart/repository/shared/repository/datastore usando o hash do conteúdo de um arquivo como nome de arquivo. Copiar isto para o CRX temporário com o DbDataStore configurado criará os mesmos binários com os mesmos códigos de hash, o que pode ser reutilizado em uma etapa posterior.
Copie todos os arquivos e pastas recursivamente para o ponto de montagem do WebDAV:

cd <crx_home> cp -Rv crx-quickstart/repository/shared/repository/datastore /tmp/crxwebdav 

Dependendo da quantidade de conteúdo binário, isso pode levar algum tempo. Assim que a operação de cópia recursiva tiver terminado, será possível desmontar e parar também a instância temporária do CRX.

Reconfigurar o DataStore do CRX

O próximo passo é modificar a configuração do DataStore da instância atual do CRX (repository.xml) para usar a mesma configuração de DbDataStore que a instância temporária. Feito isso, inicie a instância do CRX e verifique se os binários estão disponíveis como antes.

Limpeza

Depois que o procedimento de migração acima for verificado, será possível excluir o seguinte:

  • FileDataStore: crx-quickstart/repository/shared/repository/datastore
  • instância temporária de CRX

Aplica-se

CRX1.3.x, CRX1.4.x, CRX2.x

[1] DataStore
[2] Como acessar o repositório via WebDAV

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