2013-08-03 33 views
1

我正在学习如何使用内容存储库(Jackrabbit),我想知道如何检查一个节点是否被移除。我使用数据存储,我知道这是不可变的,但节点必须存储在某个地方?我已经配置了持久性管理器来使用postgresql。一切正常,我只想知道我如何看到节点实际上已被删除。如何检查节点是否从内容存储库中删除?

回答

2

不确定您的意思是“实际删除”。在JCR级别,Session.itemExists(path)会告诉你在指定的路径上是否有一个Item(即一个Node或Property)。使用管理会话调用此功能,以确保访问控制不会妨碍您的工作。

如果您正在寻找相应数据的磁盘删除,这取决于PersistenceManager的实现 - 有些只会根据需要垃圾收集已删除的数据,而另一些则会在JCR级别删除时立即删除它。较低层(数据库,操作系统,磁盘)也可能会将删除的数据保留一段时间。

+0

但我使用数据库和数据存储。当我添加文件时,文件内容被放置在文件系统中,但元数据存储在哪里?它没有在它创建的表格中获得一行或一些东西吗?或者它是否将这个元数据保存在文件中? – LuckyLuke

+0

如果您使用Jackrabbit的DataStore(http://wiki.apache.org/jackrabbit/DataStore),并且它包含文件的内容,则某个大小的二进制JCR属性确实存储在文件系统中。 JCR nt:file节点的其他属性根据Jackrabbit的PersistenceManager配置存储,该配置可能以数据库为目标。正如我的初始回复中所解释的,在删除节点时是否删除该数据库数据取决于PersistenceManager实现。 –

+0

是的,超过一定大小的二进制属性存储在文件系统中,但它们不是由保存其数据库中的元数据的节点引用的吗?我在哪里可以找到节点? – LuckyLuke

相关问题