I'm starting to use the Blueprints API (2.5.0) with OrientDB backend
(1.7-rc2). No surprises until I try to access a graph from a Runnable, then
I get:
Exception in thread "pool-1-thread-1"
com.orientechnologies.orient.core.exception.ODatabaseException: Cannot open
database
at
com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.open(ODatabaseRecordAbstract.java:326)
at
com.orientechnologies.orient.core.db.ODatabaseWrapperAbstract.open(ODatabaseWrapperAbstract.java:54)
at
com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.openOrCreate(OrientBaseGraph.java:878)
at
com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.getContext(OrientBaseGraph.java:854)
at
com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.getVerticesOfClass(OrientBaseGraph.java:469)
at
com.tinkerpop.blueprints.impls.orient.OrientBaseGraph.getVertices(OrientBaseGraph.java:457)
at mypackage.ConcurrencyTest$MyThread.run(ConcurrencyTest.java:49)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NullPointerException
at
com.orientechnologies.orient.core.security.OSecurityManager.digest2String(OSecurityManager.java:81)
at
com.orientechnologies.orient.core.security.OSecurityManager.check(OSecurityManager.java:61)
at
com.orientechnologies.orient.core.metadata.security.OUser.checkPassword(OUser.java:164)
at
com.orientechnologies.orient.core.metadata.security.OSecurityShared.authenticate(OSecurityShared.java:164)
at
com.orientechnologies.orient.core.metadata.security.OSecurityProxy.authenticate(OSecurityProxy.java:83)
at
com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.open(ODatabaseRecordAbstract.java:291)
... 9 more
I reduced what I was trying to do as much as I could, resulting in this
test case:
package mypackage;
import com.tinkerpop.blueprints.*;
import com.tinkerpop.blueprints.impls.neo4j2.*;
import com.tinkerpop.blueprints.impls.orient.*;
import org.junit.*;
import org.neo4j.graphdb.*;
import org.neo4j.test.*;
import java.util.concurrent.*;
public class ConcurrencyTest {
private TransactionalGraph graph;
@Before
public void setup() {
OrientGraphFactory factory = new OrientGraphFactory("memory:test");
graph = factory.getTx();
}
@Test
public void testConcurrentAccess() {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 1; i++) {
Runnable worker = new MyThread(graph);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
}
public static class MyThread implements Runnable {
private TransactionalGraph graph;
public MyThread(TransactionalGraph graph) {
this.graph = graph;
}
@Override
public void run() {
graph.getFeatures();
Iterable<Vertex> vertices = graph.getVertices();
long count = 0;
for (Vertex v : vertices) {
count++;
}
System.out.println("Found " + count + " vertices");
}
}
}
What am I missing? For what it's worth, I get exactly the same stack trace
if I use OrientGraphFactory("plocal:C:/temp/graph/db", "admin", "admin"),
and this trivial test works if I use a Neo4j2 graph backend.
Regards,
Steve
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.