【发布时间】:2018-02-10 23:28:28
【问题描述】:
如何将全局变量添加到嵌入式 Gremlin 服务器实例?
另外,我想避免从文件加载服务器配置,尽管我可以从类路径加载资源。
【问题讨论】:
标签: java gremlin tinkerpop gremlin-server
如何将全局变量添加到嵌入式 Gremlin 服务器实例?
另外,我想避免从文件加载服务器配置,尽管我可以从类路径加载资源。
【问题讨论】:
标签: java gremlin tinkerpop gremlin-server
GremlinExecutor 上的getGlobalBindings() 确实已被弃用,但javadoc 解释了您应该如何继续:
替换为
getScriptEngineManager()以添加全局范围绑定 直接指向那个对象。
这来自 3.2.5 javadoc,当时它最初被弃用是为了准备在 3.3.0 中进行相当大的更改,当时实现了新接口以更好地概括 GremlinScriptEngine。虽然这些新接口在 3.3.0 中被定义为默认使用,但它们实际上存在于 3.2.x 中并且可以在那里使用。请注意,getGlobalBindings() 方法实际上已在 3.3.0 中完全删除,因此当您升级时,最终会出现编译错误。
关于该 javadoc 注释可能存在一些混淆的地方是,要使用 getScriptEngineManager(),您还必须在 3.2.x 代码行上使用默认的 3.3.0 yaml 配置......一个例子是此处显示:
https://github.com/apache/tinkerpop/blob/3.3.0/gremlin-server/conf/gremlin-server-classic.yaml#L25
请注意,在这个新模型下,您有两个其他选项来添加全局绑定...您也可以:
BindingsGremlinPlugin 以编程方式添加全局绑定GremlinPlugin 实例以添加您的绑定【讨论】:
看起来我们可以这样做,尽管 getGlobalBindings() 已被弃用。
Graph graph = this.createGraph();
GraphTraversalSource g = graph.traversal();
this.server = new GremlinServer(getSettings());
this.server.getServerGremlinExecutor().getGraphManager().putGraph("graph", graph);
this.server.getServerGremlinExecutor().getGremlinExecutor().getGlobalBindings().put("graph", graph);
this.server.getServerGremlinExecutor().getGremlinExecutor().getGlobalBindings().put("g", g);
this.server.start();
【讨论】: