Neo4j Spatial вызывает исключение жизненного цикла

1

Поэтому я пытаюсь обойти Neo4j Spatial. Я написал следующий код:

public static void main(String[] args) {
    GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase("var/geo");
    SpatialDatabaseService spatialDb = new SpatialDatabaseService(graphDb);
    EditableLayer runningLayer = (EditableLayer) spatialDb.getOrCreateLayer("running", SimplePointEncoder.class, EditableLayerImpl.class, "lon:lat");

    Node ship = null;
    try(Transaction tx = graphDb.beginTx();) {
        ship = graphDb.createNode(MyLabels.Ship);
        ship.setProperty("Name", new String("Toms Powerboat"));
        tx.success();
    }
    routeGenerator(graphDb, runningLayer, ship);
    graphDb.shutdown();
}


private static void routeGenerator(GraphDatabaseService graphDb, EditableLayer runningLayer, Node node){

    final long startTime = System.currentTimeMillis();
    try(
            Transaction tx = graphDb.beginTx();
            ){
        Coordinate start = new Coordinate(Math.random()*10, Math.random()*10);
        for(int i=0; i<200; i++){
            SpatialDatabaseRecord torecord = runningLayer.add(runningLayer.getGeometryFactory().createPoint(start));
            torecord.setProperty("Time", (System.currentTimeMillis() - startTime)*10000000);
            torecord.getGeomNode().createRelationshipTo(node, RelTypes.hasLocation);
            start = new Coordinate((start.x + 0.1), start.x+Math.random()*0.2);
        }

        tx.success();


    }
}

Кажется, что это работает в первый раз, когда я запускаю его, но если я попытаюсь запустить его второй раз, я получаю:

Exception in thread "main" java.lang.RuntimeException: Error starting org.neo4j.kernel.EmbeddedGraphDatabase, C:\Users\pstephens\Programming\Java\ContainSSS\var\geo
at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:330)
at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:63)
at org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:92)
at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:198)
at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:69)
at com.bmt.contain.spatial.test.SpatialTest.main(SpatialTest.java:43)
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.impl.transaction.XaDataSourceManager@349cebe0' was successfully initialized, but failed to start. Please see attached cause exception.
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:509)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:307)
... 5 more


Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource@46c8fa1e' was successfully initialized, but failed to start. Please see attached cause exception.
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:509)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
at org.neo4j.kernel.impl.transaction.XaDataSourceManager.start(XaDataSourceManager.java:164)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:503)
... 7 more
Caused by: org.neo4j.kernel.impl.storemigration.UpgradeNotAllowedByConfigurationException: Failed to start Neo4j with an older data store version. To enable automatic upgrade, please set configuration parameter "allow_store_upgrade=true"
at org.neo4j.kernel.impl.storemigration.ConfigMapUpgradeConfiguration.checkConfigurationAllowsAutomaticUpgrade(ConfigMapUpgradeConfiguration.java:39)
at org.neo4j.kernel.impl.storemigration.StoreUpgrader.attemptUpgrade(StoreUpgrader.java:71)
at org.neo4j.kernel.impl.nioneo.store.StoreFactory.tryToUpgradeStores(StoreFactory.java:144)
at org.neo4j.kernel.impl.nioneo.store.StoreFactory.newNeoStore(StoreFactory.java:119)
at org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource.start(NeoStoreXaDataSource.java:323)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:503)
... 10 more

Поэтому я понимаю, что это, как правило, какое-то управление версиями, поэтому ниже приведены зависимости maven, которые у меня есть (среди многих других) от эффективного POM.

<dependency>
  <groupId>org.neo4j</groupId>
  <artifactId>neo4j-spatial</artifactId>
  <version>0.13-neo4j-2.0.1</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.neo4j</groupId>
  <artifactId>neo4j</artifactId>
  <version>2.0.1</version>
  <scope>compile</scope>
</dependency>

PS: Я также хотел бы понять, почему Java-код не анализируется SO с приятной подсветкой.

Теги:
maven
neo4j
maven-2
neo4j-spatial

2 ответа

0
Лучший ответ

Это оказалось проблемой.

Изменив репозитории на:

<repository>
        <id>neo4j-contrib-releases</id>
        <url>https://raw.github.com/neo4j-contrib/m2/master/releases</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>neo4j-contrib-snapshots</id>
        <url>https://raw.github.com/neo4j-contrib/m2/master/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>

И зависимости от:

 <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-spatial</artifactId>
        <version>0.12-neo4j-2.0.2</version>
    </dependency>
<dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j</artifactId>
        <version>2.0.2</version>
    </dependency>

Проблема исчезла. Раньше я использовал http://maven-repository.com/artifact/org.neo4j/neo4j-spatial как мой репозиторий maven, и кажется, что эти версии как-то несовместимы.

1

Это не связано с пространством neo4j. Кажется, ваши зависимости neo4j были обновлены до новой версии. Поэтому вам необходимо обновить datastore.

ПОЖАЛУЙСТА, УБЕДИТЕСЬ, ЧТОБЫ ВЫПОЛНИТЬ КОПИРОВАНИЕ РЕЗЕРВНОГО КОПИРОВАНИЯ ДО ТОГО, ЧТОБЫ ОБРАТИТЬСЯ. Снижение рейтинга хранилища не поддерживается.

Чтобы выполнить обновление хранилища данных, создайте GraphDatabaseService следующим образом:

GraphDatabaseService graphDb = new GraphDatabaseFactory()
  .newEmbeddedDatabaseBuilder("var/geo")
  .setConfig("allow_store_upgrade", "true")
  .newGraphDatabase();
  • 0
    Это не исправило это, это просто привело к новым ошибкам невозможности обновления. Кроме того, поскольку даже очистка файла и создание новой базы данных не помешали ему утверждать, что он нуждается в обновлении, это определенно было ошибкой некоторого описания.
  • 0
    может быть, вы не сделали чистое отключение, используя старую версию? Обновление магазина требует чистого закрытия заранее.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню