是否可以让Java程序和Rest客户端访问Neo4J数据库

时间:2014-10-22 04:29:44

标签: neo4j

我的理解是,如果您正在使用Java执行引擎,那么您也无法使用neo4j进程来允许您通过Web控制台访问数据库。但是同样的过程是促进REST API的原因,对吗?有没有办法通过Java程序和REST API来使用执行引擎?

1 个答案:

答案 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服务进行交互。