2012-05-09 1 views
3

Comme proposé dans la discussion précédente Using file system instead of database to store pdf files in jackrabbit nous pouvons utiliser FileDataStore pour stocker des fichiers blob dans le système de fichiers au lieu de la base de données (i mon cas ont stocké ~ 100 kb taille pdfs) .Migration des blobs de base de données du système de fichiers dans Jackrabbit

Le problème suivant que j'ai rencontré traite des fichiers qui ont été précédemment stockés dans blobstore et je veux qu'ils soient accessibles après le passage à FileDataStore.

Après avoir ajouté FileDataStore support à la repository.xml JcrUtils lors de l'utilisation méthode getOrAddNode i obtenir ItemExistsException:

public static Node getOrAddNode(Node parent, String name) 
     throws RepositoryException { 
    if (parent.hasNode(name)) { 
     return parent.getNode(name); 
    } else { 
     return parent.addNode(name); 
    } 
} 

par exemple, parent.hasNode(name) fausses déclarations (il semble que l'élément n'existe pas) mais nous tombons au code parent.addNode(name) qui jette par conséquent ItemExistsException.

Une aide?

Est-il nécessaire de procéder à la migration des blobs vers le FileDataStore ou il existe une sorte de configuration que jackrabbit pourrait rechercher des blobs dans différents endroits en même temps: dans mon cas, base de données mysql et système de fichiers.

Quelques commentaires:

Je l'ai trouvé au moins plusieurs façons qui pourraient aider à faire le travail de migration:

Répondre

4

Il est possible qu'il y ait une corruption de référentiel. C'est-à-dire que le noeud contient une entrée de noeud enfant pour le nom donné (le noeud que vous voulez ajouter), mais le noeud enfant lui-même n'existe pas. Spécialement dans une ancienne version de Jackrabbit, vous pourriez vous retrouver dans cette situation si plusieurs sessions essayaient simultanément de changer les mêmes nœuds.

Pour résoudre ces problèmes de corruption, le bundle db persistence managers prend en charge une fonction de correction de cohérence &. Vous devez définir ces options dans les fichiers repository.xml et workspace.xml et redémarrer Jackrabbit. Une fois corrigé, vous pouvez désactiver à nouveau ces options.

Il existe également un moyen de résoudre ces problèmes lors de l'exécution en définissant la propriété système org.apache.jackrabbit.autoFixCorruptions sur true, puis de parcourir tous les noeuds du référentiel.

Questions connexes