Поэтому я пытаюсь обойти 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 с приятной подсветкой.
Это оказалось проблемой.
Изменив репозитории на:
<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, и кажется, что эти версии как-то несовместимы.
Это не связано с пространством neo4j. Кажется, ваши зависимости neo4j были обновлены до новой версии. Поэтому вам необходимо обновить datastore.
ПОЖАЛУЙСТА, УБЕДИТЕСЬ, ЧТОБЫ ВЫПОЛНИТЬ КОПИРОВАНИЕ РЕЗЕРВНОГО КОПИРОВАНИЯ ДО ТОГО, ЧТОБЫ ОБРАТИТЬСЯ. Снижение рейтинга хранилища не поддерживается.
Чтобы выполнить обновление хранилища данных, создайте GraphDatabaseService
следующим образом:
GraphDatabaseService graphDb = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder("var/geo")
.setConfig("allow_store_upgrade", "true")
.newGraphDatabase();