neo4j-ogm 中的结果不一致 - 与会话范围有关吗?
Incosistent Results in neo4j-ogm - Related to Session Scope?
我们使用 Spring Data Neo4J 开发 Spring 引导 REST 应用程序。最近我们升级到 Spring Data Neo4j 4.2 以及 ogm 2.1.1 并使用嵌入式驱动程序。
在我们的应用程序中,我们提供了一些 GET 操作,在这些操作中,我们从从 Neo4j 获取的节点构建一些对象结构。
一旦我们并行处理多个请求,我们就会面临不一致的结果,即我们的对象结构在每个请求上都有不同的大小。
我们不确定这种不一致行为的原因 - 但可能与 OGM 中的会话处理有关?我们知道 Session 不是线程安全的,但我们不知道如何在 SD 4.2 中处理这个问题。 4.2之前我们在定义session bean的时候把session作用域改成了prototype,但是在SD 4.2
配置变了
4.2之前的配置
@Bean
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return;
}
我们可以将问题的根源缩小到我们通过存储库从 Neo4j 加载元素的地方 class:
repository.findOne(id,-1);
如果我们将此调用放在同步块中,则不会发生不一致。
synchronized (this) {
repository.findOne(id,-1);
}
我们可能遗漏了一些使用 SD 4.2/ogm 的重要信息,但在文档和网络上找不到任何有用的信息。
还是possible/necessary改SD 4.2的session scope?
这是 OGM 中的错误。参见:https://jira.spring.io/browse/DATAGRAPH-951
我们希望在下一版本 (OGM 2.1.2) 中对此进行修复。
我们使用 Spring Data Neo4J 开发 Spring 引导 REST 应用程序。最近我们升级到 Spring Data Neo4j 4.2 以及 ogm 2.1.1 并使用嵌入式驱动程序。
在我们的应用程序中,我们提供了一些 GET 操作,在这些操作中,我们从从 Neo4j 获取的节点构建一些对象结构。
一旦我们并行处理多个请求,我们就会面临不一致的结果,即我们的对象结构在每个请求上都有不同的大小。
我们不确定这种不一致行为的原因 - 但可能与 OGM 中的会话处理有关?我们知道 Session 不是线程安全的,但我们不知道如何在 SD 4.2 中处理这个问题。 4.2之前我们在定义session bean的时候把session作用域改成了prototype,但是在SD 4.2
配置变了4.2之前的配置
@Bean
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public Session getSession() throws Exception {
return;
}
我们可以将问题的根源缩小到我们通过存储库从 Neo4j 加载元素的地方 class:
repository.findOne(id,-1);
如果我们将此调用放在同步块中,则不会发生不一致。
synchronized (this) {
repository.findOne(id,-1);
}
我们可能遗漏了一些使用 SD 4.2/ogm 的重要信息,但在文档和网络上找不到任何有用的信息。 还是possible/necessary改SD 4.2的session scope?
这是 OGM 中的错误。参见:https://jira.spring.io/browse/DATAGRAPH-951
我们希望在下一版本 (OGM 2.1.2) 中对此进行修复。