2014-10-22 91 views

回答

2

所以我的理解主要问题是一次只有一个JVM进程可以访问数据库。所以当你谈论REST API时,你的真正意思是运行一个neo4j server。该JVM进程已锁定数据库。并且该服务器实例恰好在某些主机和端口上提供了REST API。现在,如果运行了服务器实例,则不能单独运行使用embedded database访问同一数据库的其他java进程。

要做到你想要什么,你有两个选择:

方法1:使用REST从Java

您可以编写一个Java程序,uses the REST interface。在这种情况下,你的第二个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"); 

然后,您可以使用gds对象就像你可以使用一个普通的Java API对象。

这与选项1的作用相同 - 您不是直接访问数据库,而是通过包装器与RESTful服务进行交互。

相关问题