如何连接 - 断开 - 重新连接到Neo4j服务器实例

问题描述:

我使用本地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?是否有替代从上面的关机方法?

您必须重新创建graphdatabaseService变量的新实例。

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

或者使用Neo4j服务器并远程连接它们,您不必“断开连接”,但它在整个网络中将会变慢。

+0

这就是我正在做的。但是,当我进一步调用数据库我得到一个异常,说:'这个数据库已关闭!' – 2014-11-22 01:29:17

+0

你有任何其他的帮助,我..我确实需要一个解决方案迫切... – 2014-11-22 16:09:03

这是一个测试,证明你正在尝试做什么(以及迈克尔所建议的)能正常工作。

它创建一个节点,然后关闭数据库,然后再次启动并验证该节点在那里。

@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(); 
}