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

How to replace tinkerpop imports by janus-graph imports during initialization of gremlin groovy script engine?

我用 janus-plugin 初始化 gremlin-script-engine 是这样的:

GremlinScriptEngineManager engineManager = new DefaultGremlinScriptEngineManager();
engineManager.addPlugin(JanusGraphGremlinPlugin.instance());
engine = engineManager.getEngineByName("gremlin-groovy");

引擎通常评估带有一些 janus 元素的查询(例如 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

似乎脚本引擎尝试使用 org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality 而不是 janus one org.janusgraph.core.Cardinality

PS:如果我在查询中使用 class org.janusgraph.core.Cardinality.SINGLE 的全名或仅使用 Cardinality 枚举的值(例如只是 SINGLE),则所有工作正常。

如何删除 tinkerpop 导入或强制脚本引擎使用来自插件的 janus 导入...或者更改 gremlin 查询是否有意义?

在控制台中你可以做和别名:

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 的 class 全名。当然,我想知道您为什么要以这种方式进行架构修改。通常,模式修改是管理功能,您可以在 GremlinScriptEngine 之外处理,更直接地在您的代码中或在控制台中作为脚本处理。