【问题标题】:Can Neo4j 3.5.1 (latest version) be accessed using the Neo4j Tinkerpop API?可以使用 Neo4j Tinkerpop API 访问 Neo4j 3.5.1(最新版本)吗?
【发布时间】:2019-01-12 14:16:19
【问题描述】:

我在 Java 应用程序中嵌入 Neo4j 社区版 (v 3.5.1) 并尝试使用 Tinkerpop API 打开图形。这样做时我遇到了异常,并怀疑最新版本的 Neo4j Tinkerpop API 实现与 Neo4J 3.5.1 不兼容。这个对吗?有解决方法吗?

具体来说,我正在尝试使用以下内容:Neo4j CE 3.5.1、Tinkerpop 3.3.5 和 Neo4j Tinkerpop API 实现 0.7-3.2.3。我怀疑 Neo4j Tinkerpop API 版本与最新版本的 Neo4j 不兼容,但 API 版本已经一年多没有更新了。我也尝试过使用 Neo4j CE 3.4.11,但这也不起作用。

但是,我可以让 Neo4j CE 3.2.13 与 Neo4j Tinkerpop API 0.6-3.2.2 一起使用,没有任何问题。

我的 POM 包含以下依赖项:

    <dependency>
        <groupId>org.apache.tinkerpop</groupId>
        <artifactId>tinkerpop</artifactId>
        <version>3.3.5</version>
        <type>pom</type>
    </dependency>

    <dependency>
        <groupId>org.apache.tinkerpop</groupId>
        <artifactId>gremlin-driver</artifactId>
        <version>3.3.5</version>
    </dependency>

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j</artifactId>
        <version>3.5.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.tinkerpop</groupId>
        <artifactId>neo4j-gremlin</artifactId>
        <version>3.3.5</version>
    </dependency>

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-tinkerpop-api-impl</artifactId>
        <version>0.7-3.2.3</version>
    </dependency>

在我的 Java 代码中,我试图打开如下图:

    Configuration configuration = new BaseConfiguration();
    configuration.addProperty("gremlin.graph", "org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph");
    configuration.addProperty("gremlin.neo4j.directory", "/neo4jpoc");

    graph = Neo4jGraph.open(configuration);

当尝试使用它打开图表时,我得到以下异常:

Exception in thread "main" java.util.ServiceConfigurationError: org.neo4j.configuration.LoadableConfig: Provider org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings could not be instantiated
    at java.util.ServiceLoader.fail(ServiceLoader.java:232)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
    at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
.....
Caused by: java.lang.NoSuchMethodError: org.neo4j.kernel.configuration.Settings.setting(Ljava/lang/String;Ljava/util/function/Function;Ljava/lang/String;)Lorg/neo4j/graphdb/config/BaseSetting;
    at org.neo4j.kernel.impl.enterprise.configuration.EnterpriseEditionSettings.<clinit>(EnterpriseEditionSettings.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
..... 

同样,我在使用 Neo4j v. 3.2.13 时没有任何问题,但我想使用最新版本或至少 v. 3.4.11。

谢谢。任何帮助深表感谢。

【问题讨论】:

    标签: neo4j tinkerpop3


    【解决方案1】:

    Neo4j 版本由neo4j-tinkerpop-api-impl 定义,似乎已更新到 Neo4j 3.4.10:

    https://github.com/neo4j-contrib/neo4j-tinkerpop-api-impl/tree/3.4

    该版本需要在 neo4j-gremlin 中更新,然后进行测试:

    https://github.com/apache/tinkerpop/blob/67764ba23d67d9f62048c22e8bbcefb87463584e/neo4j-gremlin/pom.xml#L120

    理想情况下,这会发生在上周刚刚发布的 TinkerPop 3.4.0 版本中,但根据升级所需的任何更改的性质,将其应用于 3.4.1 可能没问题。很乐意考虑对这项工作提出拉取请求,但显然您可以通过此更改从源代码构建您自己的 TinkerPop 工件。

    【讨论】:

    • 感谢斯蒂芬的回复。我能够让它工作。但是,我使用最新版本的 Neo4j 的目标之一是能够使用 Neo4j 从 3.4 版开始支持的日期属性值来保存顶点。但是,即使使用了最新版本(现在是 3.5.1),我也无法通过 Gremlin 执行此操作。
    • 附带说明,此升级已正式生效:github.com/apache/tinkerpop/pull/1042 - 至于您的评论,您说有问题,但不要说是什么问题。
    • 对不起斯蒂芬...让我更清楚。我正在尝试使用 Gremlin 遍历来存储本机日期时间值,即.property("propName", new Date()) 这样做时,我得到了异常:java.lang.IllegalArgumentException: Property value [Fri Jan 18 06:55:45 EST 2019] is of type class java.util.Date is not supported Neo4j 的最新版本支持本机日期类型,但我想知道这是否仅在使用 Cypher 时。
    • 如果你传递一个原始的DateValue:github.com/neo4j/neo4j/blob/3.4.12/community/values/src/main/…会发生什么
    • 我之前没有尝试过。它确实有效。谢谢。话虽如此,我还是希望坚持纯 Tinkerpop(即没有 Neo4j 进口)。我不明白为什么 Neo4j Gremlin API 实现不接受标准 Java 日期类型之一并映射到底层类型。如果您能帮助我理解这一点,我将不胜感激。尽管如此,非常感谢斯蒂芬的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多