如何通过远程连接获取 JanusGraphManagement?
How can I acquire JanusGraphManagement over a remote connection?
我有一个 docker 容器 运行 gremlin-server。
它是通过以下方式启动的:
./bin/gremlin-server.sh conf/gremlin-server/gremlin-server.yaml
从 docker 容器中,运行 此图像:
https://hub.docker.com/r/janusgraph/janusgraph
服务器已启动并正在侦听端口 8182
$ docker ps
6019adda6081 janusgraph/janusgraph "docker-entrypoint.s…" 2 days ago Up 26 hours 0.0.0.0:8182->8182/tcp
我对使用架构和索引很感兴趣。
Janus 在这里提供:https://docs.janusgraph.org/basics/schema/
以下是我用来尝试连接到 gremlin-server 的配置:
AbstractConfiguration config = new BaseConfiguration();
config.setListDelimiter('/');
// contents of conf/remote-graph.properties
config.setProperty("gremlin.remote.driver.sourceName", "g");
config.setProperty("gremlin.remote.remoteConnectionClass", "org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection");
// contents of conf/remote-objects.yaml:
config.setProperty("clusterConfiguration.hosts", databaseUrl);
config.setProperty("clusterConfiguration.port", 8182);
config.setProperty("clusterConfiguration.serializer.className", "org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0/");
config.setProperty("storage.backend", "cql");
config.setProperty("clusterConfiguration.serializer.config.ioRegistries", "org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry");
当我打电话给
GraphTraversalSource g = traversal().withRemote(config);
我得到一个遍历源,一切似乎都很好。但是,要使用 Janus 提供的管理功能,我似乎需要一个 JanusGraphManagement
对象。我无法获取上面的通用 Graph
对象并将其转换为 JanusGraph
。文档建议使用 JanusGraphFactory:https://docs.janusgraph.org/basics/configuration/#janusgraphfactory
所以我打电话给
JanusGraph janusGraph = JanusGraphFactory.open(config);
我得到以下堆栈跟踪:
Exception in thread "main" java.lang.IllegalArgumentException: Could not find implementation class: org.janusgraph.diskstorage.cql.CQLStoreManager
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:60)
at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:440)
at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:411)
at org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:50)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:161)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:132)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:112)
at com.activitystream.database.GraphMigration.migrateDatabase(GraphMigration.java:69)
at com.activitystream.runners.persistence.DataStores.migrateDatabase(DataStores.java:27)
at com.activitystream.runners.persistence.EntityPersistenceRunner.main(EntityPersistenceRunner.java:23)
Caused by: java.lang.ClassNotFoundException: org.janusgraph.diskstorage.cql.CQLStoreManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:56)
... 9 more
是否可以通过远程连接修改架构?
如果不可能,如何修改架构?
如有任何见解,我们将不胜感激。
你基本上有两个选择 - 要么:
- 通过 way of scripts 与发送到 Gremlin 服务器的
JanusGraphManagement
对象进行交互(通常通过会话,但我想您可以将整个“管理脚本”打包在一起并将其作为一个请求提交) 或
- 绕过 Gremlin 服务器并按照 JanusGraph 文档中的指示在本地实例化您的
JanusGraphManagement
对象。
无法将 return 发送给您的客户端 JanusGraphManagement
,因为它不是可以从服务器发回的可序列化对象。
我有一个 docker 容器 运行 gremlin-server。
它是通过以下方式启动的:
./bin/gremlin-server.sh conf/gremlin-server/gremlin-server.yaml
从 docker 容器中,运行 此图像: https://hub.docker.com/r/janusgraph/janusgraph
服务器已启动并正在侦听端口 8182
$ docker ps
6019adda6081 janusgraph/janusgraph "docker-entrypoint.s…" 2 days ago Up 26 hours 0.0.0.0:8182->8182/tcp
我对使用架构和索引很感兴趣。
Janus 在这里提供:https://docs.janusgraph.org/basics/schema/
以下是我用来尝试连接到 gremlin-server 的配置:
AbstractConfiguration config = new BaseConfiguration();
config.setListDelimiter('/');
// contents of conf/remote-graph.properties
config.setProperty("gremlin.remote.driver.sourceName", "g");
config.setProperty("gremlin.remote.remoteConnectionClass", "org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection");
// contents of conf/remote-objects.yaml:
config.setProperty("clusterConfiguration.hosts", databaseUrl);
config.setProperty("clusterConfiguration.port", 8182);
config.setProperty("clusterConfiguration.serializer.className", "org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0/");
config.setProperty("storage.backend", "cql");
config.setProperty("clusterConfiguration.serializer.config.ioRegistries", "org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry");
当我打电话给
GraphTraversalSource g = traversal().withRemote(config);
我得到一个遍历源,一切似乎都很好。但是,要使用 Janus 提供的管理功能,我似乎需要一个 JanusGraphManagement
对象。我无法获取上面的通用 Graph
对象并将其转换为 JanusGraph
。文档建议使用 JanusGraphFactory:https://docs.janusgraph.org/basics/configuration/#janusgraphfactory
所以我打电话给
JanusGraph janusGraph = JanusGraphFactory.open(config);
我得到以下堆栈跟踪:
Exception in thread "main" java.lang.IllegalArgumentException: Could not find implementation class: org.janusgraph.diskstorage.cql.CQLStoreManager
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:60)
at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:440)
at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:411)
at org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:50)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:161)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:132)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:112)
at com.activitystream.database.GraphMigration.migrateDatabase(GraphMigration.java:69)
at com.activitystream.runners.persistence.DataStores.migrateDatabase(DataStores.java:27)
at com.activitystream.runners.persistence.EntityPersistenceRunner.main(EntityPersistenceRunner.java:23)
Caused by: java.lang.ClassNotFoundException: org.janusgraph.diskstorage.cql.CQLStoreManager
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:56)
... 9 more
是否可以通过远程连接修改架构?
如果不可能,如何修改架构?
如有任何见解,我们将不胜感激。
你基本上有两个选择 - 要么:
- 通过 way of scripts 与发送到 Gremlin 服务器的
JanusGraphManagement
对象进行交互(通常通过会话,但我想您可以将整个“管理脚本”打包在一起并将其作为一个请求提交) 或 - 绕过 Gremlin 服务器并按照 JanusGraph 文档中的指示在本地实例化您的
JanusGraphManagement
对象。
无法将 return 发送给您的客户端 JanusGraphManagement
,因为它不是可以从服务器发回的可序列化对象。