2

我正在开发一个在 Tomcat 上运行的 webapp,它使用 spring-data 以嵌入式模式连接到 neo4j 图。我想使用 neo4j 服务器而不是嵌入式模式,我正在寻找一些帮助来确定如何做到这一点。我的一些应用程序服务非常困难,并且在单个事务中将多个密码请求的结果组合在一个 dto 中发送回用户。

首先,我认为我必须创建一个服务器非托管扩展,我认为我应该遵循以下步骤。- 使用 springMVC 和 spring security 保持我的 webapp 以保持和保护用户会话。- 在特定的 jar my-app.jar 中重新组合我的所有事务服务 - 使用 Jax-RS 在 my-app.jar 的每个服务上添加 REST 访问点 - 使用我的 spring 控制器中的 spring restTemplate 之类的东西来调用服务来自 my-app.jar

第一个问题:这种做事方式是不是好方法?第二个问题:我的服务层中有很多弹簧注入。如何让它们继续工作(如何在服务器扩展中添加依赖项?

然后我发现了graphAware,我想知道我是否应该改用它。

最后我刚刚读了这篇文章http://jexp.de/blog/2014/12/spring-data-neo4j-improving-remoting-performance/似乎我应该使用 SpringCypherRestGraphDatabase (如在粗体文本中解释文章结尾)。

好吧,我有点迷失了,如果使用 neo4j 服务器而不是包含一些复杂事务的应用程序的嵌入式模式,我将不胜感激。

4

2 回答 2

3

您在这里有很多选择,并且您的想法是正确的。

选项1:

如果您的用例是业务逻辑繁重的,并且您的问题表明它们是,那么采用非托管扩展路线是一种选择。

本质上,您可以结合性能最高的 Java API 和 Cypher(如果您愿意)来执行您的用例。顺便说一句,我不会在这里使用 SDN,所以你必须手动进行映射,但真的有任何映射吗?也许您只想为每个用例执行遍历/密码查询。

然后,每个用例都会公开一个简单的 REST API,由运行 Spring MVC、Spring Security 等的 Spring 驱动的应用程序使用。您可以在应用程序的控制器中使用 Spring 中的 RestTemplate。

为了增加这一切,您可以使用 GraphAware 框架来开发使用 Spring MVC 的“非托管扩展”。那将是我的首选,对您的域/应用程序一无所知。

选项 2:

按照 Michael 的建议使用新版本的 SDN (v4)。这允许您使用带注释的域对象、Spring MVC、Security 等来运行您的应用程序。操作(CRUD 和其他)会自动转换为 Cypher,并通过网络发送到在服务器模式下运行的 Neo4j(无需扩展)。然后将结果编组回 Java 对象。

我们即将发布 SDN v4 的里程碑 1。它不应该超过一个星期。也就是说,它仍将是里程碑版本,因此尚未准备好投入生产。预计 5 月会发布 GA 版本(ish)。

您已经可以自己尝试 SDN v4。克隆这个 repo:https://github.com/spring-projects/spring-data-neo4j,确保你在 4.0 分支上,然后做一个mvn clean install这是一个示例应用程序,使用 Angular JS 和 Spring Boot 构建。

请务必联系反馈/问题/问题(最好通过 graphaware dot com 的电子邮件信息)。干杯!

于 2015-03-02T18:05:21.543 回答
0

我建议您稍等一下,直到 SDN4 Milestone 1 出现(由 GraphAware 开发),这是为 Neo4j-Server 从头编写的。

于 2015-03-01T19:19:20.957 回答