如何使用ArangoDB与灯泡和& rexster?

时间:2014-01-08 18:34:38

标签: python bulbs rexster arangodb

我目前正在尝试使用Bulbs和Rexster访问ArangoDB数据库。 我需要这样做,因为我想使用Bulbs(http://bulbflow.com)从Python启动一些gremlin查询。 (我真的很喜欢AQL和arangosh但我已经有很多工作的gremlin脚本了)

以下是我在尝试使用灯泡中的Rexster之前所做的事情:

  • 我成功编译了ArangoDB BluePrint驱动程序并获得:blueprints-arangodb-graph-1.0.4-SNAPSHOT-jar-with-dependencies.jar
  • 我下载了Gremlin2.4一个Rexster 2.4二进制文件,并在(分别)lib和ext文件夹中复制了蓝图-arangodb-graph-1.0.4-SNAPSHOT-jar-with-dependencies.jar

然后我遇到了几个问题:

1,(不是灯泡问题)我没有成功使ArangoDB与当前版本的Gremlin(2.4.0)和/或Rexster(2.4.0)正常工作

在gremlin 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:

  • g.E.count()返回了一些内容(&lt; - &gt;因此受支持)
  • 启动了Rexster服务器,我可以在端口8182上访问Rexster api

但是,第二个问题是以下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程序员,顺便说一下)

这是我的环境:

  • Ubuntu 11.10
  • java版本&#34; 1.7.0_45&#34;
  • Java(TM)SE运行时环境(版本1.7.0_45-b18)
  • Java HotSpot(TM)64位服务器VM(内置24.45-b08,混合模式)

这是我在rexster.xml中的Arango配置(让我从Rexster REST API访问arangodb):

[...]
<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 个答案:

答案 0 :(得分:3)

我没有使用ArangoDB Blueprints实现,但你肯定有一些版本问题导致了这个问题。根据{{​​3}},看起来1.0.4-SNAPSHOT与TinkerPop 2.3.0一起使用。首先,我要确保您使用Gremlin / Rexster 2.3.0作为解决此问题的第一步。第二步,确保在尝试灯泡之前Rexster正常运行。换句话说,通过Rexster pom执行一些脚本并验证结果将是确保灯泡在您尝试通过Python连接时运行良好的良好开端。

答案 1 :(得分:2)

关于rexster 2.4问题: 你可以在https://github.com/triAGENS/blueprints-arangodb-graph中找到一个2.4分支,它应该与rexster / gremlin 2.4一起使用

答案 2 :(得分:1)

是的,Stephen Mallete说的是什么,并确保在rexster.xml配置文件中配置了gremlin扩展。然后使用curl从命令行测试Rexster以确保它正常工作。这将帮助您隔离任何问题,因为它是一个新的数据库。

答案 3 :(得分:1)

根据与ArangoDB的连接: rexster和我们的驱动程序实现中包含的gremlin服务器似乎存在问题。 我设法在独立的gremlin中成功执行你的代码,但在rexster服务器中得到了问题。 我们正在修复蓝图驱动程序+文档s.t.它会再次运作。

答案 4 :(得分:1)

关于

的问题
g.E.count()

我尝试使用与orient-DB相同的语法。它也不受支持。所以我认为它在gremlin 2.4中有一个臭虫味道

解决方法很简单,请使用

g.getEdges().count()