【问题标题】:Programmatically add global variables to gremlin server以编程方式将全局变量添加到 gremlin 服务器
【发布时间】:2018-02-10 23:28:28
【问题描述】:

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

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

【问题讨论】:

    标签: java gremlin tinkerpop gremlin-server


    【解决方案1】:

    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

    请注意,在这个新模型下,您有两个其他选项来添加全局绑定...您也可以:

    1. 使用BindingsGremlinPlugin 以编程方式添加全局绑定
    2. 编写您自己的 GremlinPlugin 实例以添加您的绑定

    【讨论】:

      【解决方案2】:

      看起来我们可以这样做,尽管 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 2017-09-19
        • 1970-01-01
        相关资源
        最近更新 更多