我用janus-plugin初始化gremlin-script-engine:
GremlinScriptEngineManager engineManager = new DefaultGremlinScriptEngineManager();
engineManager.addPlugin(JanusGraphGremlinPlugin.instance());
engine = engineManager.getEngineByName("gremlin-groovy");
Run Code Online (Sandbox Code Playgroud)
引擎通常使用一些janus元素(例如Multiplicity.ONE2MANY
)来评估查询:
qu = "mgmt.makeEdgeLabel('"+ TEST_EDGE_LABEL+"').multiplicity(ONE2MANY).make();";
engine.evalWithManagementTransaction(qu);
Run Code Online (Sandbox Code Playgroud)
...但是对于查询:
qu = "mgmt.makePropertyKey('"+TEST_PROPERTY_KEY+"')"
+ ".dataType(String.class).cardinality(Cardinality.SINGLE).make();";
Run Code Online (Sandbox Code Playgroud)
我得到:
MissingPropertyException: No such property: SINGLE for class: org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality
Run Code Online (Sandbox Code Playgroud)
似乎脚本引擎尝试使用 org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality
而不是janus one org.janusgraph.core.Cardinality
。
PS:如果我在查询中使用类的全名org.janusgraph.core.Cardinality.SINGLE
或仅Cardinality
枚举值(例如SINGLE
),则一切正常。
如何删除tinkerpop导入或强制脚本引擎从插件中使用janus导入...还是更改gremlin查询有意义?
你能告诉我 - 是否可以在 Gremlin 服务器上使用 OGM FERMA 框架(TinkerPop 3.2.6,后端有 JanusGraphDB)?
现在我使用 gremlin 客户端以这种方式向 G-server 发送查询:
GryoMapper mapper = GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance()).create();
MessageSerializer serializer = new GryoMessageSerializerV1d0(GryoMapper.build().addRegistry(JanusGraphIoRegistry.getInstance()));
/* Create gremlin cluster... */
Cluster cluster = Cluster.build("123.22.22.111").port(8182).serializer(serializer).create();
Client client = cluster.connect();
ResultSet res = client.submit("g.V().label()");
Run Code Online (Sandbox Code Playgroud)
...因此我不知道如何直接获得图形实例(如在 ferma 教程中):
FramedGraph fg = new DelegatingFramedGraph(graph, true, types);
Run Code Online (Sandbox Code Playgroud)
... 使用遍历来获取 ferma 注释类的实例。