0

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?

canbax
  • 3,432
  • 1
  • 27
  • 44

1 Answers1

0

For the record, I find a way to debug my neo4j stored procedure. I'm using Java 8. I used IntelliJ idea. I added the config dbms.jvm.additional=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 to the neo4j.conf file

Inside IntelliJ IDEA, I added a new configuration for remote debugging. Remote debugging configuration for IntelliJ IDEA

Here note that syntax in Java 9+ is different. At the end, to give port parameter it uses address=*:5005. There is post about it here. https://stackoverflow.com/a/62754503/3209523

canbax
  • 3,432
  • 1
  • 27
  • 44