2013-03-24 39 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类不能找到解决问题