2014-11-22 111 views
0

我使用本地Neo4j(2.1.12)服務器實例和Neo4j Java API從Java程序(jdk 8.0)中訪問圖形數據庫(gdb) _05)。如何連接 - 斷開 - 重新連接到Neo4j服務器實例

我只是想實現以下工作流程:

  1. 從Java程序連接到GDB從gdb的
  2. 斷開
  3. 與另一個進程,連接到同一個GDB
  4. 斷開從這個過程gdb
  5. 再次連接到gdb與Java程序

現在,第5點不起作用!

對於 '連接' 的Java程序我用」

gdbFactory = new GraphDatabaseFactory(); 
gdbService = gdbFactory.newEmbeddedDatabase(gdbPath); 
gdbEngine = new ExecutionEngine(gdbService); 

對於 '斷開' 從gdb的Java程序的GDB我用

GraphDatabaseService.shutdown() 

但這種方法似乎敲定在某種程度上,我不能再連接到它的gdb。

在已經連接,斷開並再次連接我得到一個異常,告訴我:

這個數據庫是關機!

所以,我的問題是:

什麼是連接常見的方式 - 斷開 - 重新連接到Neo4j的GDB?是否有替代從上面的關機方法?

回答

1

您必須重新創建graphdatabaseService變量的新實例。

graphDatabaseService = new GraphDatabaseFactory().newEmbeddedDatabase(PATH); 

或者使用Neo4j服務器並遠程連接它們,您不必「斷開連接」,但它在整個網絡中將會變慢。

+0

這就是我正在做的。但是,當我進一步調用數據庫我得到一個異常,說:'這個數據庫已關閉!' – 2014-11-22 01:29:17

+0

你有任何其他的幫助,我..我確實需要一個解決方案迫切... – 2014-11-22 16:09:03

0

這是一個測試,證明你正在嘗試做什麼(以及邁克爾所建議的)能正常工作。

它創建一個節點,然後關閉數據庫,然後再次啓動並驗證該節點在那裏。

@Test 
public void startStopRestart() { 
    GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/db"); 

    try (Transaction tx = db.beginTx()) { 
     Node node = db.createNode(); 
     node.setProperty("name", "First Node"); 
     tx.success(); 
    } 

    db.shutdown(); 

    db = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/db"); 

    try (Transaction tx = db.beginTx()) { 
     assertEquals("First Node", db.getNodeById(0).getProperty("name")); 
    } 

    db.shutdown(); 
} 
相關問題