2013-03-24 51 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