【问题标题】:cypher query on unmanaged extension neo4j关于非托管扩展 neo4j 的密码查询
【发布时间】:2015-11-06 00:42:12
【问题描述】:

我的 neo4j 服务器有一个非托管扩展。

代码如下。

@Path("/helloworld")
public class HelloWorldResource {

    private final GraphDatabaseService database;

    public HelloWorldResource(@Context GraphDatabaseService database) {
        this.database = database;
    }

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{nodeId}")
   public Response hello(@PathParam("nodeId") long nodeId) {
        String res = ""; 

        try ( Transaction ignored = database.beginTx();)
        {
            //@@problem
            Result result = database.execute( "MATCH (n:KISI) where id(n)=1 return n" );

        } catch (Exception e) {
            res = "Error = " + e.getMessage();
        }

        return Response
            .status(Status.OK)
            .entity(("nodeId =" + nodeId + " " + res).getBytes(Charset
                    .forName("UTF-8"))).build();
    }
}

当我部署代码时,我得到了 500 个内部错误。 如果我删除代码

Result result = database.execute("MATCH (n:KISI) where id(n)=1 return n");

那么一切都很好。

我检查了日志文件,错误如下

2015 年 8 月 13 日凌晨 3:34:36 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException SEVERE:包含的异常 MappableContainerException 无法映射到响应, 重新抛出到 HTTP 容器 java.lang.NoSuchMethodError: org.neo4j.graphdb.GraphDatabaseService.execute(Ljava/lang/String;)Lorg/neo4j/graphdb/Result; 在 org.neo4j.examples.server.unmanaged.HelloWorldResource.hello(HelloWorldResource.java:55) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 在 com.sun.jersey.server.impl.model.method.dispatch.Abs​​tractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) 在 com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 在 org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:139) 在 com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 在 com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 在 com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 在 com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 在 com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 在 com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) 在 com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) 在 com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 在 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:698) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:505) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:211) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1096) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:432) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1030) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) 在 org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 在 org.eclipse.jetty.server.Server.handle(Server.java:445) 在 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:268) 在 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:229) 在 org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532) 在 java.lang.Thread.run(Thread.java:745)

那么我的代码有什么问题?

【问题讨论】:

  • 请查看日志文件。应该有整个堆栈跟踪。
  • @MicTech 我在日志文件中添加了错误 exp
  • 首先,你应该添加ignore.success();在执行()之后。
  • Cypher 查询是否正确?在 Neo4j 的 Web 界面中试一试。
  • @MicTech 是的,查询是正确的,我添加了 ignore.success(),结果相同

标签: java neo4j cypher


【解决方案1】:

我猜你pom.xml中的Neo4j发行版本和maven依赖版本不一样。

但有几件事需要检查:

1) 您应该始终关闭 Result 对象。 示例:

try(Result result = database.execute( "MATCH (n:KISI) where id(n)=1 return n" )) {
    // do stuff here
}

```

2) 异常不是在try-catch 中发生,而是在以后发生。您应该将代码更改为:

try ( Transaction tx = database.beginTx()) {
    String query = "MATCH (n:KISI) where id(n)=1 return n";
    // use result with try-with-resource to ensure that it will be closed
    try(Result result = database.execute(query)) {
        // do stuff you need with result here
        return Response.ok("nodeId =" + nodeId).build();
    }

    tx.success(); // mark transaction as successful 
} catch (Exception e) {
    // If exception occurs - send exception message with 500 status code
    // It's good idea to write Exception stacktrace to log there
    return Response.serverError().entity(e.getMessage()).build()      
}

3) 您应该检查非托管扩展 .jar 文件是如何构建的。

  • 所有 Neo4j 依赖项都应该是 pom.xml 中的provided(在 Neo4j 发行版中已经存在)。
  • 检查您的数据库版本和 pom.xml 中的依赖项版本是否相同。 GraphDatabaseService::execute 方法是最近发明的(如果我没记错的话是 2.2.3)。可能您的数据库发行版比您的 Maven 依赖项更旧。

【讨论】:

  • 现在我使用的是 neo4j 2.2.4(我使用的是 2.1.6),一切都很好。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多