首页 > 解决方案 > 在 gremlin 服务器脚本文件中使用自定义库

问题描述

请问我有两个问题,可以吗?

  1. 我想知道如何在 gremlin 服务器脚本引擎中调用(使用)我自己的自定义编写的 java 代码?因此,例如,我认为 Stephen Mallette 编写了一些 java 函数,这些函数在 gremlin 服务器脚本文件夹中调用,这里是他的函数的链接:

https://github.com/apache/tinkerpop/blob/master/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java

然后在 Gremlin Server 脚本文件夹中,generateModern(final TinkerGraph g)使用如下:

globals << [hook : [
  onStartUp: { ctx ->
    ctx.logger.info("Loading 'modern' graph data.")
      org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory.generateModern(graph)
  }
] as LifeCycleHook]

请问如何用我自己编写的 java 函数替换它,以使 gremlin 服务器能够理解我的 java 函数并在运行时读取它们?我需要将我的函数编译成 Jar 文件并放入 Lib 文件夹吗?

  1. 我通过我构建的 Java 程序而不是 Gremlin 控制台连接到 Gremlin 服务器。如何在我的 java 程序中引用和使用图形对象变量。我只能看到和使用图形遍历源对象变量(g),它在脚本文件中公开,即
globals << [g: graph.traversal()]

如何公开图形对象变量,即graph我可以在我的 Java 程序中使用它?

非常感谢

标签: javagremlingremlin-server

解决方案


如果您有自己的 Java 库并希望在 Gremlin Server 中公开,只需将其打包到 jar 中并将其添加到 Gremlin Server 类路径中。您可以通过将 jar 复制到/lib目录或通过gremlin-server.sh install命令添加它来手动执行此操作。如果您使用后者,您可能会考虑构建GremlinPlugin类(它是您实现的接口),这将允许您设置类导入到 Gremlin Server ScriptEngine。您可以在此处查看此类简单插件的示例。有了该 jar 文件,您就可以在脚本中访问库的类。

如何在我的 java 程序中引用和使用图形对象变量

您只能从 Java 程序访问脚本中的“图形”。字节码请求无法做到这一点。也就是说,Graph除了生成“g”之外,您根本不应该使用该对象。不推荐其他用途,因为最佳实践是仅使用 Gremlin 访问您的图表,并且您只能使用“g”编写 Gremlin。使用“graph”肯定会限制代码的可移植性,并将您绑定到可能会更改或不被所有图表完全支持的 API。


推荐阅读