java - Neo4j 3.3.1-自定义 APOC 程序失败

标签 java neo4j neo4j-apoc

我正在尝试使用 APOC 在 Neo4j 3.3.1 版本中编写自己的程序。作为练习,我开始返回所有节点 ID。由于我是 java 环境新手,面临着成功运行它的问题。

下面是我返回节点 ID 的 Java 代码。 封装示例;

import java.io.File;
import java.util.stream.Stream;

import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Result;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.procedure.Context;
import org.neo4j.procedure.Procedure;

public class AllNodes {

    public class Output{
    public String out;
    }

    @Context 
    private GraphDatabaseService db;

    @Procedure(value = "example.allnodes")
    public Stream<Output> allnodes() {
        db = new GraphDatabaseFactory().newEmbeddedDatabase( new File("/Users/ashwanthkumardaggula/Library/Application Support/Neo4j Desktop/Application/neo4jDatabases/database-ce072093-73a7-464e-baa8-d953f5b5f53c/installation-3.3.1/data/databases/graph.db") );
        Result re = db.execute("MATCH (n) RETURN n");
//      Stream<Output> res = re.resultAsString();
        return  (Stream<Output>) re;
    }

}

错误:

org.neo4j.server.ServerStartupException: Starting Neo4j failed: Component 'org.neo4j.server.database.LifecycleManagingDatabase@455824ad' was successfully initialized, but failed to start. Please see the attached cause exception "Field `db` on `AllNodes` must be non-final and public.".
    at org.neo4j.server.exception.ServerStartupErrors.translateToServerStartupError(ServerStartupErrors.java:68)
    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:219)
    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:111)
    at org.neo4j.server.ServerBootstrapper.start(ServerBootstrapper.java:79)
    at org.neo4j.server.enterprise.CommercialEntryPoint.main(CommercialEntryPoint.java:22)
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.server.database.LifecycleManagingDatabase@455824ad' was successfully initialized, but failed to start. Please see the attached cause exception "Field `db` on `AllNodes` must be non-final and public.".
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:466)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
    at org.neo4j.server.AbstractNeoServer.start(AbstractNeoServer.java:211)
    ... 3 more
Caused by: java.lang.RuntimeException: Error starting org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory, /Users/ashwanthkumardaggula/Library/Application Support/Neo4j Desktop/Application/neo4jDatabases/database-ce072093-73a7-464e-baa8-d953f5b5f53c/current/data/databases/graph.db
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:211)
    at org.neo4j.kernel.enterprise.EnterpriseGraphDatabase.<init>(EnterpriseGraphDatabase.java:36)
    at org.neo4j.server.enterprise.EnterpriseNeoServer.lambda$static$1(EnterpriseNeoServer.java:75)
    at org.neo4j.server.database.LifecycleManagingDatabase.start(LifecycleManagingDatabase.java:88)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:445)
    ... 5 more
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.impl.proc.Procedures@4038cd3a' was successfully initialized, but failed to start. Please see the attached cause exception "Field `db` on `AllNodes` must be non-final and public.".
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:466)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:107)
    at org.neo4j.kernel.impl.factory.GraphDatabaseFacadeFactory.initFacade(GraphDatabaseFacadeFactory.java:207)
    ... 9 more
Caused by: org.neo4j.kernel.api.exceptions.ProcedureException: Field `db` on `AllNodes` must be non-final and public.
    at org.neo4j.kernel.impl.proc.FieldInjections.assertValidForInjection(FieldInjections.java:157)
    at org.neo4j.kernel.impl.proc.FieldInjections.setters(FieldInjections.java:110)
    at org.neo4j.kernel.impl.proc.ReflectiveProcedureCompiler.compileProcedure(ReflectiveProcedureCompiler.java:263)
    at org.neo4j.kernel.impl.proc.ReflectiveProcedureCompiler.compileProcedure(ReflectiveProcedureCompiler.java:213)
    at org.neo4j.kernel.impl.proc.ProcedureJarLoader.loadProcedures(ProcedureJarLoader.java:94)
    at org.neo4j.kernel.impl.proc.ProcedureJarLoader.loadProceduresFromDir(ProcedureJarLoader.java:82)
    at org.neo4j.kernel.impl.proc.Procedures.start(Procedures.java:275)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:445)
    ... 11 more
2018-01-02 08:38:46.882+0000 INFO  Neo4j Server shutdown initiated by request

如何成功运行我的代码?

最佳答案

该错误非常不言自明,过程类上的 db 字段应该是公共(public)的。

改变

@Context 
private GraphDatabaseService db;

@Context 
public GraphDatabaseService db;

关于java - Neo4j 3.3.1-自定义 APOC 程序失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057990/

相关文章:

neo4j - 获取 NEO4j 错误 "Expected Long(0) to be a org.neo4j.values.storable.TextValue, but it was a org.neo4j.values.storable.LongValue": 1

java - 华为Map Kit Activity打开很慢

Neo4j——UNION 之后的 WHERE、ORDER BY 和 LIMIT

neo4j - 如何使用 APOC 反转关系

elasticsearch - 图、分面、全文 : best of all worlds?

java - neo4j modell 与 n 个属性的关系 vs n 与一个属性的关系

java - 使用 Neo4j Java API 属性容器

java - 正则表达式在 Java 代码中不起作用,尽管它可以在正则表达式网站上运行

java - 如果我动态传递 fileId 来查询,Google Drive api 无法获取所有子项

java - 为什么我不能访问这个其他类的方法?