0

Problem

Why am I unable-to-connect to JanusGraph-Server on localhost:8182?
Using Java-17, TinkerPop3 Gremlin, and Janusgraph:latest.

Reproduction

Steps

  1. Download-and-Install Docker (Windows)
  2. Create-and-Startup JanusGraph Docker-container docker run -it -p 8182:8182 janusgraph/janusgraph Gremlin running on Docker-container of Janusgraph-image
  3. Create-and-Run Java-Maven Project
  4. Results
    1. Expected: No errors and that the rest of the code runs
    2. Actual: Runtime Error: IllegalStateException Could not establish serializer - org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0

Logs

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

Code

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

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] }}

pom.xml

    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j2-impl</artifactId>
            <version>2.20.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tinkerpop</groupId>
            <artifactId>gremlin-core</artifactId>
            <version>3.6.2</version>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>org.janusgraph</groupId>-->
<!--            <artifactId>janusgraph-core</artifactId>-->
<!--            <version>1.0.0-20230424-065649.dcd3240</version>-->
<!--        </dependency>-->
        <!-- https://mvnrepository.com/artifact/org.janusgraph/janusgraph-core -->
        <dependency>
            <groupId>org.janusgraph</groupId>
            <artifactId>janusgraph-core</artifactId>
            <version>0.6.4-20230429-020227.dc3f877</version>
        </dependency>
    </dependencies>

Update

Thanks Marc! This did fix my issue!

enter image description here

Zach
  • 539
  • 1
  • 4
  • 22

1 Answers1

3

The remote-objects.yaml for janusgraph-0.6.3 reads as follows (with a different version for the serializer):

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

[Edited after comments] janusgraph-1.0.0.rc2 reads:

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

Your java project uses janusgraph-1.0.0.rc2 while the gremlin server in the Docker container uses janusgraph-0.6.3 (latest does not include release candidates). Generally, you cannot mix minor versions for gremlin-driver and gremlin server.

Zach
  • 539
  • 1
  • 4
  • 22
HadoopMarc
  • 1,356
  • 3
  • 11
  • This looks the same as my `remote-objects.yaml` except using [`GryoMessageSerializerV3d0`](https://tinkerpop.apache.org/javadocs/3.4.6/full/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV3d0.html) instead of [`GryoMessageSerializerV1d0`](https://tinkerpop.apache.org/javadocs/3.2.9/full/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV1d0.html). – Zach May 01 '23 at 18:32
  • And, TinkerPop3 seems to have Deprecated this [`GryoMessageSerializerV3d0`](https://tinkerpop.apache.org/javadocs/3.4.6/full/org/apache/tinkerpop/gremlin/driver/ser/GryoMessageSerializerV3d0.html) in place of [`GraphBinaryMessageSerializerV1`](https://tinkerpop.apache.org/javadocs/3.4.6/full/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.html) – Zach May 01 '23 at 18:33
  • I tried these btw, and they didn't change the error – Zach May 01 '23 at 19:23
  • So ther error now reads: Caused by: java.lang.IllegalStateException: Could not establish serializer - org.apache.tinkerpop.gremlin.driver.ser. **GryoMessageSerializerV3d0** ? – HadoopMarc May 02 '23 at 18:49
  • Yes `Could not establish serializer - org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0` – Zach May 02 '23 at 18:57
  • OK, I did not notice the 1.0.0.rc2 version before, see the edits in the answer. – HadoopMarc May 03 '23 at 05:43