2013-03-24 52 views
0

我开始使用Heroku和Neo4j。我有一个本地运行的servlet插入一些节点并在它们之间建立关系。当我在Heroku使用相同的代码时,我没有发生错误,但没有发生任何事情。通过Java servlet访问heroku和neo4j

我已经尝试在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,因此将返回一个空对象。我正在使用heroku运行bash,然后使用java -cp运行jar文件。

Heroku的配置: NEO4J_URL:http://xxx:[email protected]

我已经试过这是传递给newEmbeddedDatabase并没有奏效的dbLoc一些变化。

我将不胜感激在Heroku上运行servlet时使用Java和Neo4j的任何链接。

回答

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()执行您的CYPHER语句。

+0

我还没有找到与Java绑定Neo4j的REST API的存储库。所以为了使它与heroku一起工作,我必须为绑定创建一个特定于项目的存储库,并将其添加到我的项目中。 – 2013-03-25 10:08:45

+0

使用http://m2.neo4j.org/ – 2013-03-25 17:44:43

+0

谢谢:)使它更容易使用绑定。顺便说一句,你不会碰巧知道一种方法,这样你就不必复制目标文件夹中的所有依赖关系? – 2013-03-26 10:17:43