0

I'm trying to work with Java and Python Bridge JPype, but also with Neo4j (which is a graph database). When I try to run a simple Java-Program with JPYPE, there are no Problems.

import jpype as jp

jp.startJVM(jp.getDefaultJVMPath(), "-ea")
javaClass = jp.JClass('Jpype_test.A2')
javaInstance = javaClass()
javaInstance.callMe(2, 3)
jp.shutdownJVM()

And the class in Java is just:

package Jpype_test;

import helloworld.EmbeddedNeo4j;

import java.io.IOException;

public class A2 {
    public A2() {
        super();

    }

    public String callMe(final int a, final int b) throws IOException {
        final int res = Math.abs(a - b);
        try {
            EmbeddedNeo4j.main(null);
        } finally {
            System.out.println("I can't do this!");
        }

        return ("Hello, World!" + res);
    }
}

But when I try to run the "same" HelloWorld-Program written including Neo4j, there are a lot of Errors and I don't really understand what I'm doing wrong.

package helloworld;

import java.io.File;
import java.io.IOException;

import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.io.fs.FileUtils;

public class helloworld {

private static final String db_path = "target/neo4j-hello-db";

public String greeting;

GraphDatabaseService graphdb;
Node firstNode;
Node secondNode;
Relationship rs;

private static enum RelTypes implements RelationshipType {
    KNOWS
}

public static void main(final String[] args) throws IOException {
    final helloworld hello = new helloworld();
    hello.createDb();
    hello.removeData();
    hello.shutDown();

}

void createDb() throws IOException {
    FileUtils.deleteRecursively(new File(db_path));
    graphdb = new GraphDatabaseFactory().newEmbeddedDatabase(db_path);
    registerShutdownHook(graphdb);

    try (Transaction tx = graphdb.beginTx()) {
        firstNode = graphdb.createNode();
        firstNode.setProperty("message", "Hello, ");
        secondNode = graphdb.createNode();
        secondNode.setProperty("message", "World!");

        rs = firstNode.createRelationshipTo(secondNode, RelTypes.KNOWS);
        rs.setProperty("message", "brave Neo");

        System.out.println(firstNode.getProperty("message"));
        System.out.println(rs.getProperty("message"));
        System.out.println(secondNode.getProperty("message"));

        greeting = ((String) firstNode.getProperty("message")) + ((String) rs.getProperty("message"))
                + ((String) secondNode.getProperty("message"));

        tx.success();

    }
}

void removeData() {
    try (Transaction tx = graphdb.beginTx()) {
        firstNode.getSingleRelationship(RelTypes.KNOWS, Direction.OUTGOING).delete();
        firstNode.delete();
        secondNode.delete();

        tx.success();
    }
}

void shutDown() {
    System.out.println();
    System.out.println("Shutting down database......");
    graphdb.shutdown();
}

private static void registerShutdownHook(final GraphDatabaseService graphdb) {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            graphdb.shutdown();
        }
    });
}

}

>> Traceback (most recent call last):
    File "C:\Projects\Argon\workspace\TestNeo4jProject\src\helloworld\file.py",   line 6, in <module>
    javaClass = jp.JClass('helloworld.Hello')
  File "C:\Python27\lib\site-packages\jpype\_jclass.py", line 54, in JClass
    raise _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name)
jpype._jexception.ExceptionPyRaisable: java.lang.Exception: Class helloworld.Hello not found

I suppose there could be a Problem with classpath or something like this, but it Looks quite weird for me.. Thank's a lot if somebody can help with the solution!

newbie91
  • 11
  • 2

1 Answers1

0

The exception states: Class helloworld.Hello not found. Your class is actually named helloworld.helloworld. So, either make sure you are invoking the right class name, or change the class name so that it is helloworld.Hello.

cybersam
  • 63,203
  • 6
  • 53
  • 76