通过Java servlet访问heroku和neo4j

时间:2013-03-24 07:37:14

标签: java heroku neo4j

我开始使用Heroku和Neo4j。我有一个servlet,它在本地运行以插入一些节点并在它们之间创建关系。当我在Heroku使用相同的代码时,我没有错误,但没有任何反应。

我尝试在Neo4j中使用webadmin手动插入节点,然后在代码中重新读取它,然后再次在本地工作但在Heroku没有任何反应。再次没有错误消息。

以下是代码:

String dbPATH = System.getenv("NEO4J_URL")+"/db/data";
String dbName = "/mnt/e67f2f314/data/graph.db";
String dbLoc = dbPATH+dbName;
GraphDb=new GraphDatabaseFactory().newEmbeddedDatabase(dbLoc);

然后我用:

ExecutionEngine engine = new ExecutionEngine(GraphDb);
int length=-1;
try{
    ExecutionResult result = engine.execute("start n=node(*) return n");
    if (result == null){
        length = 0;
    } else
    {
        for (@SuppressWarnings("unused")
            Map<String, Object> row:result){
                length++;   
            }
    }
} catch (NullPointerException e) {
//  _log.error(e.getMessage(),e);
    length=-2;
}

长度为0,因此返回null对象。我使用heroku运行bash然后使用java -cp运行jar文件。

heroku配置: NEO4J_URL:http://xxx:xxx@e67f2f314.hosted.neo4j.org

我在dbLoc上尝试了一些变体,它们被传递给newEmbeddedDatabase,但没有任何工作。

我很感激在Heroku上运行Java和Neo4j以运行servlet的任何链接。

1 个答案:

答案 0 :(得分:0)

Heroku上的Neo4j只能通过REST访问,因此您无法使用嵌入式。因此,您需要将以下依赖项修改为您的应用程序:

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-rest-graphdb</artifactId>
    <version>[your version]</version>
</dependency>

初始化如下:

RestAPI restAPI = new RestAPIFacade(System.getenv("NEO4J_URL"), 
   System.getenv("NEO4J_USERNAME"), 
   System.getenv("NEO4J_PASSWORD"));
GraphDatabaseService gds = new RestGraphDatabase(restAPI);
RestCypherQueryEngine rcqe = RestCypherQueryEngine(restAPI);

然后使用rcqe.query()执行您的密码语句。