neo4j-ogm中的结果 - 与会话范围有关?

时间:2017-03-01 14:39:43

标签: neo4j-ogm

我们使用Spring Data Neo4J开发Spring Boot REST应用程序。最近我们使用嵌入式驱动程序升级到Spring Data Neo4j 4.2以及ogm 2.1.1。

在我们的应用程序中,我们提供了一些GET操作,我们从Neo4j中获取的节点构建一些对象结构。

一旦我们并行处理多个请求,我们就会面临不一致的结果,即我们的对象结构在每个请求上都有不同的大小。

我们不确定这种不一致行为的原因 - 但可能与OGM中的会话处理有关?我们知道Sessions不是线程安全的,但我们不知道如何在SD 4.2中处理这个问题。在4.2之前,我们在定义会话bean时将sesssion范围更改为原型,但配置在SD 4.2中更改

4.2之前的配置

@Bean
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
    return;
}

我们可以将问题的根源缩小到我们通过Repository类从Neo4j加载元素的地方:

repository.findOne(id,-1);

如果我们将此调用放在同步块中,则不会出现任何不一致。

synchronized (this) {
    repository.findOne(id,-1);
}

我们可能在使用SD 4.2 / ogm时遗漏了一些重要的观点,但在文档和网络上找不到任何有用的信息。 是否仍有可能/有必要改变SD 4.2中的会议范围?

1 个答案:

答案 0 :(得分:1)

这是OGM中的一个错误。请参阅:https://jira.spring.io/browse/DATAGRAPH-951

我们希望在下一个版本(OGM 2.1.2)中对此进行修复。