vendredi 17 juillet 2020

attach debugger to neo4j procedure jar

I'm developing a neo4j procedure in java. I can test it with the custom data below.

@Test
public void commonTargetTest2() {
    // This is in a try-block, to make sure we close the driver after the test
    try (Driver driver = GraphDatabase.driver(embeddedDatabaseServer.boltURI(), driverConfig);
            Session session = driver.session()) {
        // And given I have a node in the database
        session.run(
                "CREATE (n1:Person {name:'n1'}) CREATE (n2:Person {name:'n2'}) CREATE (n3:Person {name:'n3'}) CREATE (n4:Person {name:'n4'}) CREATE (n5:Person {name:'n5'})"
                        + "CREATE (n6:Person {name:'n6'}) CREATE (n7:Person {name:'n7'}) CREATE (n8:Person {name:'n8'}) CREATE (n9:Person {name:'n9'}) CREATE (n10:Person {name:'n10'})"
                        + "CREATE (n11:Person {name:'n11'}) CREATE (n12:Person {name:'n12'}) CREATE (n13:Person {name:'n13'})"
                        + "CREATE (n14:Person {name:'n14'}) CREATE "
                        + "(n1)-[:KNOWS]->(n6),(n2)-[:KNOWS]->(n7),(n3)-[:KNOWS]->(n8),(n4)-[:KNOWS]->(n9),(n5)-[:KNOWS]->(n10),"
                        + "(n7)-[:KNOWS]->(n11),(n8)-[:KNOWS]->(n12),(n9)-[:KNOWS]->(n13),"
                        + "(n11)-[:KNOWS]->(n14),(n12)-[:KNOWS]->(n14),(n13)-[:KNOWS]->(n14);");

        // name of the procedure I defined is "p1", below I'm calling it in cypher
        StatementResult result = session
                .run("CALL p1([1,3], [], 3, 0) YIELD nodes, edges return nodes, edges");

        InternalNode n = (InternalNode) result.single().get("nodes").asList().get(0);
        assertThat(n.id()).isEqualTo(13);
    }
}

This works fine but the data is newly generated with CREATE statements and it is very small. I want to test my procedure with an existing neo4j database server. So that I can see the performance/results of my procedure with real/big data.

I can also achieve that with the below code. I can connect to an up and running neo4j database.

@Test
public void commonTargetTestOnImdb() {
    // This is in a try-block, to make sure we close the driver after the test
    try (Driver drv = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "123"));
            Session session = drv.session()) {

        // find 1 common downstream of 3 nodes
        StatementResult result = session.run(
                "CALL commonStream([1047255, 1049683, 1043696], [], 3, 2) YIELD nodes, edges return nodes, edges");

        InternalNode n = (InternalNode) result.single().get("nodes").asList().get(0);
        assertThat(n.id()).isEqualTo(5);
    }

}

NOW, my problem is that I can't debug the codes of my procedure if I connect to an existing database. I package a JAR file and put it inside plugin folder of my neo4j database so that neo4j can call my procedure. I think I should debug the JAR file. I'm using vscode and java extensions to debug and run tests. How can I debug JAR file with vscode?

Aucun commentaire:

Enregistrer un commentaire