我用这种方式用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是否有意义?
答案 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
之外处理,更直接在代码中或作为脚本在控制台中处理。