2013-03-24 74 views
2

我有一個servlet並希望連接到一個Neo4j數據庫。這樣我就可以通過Internet從我的應用程序訪問數據庫。 但是servlet出錯了? 我做錯了什麼?一個Servlet中的Neo4j數據庫

這是我的servlet代碼。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException { 
PrintWriter out = response.getWriter(); 
out.println("Hello World"); 

GraphDatabaseService graphDB = new GraphDatabaseFactory().newEmbeddedDatabase("C:\\Users\\Sourav\\Desktop\\db1"); 
} 

這是在網頁中返回的錯誤。

HTTP Status 500 - Servlet execution threw an exception 

type Exception report 

message Servlet execution threw an exception 

description The server encountered an internal error that prevented it from fulfilling  this request. 

exception 

javax.servlet.ServletException: Servlet execution threw an exception 
root cause 

java.lang.NoClassDefFoundError: org/neo4j/graphdb/factory/GraphDatabaseFactory 
hello.hello.doGet(hello.java:45) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
+0

,你內核jar添加到您的構建路徑 – OQJF 2013-03-24 06:02:22

+0

是的,我已經添加了Neo4j的內核-1.8.2.jar 另一個有趣的事情是我有一個java文件中的工作數據庫代碼。現在,當我在servlet中創建該類的對象時,它仍然會出現錯誤。 我打包doGet()內的對象。這樣對嗎? – Sourav048 2013-03-24 06:35:56

+0

我不爲什麼,通常我使用Spring neo。 – OQJF 2013-03-24 09:34:27

回答

2

已解決! 我在Tomcat 7.0 \ lib中複製了Neo4j JAR文件,它徹底解決了這個問題!

+1

所以,您發現解決方法。但那實際上並沒有解決問題。您的應用程序不能簡單地移動到其他應用程序服務器。你是否使用maven作爲構建工具?如果是這樣,請嘗試添加org.neo4j.neo4j依賴項,其中包括幾個包,其中包括您需要的。另外,如果你這樣做,從tomcat中刪除jar,否則你最終會產生依賴衝突。 – 2013-05-14 15:16:14

4

你會想要使用Neo4j的REST api。這是使用Neo4j的標準方式,如果您通過互聯網訪問(不嵌入您的程序)。

你會想要關注this tutorial,它告訴你如何將Neo4j設置爲具有REST API的服務器。

就我個人而言,我認爲使用嵌入在Java中更容易。如果您將它創建爲嵌入式Java數據庫,您應該這樣做:

GraphDatabaseService dbService = new EmbeddedGraphDatabase(DB_PATH); 

但是,您應該只在您的程序啓動時執行該操作。因此,在程序啓動時實例化,並使用靜態引用。 (或者更好的是,使用Spring並且只需要自動裝載Neo4jOperations,或者最好使用Spring Data Neo4j!)

+0

所以@Coray你說Spring Data Neo4j是一個不錯的選擇。我將不得不考慮這一點。 我嘗試使用REST API,但TraversalDescription存在問題。實施已經改變了1.81。因此我們不能實例化TraversalDescription。 – Sourav048 2013-03-24 10:09:44

+0

到目前爲止,我一直喜歡Spring Data Neo4j。它有一些限制(沒有內置的延遲加載),但它仍然爲我節省了一些工作。 – CorayThan 2013-03-24 17:11:33

+0

當您使用REST服務器時,您可以使用RestTraversal.description()而不是TraversalDescription,也可以查看java-rest-bindings:http://github.com/neo4j/java-rest-binding – 2013-03-25 11:37:19

0

我有同樣的問題。這裏是步驟 - 轉到構建路徑 - >配置構建路徑 選擇部署總成 請確保您有常春藤(行家)圖書館在那裏。如果不是通過add-> java build path entries - > ivy(或maven)添加它,則可以在部署程序集中添加該庫。 它應該根據自己的日誌GraphDatabaseFactory類不能找到解決問題