3

前の議論で提案されているように、Jackrabbit に pdf ファイルを保存するためにデータベースの代わりにファイル システムを使用すると、データベースの代わりにファイル システムに blob ファイルを保存するために 使用できFileDataStoreます (私の場合、100 kb サイズの pdf が保存されています)。

私が直面した次の問題は、以前にブロブストアに保存されていたファイルを処理することであり、に切り替えた後にそれらにアクセスできるようにしたいFileDataStore.

メソッドFileDataStoreを使用するときにrepository.xmlにサポートを追加した後、次のようになります。JcrUtilsgetOrAddNodeItemExistsException

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

たとえばparent.hasNode(name)、false を返します (アイテムが存在しないようです) が、parent.addNode(name)結果として ItemExistsException をスローするコードに陥ります。

何か助けはありますか?

blob の移行を続行する必要がありますか、FileDataStoreまたは jackrabbit が同時に異なる場所で blob を検索できるような構成があります: 私の場合は mysql データベースとファイルシステムです。

いくつかのコメント:

移行作業を行うのに役立つ方法が少なくともいくつか見つかりました。

4

1 に答える 1

4

リポジトリが破損している可能性があります。つまり、ノードには指定された名前 (追加するノード) の子ノード エントリが含まれていますが、子ノード自体は存在しません。特に古いバージョンの Jackrabbit では、複数のセッションが同時に同じノードを変更しようとすると、この状況に陥る可能性がありました。

このような破損の問題を修正するために、バンドル データベースの永続化マネージャーは整合性チェックおよび修正機能をサポートしています。これらのオプションを repository.xml および workspace.xml ファイルで設定し、Jackrabbit を再起動する必要があります。修正したら、これらのオプションを再び無効にすることができます。

org.apache.jackrabbit.autoFixCorruptionsシステム プロパティを に設定trueし、リポジトリ内のすべてのノードをトラバースすることで、実行時にこのような問題を修正する方法もあります。

于 2012-05-09T15:34:07.320 に答える