Rexster передает значения функциям, определенным в сценариях

У меня есть скрипт с именем /tmp/scripts/a.gremlin, который содержит одну функцию filterOver.

def filterOver(age) {
  return g.V.filter{it.age > age}
}

Моя конфигурация rexster conf/rexster-cassandra.xml содержит правильный раздел расширений.

<extensions>
  <allows>
    <allow>tp:gremlin</allow>
  </allows>
  <extension>
    <namespace>tp</namespace>
      <name>gremlin</name>
      <configuration>
        <scripts>/tmp/scripts</scripts>
        <allow-client-script>true</allow-client-script>
        <cache-scripts>true</cache-scripts>
      </configuration>
    </extension>
</extensions>

Я запустил свой сервер rexster, запустив

bin/titan.sh start

Теперь, когда я выполняю

http://localhost:8182/graphs/graph/tp/gremlin?script=filterOver(30)&load=[a]

я получаю исключение

{"success":false,"api":{"description":"оценить специальный сценарий Gremlin для графика.","parameters":{"rexster.showTypes":"отображает свойства элементов с их родной тип данных (по умолчанию false)", "load": "список хранимых процедур, которые нужно выполнить до "скрипта" (если "скрипт" не указан, последний скрипт в этом аргументе вернет значения) ,"returnTotal":"если установлено значение true, будет повторен полный набор результатов и возвращены результаты (по умолчанию - false)","language":"используемый вариант языка гремлинов (по умолчанию - groovy)","params" :"карта параметров для привязки к обработчику скриптов","сценарий":"сценарий Gremlin для оценки","rexster.returnKeys":"массив возвращаемых ключей свойств элементов (по умолчанию возвращаются все свойства элементов )","rexster.offset.start":"начальный индекс для выгружаемого набора данных, который будет возвращен","rexster.offset.end":"конечный индекс для выгружаемого набора данных, который будет возвращен"}}," сообщение":"","ошибка":"javax.script.ScriptExce ption: groovy.lang.MissingMethodException: Нет подписи метода: com.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.filterOver() применимо для типов аргументов: (java.lang.Integer) значений: [30]"}

я тоже пробовал

http://localhost:8182/graphs/graph/tp/gremlin?params={%22age%22:30}&script=filterOver(age)&load=[a]

и даже следующее

http://localhost:8182/graphs/graph/tp/gremlin?age=30&script=filterOver(age)&load=[a]

Так как же правильно передавать параметры функциям?


person Cathal Coffey    schedule 15.10.2014    source источник


Ответы (1)


Я попробовал вашу конкретную конфигурацию, и она работает для меня. Ваша конфигурация rexster.xml кажется правильной, как и ваша a.gremlin. Кажется, нет проблем с сохранением этого скрипта в /tmp/scripts. Этот конкретный вызов с cURL работал у меня:

curl "http://localhost:8182/graphs/tinkergraph/tp/gremlin?script=filterOver(30)&load=\[a\]"

Если попытка с cURL не работает для вас, я бы посоветовал упростить вашу установку и попробовать, просто загрузив сам Rexster. Убедитесь, что это работает, и если это так, повторите моделирование с помощью Titan Server.

person stephen mallette    schedule 16.10.2014