Определяемый пользователем шаг гремлина работает в гремлине, но не в рекстере

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

Я использую:

  • rexster-server-2.6.0;
  • gremlin-groovy-2.5.0;
  • orientdb-community-1.7.9;

Я загрузился, чтобы сориентировать граф, представляющий простое дерево иерархии. Каждый узел имеет ребро, помеченное как «родительский», которое указывает на его родителя. Это DAG.

Я определил определяемый пользователем шаг в Gremlin (загружается в rexster через его сценарии инициализации) следующим образом:

   Gremlin.defineStep('children', 
      [Vertex, Pipe], 
      {int depth ->  _().out('parent').loop(1) 
        {it.loops < depth} 
        {it.object != null} 
    })

При использовании инструмента gremlin в командной строке в будке рекстера с этими командами я получаю следующую ошибку (прокрутите вправо, чтобы увидеть все сообщение об ошибке):

gremlin> g.V('type', 'LSNetwork')
==>v[#9:6312]
gremlin> g.V('type', 'LSNetwork').out('parent').out('parent').name
==>Leaf 0
==>Leaf 1
==>Leaf 2
==>Leaf 3   
gremlin> g.V('type', 'LSNetwork').children(2)
==>javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: com.tinkerpop.gremlin.groovy.GremlinGroovyPipeline.children() is applicable for argument types: (java.lang.Integer) values: [2]

Однако, если я запускаю gremlin.sh, подключаюсь к своему графику, определяю шаг и выполняю его, он работает отлично:

gremlin> Gremlin.defineStep('children', [Vertex, Pipe], {int depth -> _().out('parent').loop(1){it.loops < depth}{it.object != null}})
==>null
gremlin> sg=new OrientGraph('remote:localhost/scratch')                                                                               
==>orientgraph[remote:localhost/scratch]
gremlin> sg.V('type','LSNetwork').children(3).name
==>Spine 0
==>Spine 1
==>Leaf 0
==>Leaf 1
==>Leaf 2
==>Leaf 3

(Примечание: имена правильные и то, что я ожидаю увидеть).

Почему мой скрипт gremlin работает с консоли gremlin, а не через bulbs / rexster?

Заранее благодарим за любую помощь, идеи или указатели на соответствующую документацию.


person phonybone    schedule 26.11.2014    source источник


Ответы (1)


У меня нет проблем с этим при использовании версии шага codeveloper, определенной в документации:

$ curl "http://localhost:8182/graphs/tinkergraph/tp/gremlin?script=g.v(1).codeveloper.name"
{"success":true,"results":["josh","peter"],"version":"2.5.0","queryTime":39.294181}

похоже, тоже работает в Dog House. Я предполагаю, что Рекстер не находит сценарий. Вы уверены, что выбрали правильный путь для настройки <init-scripts>? Вы должны увидеть эту запись в журнале, если сценарий инициализации был правильно указан и загружен:

[INFO] EngineHolder - ScriptEngine initializing with a custom script

Вы не увидите его, пока не будет запущен ScriptEngine, чего не произойдет, пока вы не сделаете запрос против него (например, как моя команда curl выше).

person stephen mallette    schedule 27.11.2014
comment
Скорее всего, это причина проблемы. Однако мне не удалось успешно загрузить скрипт init.groovy. Я подозреваю, что проблема в базовой конфигурации. Я переместил беседу сюда. - person phonybone; 03.12.2014