4

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

这是我在尝试使用 Bulbs 的 Rexster 之前所做的:

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

然后我遇到了几个问题:

第一,(不是灯泡问题)我没有成功使 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 中都有效:

  • gEcount() 返回了一些东西(<-> 因此被支持)
  • 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版本“1.7.0_45”
  • Java(TM) SE 运行时环境 (build 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>
[...]

在此先感谢您的任何想法/帮助:)

4

5 回答 5

3

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

于 2014-01-08T19:13:03.327 回答
2

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

于 2014-01-14T08:02:22.503 回答
1

关于你的问题

g.E.count()

我尝试对 orient-DB 使用相同的语法。那里也不支持。所以我认为它在 gremlin 2.4 中有一种错误的味道

解决方法很简单,使用

g.getEdges().count()
于 2014-01-13T12:00:35.373 回答
1

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

于 2014-01-10T13:41:32.183 回答
1

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

于 2014-01-08T22:30:18.813 回答