Как заменить импорт 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
и более непосредственно в вашем коде или в консоли в виде скрипта.