我有一些测试代码,用于检查 JCR 节点上的属性值,对被测系统执行外部操作,然后检查同一 JCR 节点上相同属性的值以检查它是否正确实际上已经改变了。
我遇到的问题是第一个查询之后的所有后续查询都返回原始值,就好像该值在本地缓存一样。我可以手动检查 JCR 节点并看到该值实际上已更改,但代码在查询时没有返回该值。
为了解决这个问题,我发现每次重新创建 JCR session 都会返回更新的值,但这似乎不是最佳解决方案。所以我的问题是:如何防止 JCR 节点和属性值的本地缓存(或发生的任何情况)?
这是执行查询的 Groovy 函数:
def getPropertyValueOnNode(propName, nodePath) {
session?.logout()
session = repo.login(new SimpleCredentials(username, password.toCharArray()))
def jcrContent = "${nodePath}/jcr:content"
if (session.nodeExists(jcrContent)) {
Node n = session.getNode(jcrContent)
if (n.hasProperty(propName)) {
return n.getProperty(propName).getString()
}
}
return null
}
最佳答案
我认为你看到的行为是应该的。
session 不应长时间保持打开状态(因此在测试用例中获取属性后关闭是正确的),如果是这样, session 刷新是正确的方法。特别是在针对橡木时,请参阅 http://jackrabbit.apache.org/oak/docs/differences.html 。
关于java - 查询远程服务器时如何防止 JCR 节点的本地缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22020758/