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
elicense.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
paracrx-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