java - 查询远程服务器时如何防止 JCR 节点的本地缓存?

标签 java caching groovy jackrabbit jcr

我有一些测试代码,用于检查 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/

相关文章:

grails - 我应该把可重用的方法放在 grails 的什么位置?

java - 字符串以位的形式存储在内存中

c# - 缓存通过脚本提供的图像

确定缓存级别和大小的 C 程序

grails - Groovy 中的接口(interface)

java - 通过 Groovy 脚本配置 Jenkins Hockeyapp 插件

java - 使用 openssl 和 -subj 参数在 Java 中生成 CSR

java - DFS - Java递归 - 求节点之和

java - 尝试返回一个字符串数组

iphone - 如何清除缓存图片?