如何在初始化gremlin groovy脚本引擎期间用janus-graph导入替换tinkerpop导入?

时间:2018-02-28 19:29:48

标签: gremlin janusgraph javascript-engine groovyscriptengine

我用这种方式用janus-plugin初始化gremlin-script-engine:

<OperationContract(), XmlSerializerFormat(Style:=OperationFormatStyle.Document)>

引擎通常使用一些janus元素(例如GremlinScriptEngineManager engineManager = new DefaultGremlinScriptEngineManager(); engineManager.addPlugin(JanusGraphGremlinPlugin.instance()); engine = engineManager.getEngineByName("gremlin-groovy"); )评估查询:

Multiplicity.ONE2MANY

...但是对于查询:

qu = "mgmt.makeEdgeLabel('"+ TEST_EDGE_LABEL+"').multiplicity(ONE2MANY).make();";
engine.evalWithManagementTransaction(qu);

我明白了:

qu = "mgmt.makePropertyKey('"+TEST_PROPERTY_KEY+"')"
        + ".dataType(String.class).cardinality(Cardinality.SINGLE).make();";

脚本引擎似乎尝试使用MissingPropertyException: No such property: SINGLE for class: org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality 而不是janus org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality

PS:如果我在查询中使用班级org.janusgraph.core.Cardinality的全名或org.janusgraph.core.Cardinality.SINGLE枚举的值(例如只是Cardinality),那么一切正常。

如何删除tinkerpop导入或强制脚本引擎使用janus从插件导入...或者更改gremlin-queries是否有意义?

1 个答案:

答案 0 :(得分:4)

在控制台中,您可以执行别名:

gremlin> import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality as Card
gremlin> Card
==>class org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality

但我不认为这会因某些原因而对Gremlin ScriptEngine起作用。我认为我们没有暴露出那里的别名能力。

我认为您必须使用org.janusgraph.core.Cardinality.SINGLE的完整班级名称。当然,我想知道你为什么要用这种方式进行模式修改。通常,架构修改是管理功能,您可以在GremlinScriptEngine之外处理,更直接在代码中或作为脚本在控制台中处理。