1

如何将全局变量添加到嵌入式 Gremlin 服务器实例?

另外,我想避免从文件加载服务器配置,尽管我可以从类路径加载资源。

4

2 回答 2

4

getGlobalBindings()onGremlinExecutor确实已弃用,但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

请注意,在这个新模型下,您还有另外两个添加全局绑定的选项……您也可以:

  1. 使用BindingsGremlinPlugin以编程方式添加全局绑定
  2. 编写您自己的GremlinPlugin实例以添加您的绑定
于 2018-02-12T11:02:00.597 回答
0

看起来我们可以这样做,尽管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();
于 2018-02-11T00:23:08.107 回答