使用批处理模式在ArangoDB中创建顶点

3

尝试使用ArangoDB Java API创建顶点和边,没有激活批处理模式时,一切正常。但是当启用批处理模式时,创建顶点时会抛出未知错误。以下是Java代码和异常详细信息。 有任何想法为什么会发生这种情况吗? 提前感谢!

代码

public static void main(String[] args) throws ArangoException {

    createNodesInBatch();

}
static public void createNodesInBatch() throws ArangoException {
    ArangoConfigure configure = new ArangoConfigure();
    configure.init();
    ArangoDriver arangoDriver = new ArangoDriver(configure);            

    arangoDriver.createDatabase("small_db"); 
    System.out.println("Database created.");
    arangoDriver.setDefaultDatabase("small_db"); 

    arangoDriver.createCollection("testEdgeCollection",
    new CollectionOptions().setType(CollectionType.EDGE));

    arangoDriver.createCollection("testVertexCollection",
        new CollectionOptions().setType(CollectionType.DOCUMENT));

    EdgeDefinitionEntity ed = new EdgeDefinitionEntity();
    // add edge collection name
    ed.setCollection("testEdgeCollection");

    // add vertex collection names
    ed.getFrom().add("testVertexCollection");

    // add vertex collection names
    ed.getTo().add("testVertexCollection");

    List<EdgeDefinitionEntity> edgeDefinitions = new ArrayList<EdgeDefinitionEntity>();
    edgeDefinitions.add(ed);


    arangoDriver.createGraph("testGraph", edgeDefinitions, null, false);
    System.out.println("Graph created.");

    arangoDriver.startBatchMode();;
    System.out.println("Batch mode started.");

    for (int nodeIdx = 0; nodeIdx < 10; nodeIdx++)
    {
        String nodeName = "node_" + nodeIdx;
        SimpleNode node = new SimpleNode(nodeName);
        VertexEntity<SimpleNode> vertex = arangoDriver.graphCreateVertex("testGraph", "vertextCollection", node, false);            
    }

    System.out.println("Batch execution started to create nodes");
    arangoDriver.executeBatch();

}

异常信息

数据库已创建。

图形已创建。

批处理模式已启动。

Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
    at com.sun.proxy.$Proxy14.createVertex(Unknown Source)
    at com.arangodb.ArangoDriver.graphCreateVertex(ArangoDriver.java:4570)
    at WhichDB.ArangoDBTest.App.createNodesInBatch(App.java:311)
    at WhichDB.ArangoDBTest.App.main(App.java:327)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.arangodb.http.InvocationHandlerImpl.invoke(InvocationHandlerImpl.java:38)
    ... 4 more
Caused by: com.arangodb.ArangoException: unknown error
    at com.arangodb.impl.InternalGraphDriverImpl.createVertex(InternalGraphDriverImpl.java:329)
    at com.arangodb.impl.InternalGraphDriverImpl.createVertex(InternalGraphDriverImpl.java:294)
    ... 9 more

VertexEntity<SimpleNode> vertex = arangoDriver.graphCreateVertex("testGraph", "vertex>>t<<<Collection", node, false); 如果你去掉那个多余的 T,会解决你的异常吗? - dothebart
将代码行更改为:arangoDriver.graphCreateVertex("testGraph", "testVertexCollection", node, false); 仍然看到相同的异常。 - Jerry
你能重新尝试最新的快照版本吗? - dothebart
答案是否满足您的需求?如果不是,缺少什么?如果是,请标记为已接受。 - dothebart
1个回答

7

ArangoDB Java驱动程序存在错误。该驱动程序的问题已在2.7.3版本中得到修复。

我将您的示例代码添加到我的测试中,并使用ArangoDB 2.8.6进行了测试。

Github上下载ArangoDB Java驱动程序并使用Maven编译:

mvn clean install -DskipTests=true -Dgpg.skip=true -Dmaven.javadoc.skip=true -B

Maven 会在 target 目录下创建一个名为 arangodb-java-driver-X.X.X-SNAPSHOT-standalone.jar 的独立驱动程序 JAR 文件,其中包含了所有的依赖项。

获取示例代码:

wget https://gist.githubusercontent.com/anonymous/a430ba1129ccfb0dc1ac31af4dd02d98/raw/8db1033cacd9656f92b8c5b34f5fb1431df8730c/NodesInBatchExample.java

编译示例代码:
javac -classpath arangodb-java-driver-X.X.X-SNAPSHOT-standalone.jar NodesInBatchExample.java

在默认端口上启动未经身份验证的ArangoDB,并运行示例代码:

java -classpath arangodb-java-driver-X.X.X-SNAPSHOT-standalone.jar:. NodesInBatchExample

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接