Как заменить импорт tinkerpop импортом janus-графа во время инициализации скриптового движка gremlin?

Я инициализирую gremlin-script-engine с помощью janus-plugin следующим образом:

GremlinScriptEngineManager engineManager = new DefaultGremlinScriptEngineManager();
engineManager.addPlugin(JanusGraphGremlinPlugin.instance());
engine = engineManager.getEngineByName("gremlin-groovy");

Движок обычно оценивает запросы с некоторыми элементами janus (например, Multiplicity.ONE2MANY):

qu = "mgmt.makeEdgeLabel('"+ TEST_EDGE_LABEL+"').multiplicity(ONE2MANY).make();";
engine.evalWithManagementTransaction(qu);

... но для запроса:

qu = "mgmt.makePropertyKey('"+TEST_PROPERTY_KEY+"')"
        + ".dataType(String.class).cardinality(Cardinality.SINGLE).make();";

Я получил:

MissingPropertyException: No such property: SINGLE for class: org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality

Кажется, что скрипт-движок пытается использовать org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality и не один Янус org.janusgraph.core.Cardinality,

PS: если я использую полное имя класса org.janusgraph.core.Cardinality.SINGLE или только значение Cardinality enum (например, просто SINGLE) в запросе тогда все работает нормально.

Как я могу удалить импорт tinkerpop или заставить обработчик сценариев использовать импорт janus из плагина... или имеет смысл изменить gremlin-запросы?

1 ответ

Решение

В консоли вы можете сделать и псевдоним:

gremlin> import org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality as Card
gremlin> Card
==>class org.apache.tinkerpop.gremlin.structure.VertexProperty$Cardinality

Но я не думаю, что по какой-то причине это сработает для Gremlin ScriptEngine. Я не думаю, что мы выставили возможность псевдонима там.

Я думаю, что вы должны использовать полное имя класса org.janusgraph.core.Cardinality.SINGLE, Конечно, я хотел бы знать, почему вы будете делать изменения схемы таким образом. Как правило, изменения схемы представляют собой административные функции, которые вы выполняете вне GremlinScriptEngine и более непосредственно в вашем коде или в консоли в виде скрипта.

Другие вопросы по тегам