簡體   English   中英

如何將janus圖導入添加到gremlin groovy腳本引擎中?

[英]How to add janus graph imports to gremlin groovy script engine?

我使用GremlinGroovyScriptEngine,它是gremlin服務器的一部分,用於評估字符串gremlin查詢-像這樣:

final ScriptEngine engine = new GremlinGroovyScriptEngine();
engine.eval("g.V().count().next();");

...一切都很好,直到我開始在查詢中使用janus-graph特定元素-這樣(最后一個字符串):

final ScriptEngine engine = new GremlinGroovyScriptEngine();

//== Set binding with traversal/graph/transaction to script engine ===
JanusGraphManagement mgmt = jg.openManagement();
SimpleBindings trBinding = new SimpleBindings();
trBinding.putAll(this.bindings);
trBinding.put("mgmt", mgmt);
engine.setBindings(trBinding, ScriptContext.ENGINE_SCOPE);

result = engine.eval("mgmt.makePropertyKey('zzzzzz').dataType(String.class).cardinality(Cardinality.SINGLE).make();");

...在這種情況下,我得到了:

MissingPropertyException: No such property: SINGLE for class: org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality

解決方法是,在查詢中定義整個類名org.janusgraph.core.Cardinality.SINGLE

據我了解,可以在腳本引擎創建期間將所有特定的導入設置為腳本引擎。 Janus特定的導入在JanusGraphGremlinPlugin類中定義,我在gremlin-script-engine初始化期間以這種方式使用:

JanusGraphGremlinPlugin graphGremlinPlugin = JanusGraphGremlinPlugin.instance();

GremlinScriptEngineManager engineManager = new CachedGremlinScriptEngineManager();

/* Create gremlin script engine */
GremlinGroovyScriptEngine engine = GremlinGroovyScriptEngine.class
.cast(engineManager.getEngineByName("gremlin-groovy"));

...但是它不起作用。 似乎engineManager沒有設置任何插件,因為在創建引擎engine.getPlugins().size()給出0。

也有直接加載引擎的引擎方法:

...
 engine.loadPlugins(Collections.singletonList(graphGremlinPlugin))
...

...但它接收已棄用的org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPlugin類的實例List (由org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin代替)。 而且JanusGraphGremlinPlugin類是org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin后代,因此無法在.loadPlugins()方法中使用。

您知道如何使用JanusGraphGremlinPlugin類將janus特定的導入添加到gremlin-groovy-engine嗎?

您需要將插件添加到GremlinScriptEngineManager實例:

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

只要在實例化引擎之前添加了插件,它就應該起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM