Why am I unable-to-connect to JanusGraph-Server on localhost:8182
?
Using Java-17, TinkerPop3 Gremlin, and Janusgraph:latest.
docker run -it -p 8182:8182 janusgraph/janusgraph
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
│ 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>
Thanks Marc! This did fix my issue!
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.