Как я могу получить JanusGraphManagement через удаленное соединение? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть контейнер docker, в котором запущен gremlin-server.

Он был запущен через:

./bin/gremlin-server.sh conf/gremlin-server/gremlin-server.yaml

Из контейнера docker, запустив этот образ: https://hub.docker.com/r/janusgraph/janusgraph

Сервер up и прослушивает порт 8182

$ docker ps
6019adda6081        janusgraph/janusgraph                                         "docker-entrypoint.s…"   2 days ago          Up 26 hours         0.0.0.0:8182->8182/tcp                             

Мне интересно использовать схему и индексы.

Янус предлагает это здесь: https://docs.janusgraph.org/basics/schema/

Ниже представлена ​​конфигурация, которую я использую для попытки подключения к серверу gremlin:

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);

, я получаю источник обхода, и все вроде нормально. Однако для использования средств управления, которые предоставляет Янус, мне, кажется, нужен объект JanusGraphManagement. Я не могу получить объект generi c 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

Можно ли изменить схему через удаленное соединение?

Если это невозможно, как можно изменить схему?

Любое понимание приветствуется.

1 Ответ

4 голосов
/ 08 мая 2020

В основном у вас есть два варианта:

  1. Взаимодействовать с вашим JanusGraphManagement объектом с помощью сценария , отправляемого на сервер Gremlin (обычно через сеанс, но я Думаю, вы можете упаковать весь «сценарий управления» вместе и отправить его как один запрос) или
  2. Обойти сервер Gremlin и создать экземпляр вашего JanusGraphManagement объекта локально, как указано в документации JanusGraph.

Невозможно вернуть JanusGraphManagement вашему клиенту, поскольку это не сериализуемый объект, который можно отправить обратно с сервера.

...