Можно ли получить доступ к Neo4j 3.5.1 (последняя версия) с помощью Neo4j Tinkerpop API? - PullRequest
0 голосов
/ 12 января 2019

Я встраиваю Neo4j Community Edition (v 3.5.1) в приложение Java и пытаюсь открыть график с помощью API Tinkerpop. При этом я сталкиваюсь с исключением и подозреваю, что последняя версия реализации API Tinkerpop Neo4j не совместима с Neo4J 3.5.1. Это правильно? Есть ли обходные пути?

В частности, я пытаюсь использовать следующее: Neo4j CE 3.5.1, Tinkerpop 3.3.5 и внедрение Neo4j Tinkerpop API 0.7-3.2.3. Я подозреваю, что версия API Neo4j Tinkerpop несовместима с последней версией 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.

Спасибо. Буду признателен за любую оказанную помощь.

1 Ответ

0 голосов
/ 14 января 2019

Версия 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 из источника с этим изменением.

...