Как использовать ArangoDB с лампами и рексстером?

В настоящее время я пытаюсь получить доступ к базе данных ArangoDB с помощью Bulbs и Rexster. Мне нужно это сделать, потому что я хочу использовать Bulbs ( http://bulbflow.com/) для запуска некоторых запросов gremlin из Python. (Мне очень нравятся AQL и arangosh, но у меня уже есть много работающих скриптов gremlin)

Вот что я сделал, прежде чем пытаться использовать Rexster от Bulbs:

  • Я успешно скомпилировал драйвер ArangoDB BluePrint и получил: blueprints-arangodb-graph-1.0.4-SNAPSHOT-jar-with-dependencies.jar
  • Я загрузил Gremlin2.4 бинарные файлы Rexster 2.4 и скопировал blueprints-arangodb-graph-1.0.4-SNAPSHOT-jar-with-dependencies.jar в (соответственно) папку lib и ext

Затем я столкнулся с несколькими проблемами:

Во-первых, (не проблема с лампочками) Мне не удалось заставить ArangoDB правильно работать с текущей версией Gremlin (2.4.0) и / или Rexster (2.4.0)

В гремлине 2.4:

gremlin> import com.tinkerpop.blueprints.impls.arangodb.*
[...]
gremlin> g = ArangoDBGraphFactory.createArangoDBGraph();
==>arangodbgraph[{"_id":"_graphs\/factory_graph","_rev":"20228207","_key":"factory_graph","vertices":"factory_vertices","edges":"factory_edges"}]
gremlin> g.E.count()
Not supported yet.
Display stack trace? [yN]

В bash при запуске Rexster 2.4:

Exception in thread "main" java.lang.NoSuchFieldError: isRDFModel
    at com.tinkerpop.blueprints.impls.arangodb.ArangoDBGraph.<clinit>(ArangoDBGraph.java:44)
    at com.tinkerpop.blueprints.impls.arangodb.utils.ArangoDBConfiguration.configureGraphInstance(ArangoDBConfiguration.java:60)
    at com.tinkerpop.rexster.config.GraphConfigurationContainer.getGraphFromConfiguration(GraphConfigurationContainer.java:119)
    at com.tinkerpop.rexster.config.GraphConfigurationContainer.<init>(GraphConfigurationContainer.java:54)
    at com.tinkerpop.rexster.server.XmlRexsterApplication.reconfigure(XmlRexsterApplication.java:99)
    at com.tinkerpop.rexster.server.XmlRexsterApplication.<init>(XmlRexsterApplication.java:47)
    at com.tinkerpop.rexster.Application.<init>(Application.java:96)
    at com.tinkerpop.rexster.Application.main(Application.java:188)

Рассматривая некоторые примеры использования версий Gremlin и Rexster версии 2.2, я скачал их и снова установил драйвер чертежа arangodb

На этот раз он работал как в Gremlin 2.2, так и в Rexster 2.2:

  • gEcount() что-то вернул (при этом<-> поддерживается)
  • Сервер Rexster запущен, и я могу получить доступ к API Rexster через порт 8182

НО, вторая проблема заключается в следующем коде Python:

from bulbs.rexster import Graph
from bulbs.config import Config
config = Config('http://localhost:8182/graphs/arangodb')
g = Graph(config)

вернулся:

({'status': '500', 'transfer-encoding': 'chunked', 'server': 'grizzly/2.2.18', 'connection': 'close', 'date': 'Wed, 08 Jan 2014 17:30:29 GMT', 'access-control-allow-origin': '*', 'content-type': 'application/json'}, '{"message":"","error":"javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: groovy.lang.MissingMethodException.rollback() is applicable for argument types: () values: []\\nPossible solutions: collect(), collect(groovy.lang.Closure), collect(java.util.Collection, groovy.lang.Closure)","api":{"description":"evaluate an ad-hoc Gremlin script for a graph.","parameters":{"rexster.returnKeys":[...]

Я не знаю, как это можно исправить (я не программист на Java, кстати)

Вот мой env:

  • Ubuntu 11.10
  • Java-версия "1.7.0_45"
  • Java (TM) SE Runtime Environment (сборка 1.7.0_45-b18)
  • Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 24.45-b08, смешанный режим)

Вот мой конфиг Arango в rexster.xml (который позволяет мне получить доступ к arangodb из Rexster REST API):

[...]
<graph>
    <graph-name>arangodb</graph-name>
    <graph-type>com.tinkerpop.blueprints.impls.arangodb.utils.ArangoDBConfiguration</graph-type>
    <properties>
        <graph-name>arangodb-rexster-graph</graph-name>
        <vertex-name>arangodb-rexster-graph-vertices</vertex-name>
        <edge-name>arangodb-rexster-graph-edges</edge-name>
        <host>localhost</host>
        <port>8529</port>
    </properties>
</graph>
[...]

Заранее спасибо за любые идеи / помощь:)

5 ответов

Я не использовал реализацию ArangoDB Blueprints, но у вас определенно есть проблемы с версиями, способствующие этой проблеме. По словам Пома, похоже, что 1.0.4-SNAPSHOT работает с TinkerPop 2.3.0. Я бы начал с того, чтобы убедиться, что вы используете Gremlin/Rexster 2.3.0 в качестве первого шага к решению этой проблемы. В качестве второго шага, убедитесь, что Rexster работает правильно, прежде чем пробовать луковицы. Другими словами, выполнение нескольких сценариев с помощью расширения Gx Rexster и проверка результатов будет хорошим началом для обеспечения правильной работы Bulbs при попытке подключения через Python.

Относительно проблемы rexster 2.4: вы можете найти ветку 2.4 в https://github.com/triAGENS/blueprints-arangodb-graph, которая должна работать с rexster/gremlin 2.4

Да, то, что сказал stephen mallette, и убедитесь, что расширение gremlin настроено в вашем конфигурационном файле rexster.xml. Затем используйте curl для тестирования Rexster из командной строки, чтобы убедиться, что он работает. Это поможет вам изолировать любые проблемы, так как это новая БД.

По поводу вашей проблемы с

g.E.count()

Я пытался использовать тот же синтаксис с Orient-DB. Там тоже не поддерживается. Так что я думаю, что он имеет запах ошибки в Gremlin 2.4

Обходной путь прост, используйте

g.getEdges().count()

В соответствии с подключением к ArangoDB: кажется, проблема с сервером gremlin, включенным в rexster и нашей реализацией драйвера. Мне удалось выполнить ваш код успешно в автономном Gremlin, но получить проблему на сервере Rexster. Мы исправляем драйвер чертежа + документацию, чтобы он снова работал.

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