如何使用 GraphTraversalSource 在 Java 中连接到 JanusGraph

问题描述 投票:0回答:1

问题

为什么我在

localhost:8182
上无法连接到 JanusGraph-Server?
使用 Java-17TinkerPop3 GremlinJanusgraph:latest

│   pom.xml
├───src
│   ├───main
│   │   ├───java
│   │   │       Main.java
│   │   │
│   │   └───resources
│   │       │   log4j2.xml
│   │       │
│   │       ├───conf
│   │       │       remote-graph.properties
│   │       │       remote-objects.yaml

复制步骤(试过)

  1. 启动Docker(Windows)
  2. 执行命令
    docker run -it -p 8182:8182 janusgraph/janusgraph
    shell (command interpreter)
  3. 创建 Java-Maven 项目
  4. 运行项目

Main.java

import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;

import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;

public class Main {
    public static void main(String[] args) throws Exception {
        GraphTraversalSource g = traversal().withRemote("src/main/resources/conf/remote-graph.properties");
    }
}

remote-graph.properties

gremlin.remote.remoteConnectionClass=org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection
gremlin.remote.driver.clusterFile=src/main/resources/conf/remote-objects.yaml
gremlin.remote.driver.sourceName=g

remote-objects.yaml

hosts: [localhost]
port: 8182
serializer: {
  className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0,
  config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}

期望的结果(预期)

没有错误,其余代码运行。

真实结果(实际)

Exception in thread "main" java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException
    at org.apache.tinkerpop.gremlin.process.remote.RemoteConnection.from(RemoteConnection.java:73)
    at org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.withRemote(AnonymousTraversalSource.java:76)
    at org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.withRemote(AnonymousTraversalSource.java:66)
    at Main.main(Main.java:10)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
    at org.apache.tinkerpop.gremlin.process.remote.RemoteConnection.from(RemoteConnection.java:71)
    ... 3 more
Caused by: java.lang.IllegalStateException: java.lang.IllegalStateException: Could not establish serializer - org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
    at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection.<init>(DriverRemoteConnection.java:84)
    ... 9 more
Caused by: java.lang.IllegalStateException: Could not establish serializer - org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0
    at org.apache.tinkerpop.gremlin.driver.Cluster.getBuilderFromSettings(Cluster.java:228)
    at org.apache.tinkerpop.gremlin.driver.Cluster.build(Cluster.java:173)
    at org.apache.tinkerpop.gremlin.driver.Cluster.open(Cluster.java:265)
    at org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection.<init>(DriverRemoteConnection.java:80)
    ... 9 more

Process finished with exit code 1
docker-container janusgraph tinkerpop3 gremlin-server gremlin-java
1个回答
0
投票

janusgraph-0.6.3 的 remote-objects.yaml 内容如下(序列化程序的版本不同):

hosts: [localhost]
port: 8182
serializer: {
    className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0,
    config: {ioRegistries:[org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]}
}
© www.soinside.com 2019 - 2024. All rights reserved.