【问题标题】:Configuration of embedded Neo4j to run APOC procedures配置嵌入式 Neo4j 以运行 APOC 程序
【发布时间】:2021-01-30 12:03:10
【问题描述】:

我有使用 APOC 函数的密码查询。如果直接运行应用程序,它可以正常工作,但我也想测试这些查询。我尝试使用following 方法,但遇到异常Unknown function 'apoc.coll.toSet'

我的示例测试类:

public class ApocTest {
    private static Neo4j neo4j;
    private static Driver driver;

    @BeforeAll
    static void initializeNeo4j() {
        // Make sure that the plugins folder is listed in -cp
        Path pluginDirContainingApocJar = Paths.get("src/main/resources/neo4j-plugins/");

        if (!Files.exists(pluginDirContainingApocJar)) {
            throw new IllegalArgumentException("Invalid path to plugins directory");
        }

        neo4j = Neo4jBuilders
                .newInProcessBuilder()
                .withDisabledServer()
                .withFixture("CREATE (p1:Person)-[:knows]->(p2:Person)-[:knows]->(p3:Person)")
                .withConfig(GraphDatabaseSettings.plugin_dir, pluginDirContainingApocJar)
                .withConfig(GraphDatabaseSettings.procedure_unrestricted, List.of("apoc.*"))
                .build();
        driver = GraphDatabase.driver(neo4j.boltURI(), AuthTokens.none());
    }

    @AfterAll
    static void stopNeo4j() {
        driver.close();
        neo4j.close();
    }

    @Test
    public void testApoc(){
        String query = "MATCH path=()-[:knows*2]->()\n" +
                       "RETURN apoc.coll.toSet(nodes(path)) AS nodesSet";
        List<Object> nodesSet = driver.session()
                .beginTransaction()
                .run(query)
                .single()
                .get("nodesSet")
                .asList();
        assertEquals(3, nodesSet.size());
    }
}

知道如何解决这个问题吗?

This sample project on the github

版本:

  • neo4j-java-driver: 4.1.1
  • neo4j-harness 4.1.6
  • org.neo4j.procedure: 4.1.0.5

更新:

所以我尝试更新:

Path pluginDirContainingApocJar = new File(
                ApocConfig.class.getProtectionDomain().getCodeSource().getLocation().toURI())
                .getParentFile().toPath();

这意味着我不需要使用 apoc jar 进行操作,对吗? 但我仍然收到错误:

Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.procedure.impl.GlobalProceduresRegistry@27dc627a' was successfully initialized, but failed to start. Please see the attached cause exception "Unable to set up injection for procedure `CypherProcedures`, the field `cypherProceduresHandler` has type `class apoc.custom.CypherProceduresHandler` which is not a known injectable component.".
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:463)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:110)
    at org.neo4j.graphdb.facade.DatabaseManagementServiceFactory.startDatabaseServer(DatabaseManagementServiceFactory.java:189)
    ... 58 more
Caused by: org.neo4j.kernel.api.exceptions.ComponentInjectionException: Unable to set up injection for procedure `CypherProcedures`, the field `cypherProceduresHandler` has type `class apoc.custom.CypherProceduresHandler` which is not a known injectable component.
    at org.neo4j.procedure.impl.FieldInjections.createInjector(FieldInjections.java:98)
    at org.neo4j.procedure.impl.FieldInjections.setters(FieldInjections.java:81)
    at org.neo4j.procedure.impl.ProcedureCompiler.compileProcedure(ProcedureCompiler.java:264)
    at org.neo4j.procedure.impl.ProcedureCompiler.compileProcedure(ProcedureCompiler.java:226)
    at org.neo4j.procedure.impl.ProcedureJarLoader.loadProcedures(ProcedureJarLoader.java:114)
    at org.neo4j.procedure.impl.ProcedureJarLoader.loadProceduresFromDir(ProcedureJarLoader.java:85)
    at org.neo4j.procedure.impl.GlobalProceduresRegistry.start(GlobalProceduresRegistry.java:342)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:442)
    ... 60 more

更新 2 - 在 4.0 上工作:

出于某种原因,降级到 Neo4j 4.0,与recommended 中的版本相同,足以使其正常工作。现在我不会再花时间尝试在 Neo4j 4.1/4.2 上运行它了。

My code

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    【讨论】:

    • 我试过了,但没有成功,所以我更新了原来的答案。
    • 有趣,感谢您的尝试,看看我是否可以检查以后版本中的更改
    • 好的,谢谢,如果你找到一些不错的方法来为以后的版本做这件事,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多