Невозможно добавить ребра в Janusgraph (cql-es) через соединение через веб-сокет с помощью драйвера Tinkerpop gremlin 3.3.1

Добавление, удаление, обновление вершин - это нормально, но при попытке добавить ребра я получаю следующее исключение, в котором говорится, что добавление ребер не поддерживается. Кто-нибудь может посоветовать, как добавить рёбра при использовании удалённого клиента? Заранее спасибо.

java.lang.IllegalStateException: пограничные дополнения не поддерживаются в org.apache.tinkerpop.gremlin.structure.Vertex $ Exceptions.edgeAdditionsNotSupported (Vertex.java:175) в org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex. addEdge (ReferenceVertex.java:47)

Ссылка на код: https://gist.github.com/ptclarke/45472fa5c268a6e8441e4c35615194aa


person ptc    schedule 05.11.2018    source источник
comment
Не видя кода, который вы используете для добавления преимущества, трудно сказать, что происходит.   -  person Florian Hockmann    schedule 05.11.2018


Ответы (1)


Объект Vertex, возвращенный из удаленного запроса, отсоединяется от графа и является неизменяемым, поэтому, если вы попытаетесь сделать это:

Vertex v = g.V(id).next()
v.addEdge(...)

он потерпит неудачу, поскольку вы пытаетесь добавить ребра к неизменяемому объекту, не имеющему связи с удаленным графом. Вы должны использовать Gremlin для добавления своих ребер, а не напрямую работать с возвращенными объектами:

g.V(id).addE(...).to(...)
person stephen mallette    schedule 05.11.2018
comment
мой ответ по-прежнему правильный - хотя в моем коде была ошибка, которую я только что исправил. Извини за это. - person stephen mallette; 05.11.2018
comment
Спасибо Флориану и Стивену, я добавил ссылку на суть с кодом, я уверен, что Стивен прав, однако его пример синтаксиса не разбирается, возможно, я не использую правильные библиотеки? Любая помощь очень ценится. - person ptc; 05.11.2018
comment
g.V(from.id()).next().addEdge(label, g.V(to.id()).next()); терпит неудачу по указанной мной причине. Как только вы сделаете это первым next(), вы вернете обособленный Vertex и не сможете позвонить addEdge() по этому поводу. просто сделайте, как я показал выше, g.V(from.id()).addE(label).to(V(to.id())).next() - person stephen mallette; 05.11.2018
comment
Спасибо, Стивен, это сработало, но привело к ошибке сериализации, которую я должен буду изучить дополнительно завтра: io.netty.handler.codec.DecoderException: org.apache.tinkerpop.gremlin.driver.ser.SerializationException: org.apache.tinkerpop. shaded.kryo.KryoException: обнаружен незарегистрированный идентификатор класса: 65536 Трассировка сериализации: id (org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge) в io.netty.handler.codec.MessageToMessageDecoder.channelRead (MessageToMessageDecoder: 98) - person ptc; 06.11.2018
comment
эта ошибка обычно означает, что вам необходимо согласовать свои версии TinkerPop на сервере и клиенте. проверьте версию TinkerPop, которая поставляется с версией JanusGraph, которую вы используете, и убедитесь, что вы используете эту версию на клиенте. - person stephen mallette; 06.11.2018
comment
Спасибо, Стивен, очень ценю твой ответ. Я запускаю JanusGraph 0.3.0 с Cassandra 3.11.3 и ES 6.4.0, я использовал библиотеки Tinkerpop 3.3.1 на клиенте и изменил их на 3.3.3, который является поддерживаемым выпуском для JG 0.3.0, также есть изменен с сериализатора сообщений гироскопа GryoMessageSerializerV1d0 на V3d0 (оба находятся в списке сериализаторов на задней панели), но проблема все еще возникает. Будем исследовать ошибку сериализации и записывать отдельный вопрос, если не удастся устранить. - person ptc; 08.11.2018