Как определить пользовательский шаг в Tinkerpop 3?
Tinkerpop 2 используется для поддержки пользовательского шага через Gremlin.defineStep(..)
Как я могу добиться того же, используя Tinkerpop 3?
Есть ли какой-нибудь Gremlin API для создания пользовательского шага и объединения набора шагов обхода?
Любое предложение будет высоко оценено.
Спасибо Каниска
1 ответ
Шаблоны для разработки DSL не полностью установлены для TinkerPop 3.x, поэтому ожидайте некоторые изменения в советах с течением времени. Об этом есть информация в списке рассылки gremlin-users.
Если вы используете Gremlin Server (или можете включить Groovy в свой проект), я не вижу причин, чтобы не просто использовать метапрограммирование Groovy, чтобы заставить это работать. Используя стандартный zip-дистрибутив Gremlin Server, отредактируйте файл generate-modern.groovy, добавив в начале следующую строку:
GraphTraversal.metaClass.knows = { delegate.out('knows') }
затем запустите сервер с:
bin/gremlin-server.sh conf/gremlin-server-rest-modern.yaml
Тогда простой завиток:
$ curl "http://localhost:8182?gremlin=g.V(1).knows().values('name')"
{"requestId":"66c2c929-9cc2-491d-acb0-ae4d7eef6b00","status":{"message":"","code":200,"attributes":{}},"result":{"data":["vadas","josh"],"meta":{}}}
Если у вас сложный DSL, вы можете не захотеть, чтобы вся эта логика попала в отличный сценарий. Достаточно просто - просто создайте стандартный проект groovy, создайте jar, включите некоторую форму статического инициализатора, чтобы вызвать код метапрограммирования и поместить его в путь Gremlin Server. тогда ваш скрипт инициализации просто должен вызвать этот статический инициализатор, и ваш DSL загружен.