如何在 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
之外处理,更直接地在您的代码中或在控制台中作为脚本处理。
我用 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
之外处理,更直接地在您的代码中或在控制台中作为脚本处理。