2014-10-22 49 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服務進行交互。

相關問題