正如前面讨论中提出的使用文件系统而不是数据库来存储 pdf 文件在 jackrabbit 中,
我们可以使用FileDataStore
将 blob 文件存储在文件系统而不是数据库中(我的情况是存储了大约 100 kb 大小的 pdf)。
我遇到的以下问题是处理以前存储在 blobstore 中的文件,我希望它们在切换到FileDataStore
.
在使用方法时添加FileDataStore
对 repository.xml 的支持后,我得到:JcrUtils
getOrAddNode
ItemExistsException
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 数据库和文件系统。
一些评论:
我发现至少有几种方法可以帮助完成迁移工作:
- 规范http://wiki.apache.org/jackrabbit/BackupAndMigration
讲述了使用 JCR API(
Session.exportSystemView(..)
然后Session.importXML(..)
),使用RepositoryCopier
API 等。 - jackrabbit-jcr-import-export-tool(见http://svn.apache.org/repos/asf/jackrabbit/sandbox/jackrabbit-jcr-import-export-tool/README.txt)
- 使用 jackrabbit 独立服务器 ( http://jackrabbit.apache.org/standalone-server.html )