我的理解是,如果您正在使用Java执行引擎,那么您也无法使用neo4j进程来允许您通过Web控制台访问数据库。但是同样的过程是促进REST API的原因,对吗?有没有办法通过Java程序和REST API来使用执行引擎?
答案 0 :(得分:2)
所以我理解的主要问题是一次只有一个JVM进程可以访问数据库。因此,当您谈论REST API时,您的真正含义是neo4j server正在运行。该JVM进程已锁定数据库。并且该服务器实例恰好在某些主机和端口上提供REST API。现在,如果您正在运行服务器实例,则无法单独运行使用embedded database访问同一数据库的其他Java进程。
要做你想做的事,你有两个选择:
选项1:使用Java中的REST
您可以编写uses the REST interface的Java程序。在这种情况下,您的第二个java程序只是对服务器进行网络调用,而不是直接触及数据库本身。所以没有冲突,你可以做到这两点。
您的代码看起来会有所不同 - 它将更专注于发出RESTful调用并处理生成的JSON,如下所示:
final String txUri = SERVER_ROOT_URI + "transaction/commit";
WebResource resource = Client.create().resource( txUri );
String payload = "{\"statements\" : [ {\"statement\" : \"" +query + "\"} ]}";
ClientResponse response = resource
.accept( MediaType.APPLICATION_JSON )
.type( MediaType.APPLICATION_JSON )
.entity( payload )
.post( ClientResponse.class );
System.out.println( String.format(
"POST [%s] to [%s], status code [%d], returned data: "
+ System.getProperty( "line.separator" ) + "%s",
payload, txUri, response.getStatus(),
response.getEntity( String.class ) ) );
response.close();
有关更多代码示例和教程,请参阅前面的链接。
选项2:使用GraphDatabaseService包装器
有GraphDatabaseService包装器。这可以让你这样做:
GraphDatabaseService gds = new RestGraphDatabase("http://localhost:7474/db/data");
然后,您可以像使用常规Java API对象一样使用gds
对象。
这与选项1的原因相同 - 您没有直接访问数据库,只是通过包装器与RESTful服务进行交互。