Neo4j嵌入式在线备份(Java实现)

3

我正在使用Neo4j(嵌入式)企业版1.9.4和Scala-Neo4j包装器进行我的项目的开发。我尝试使用Java备份Neo4j数据,如下:

  def backup_data()
  {
        val backupPath: File = new File("D:/neo4j-enterprise-1.9.4/data/backup/")
        val backup = OnlineBackup.from( "127.0.0.1" )
        if(backupPath.list().length > 0)
        {
            backup.incremental( backupPath.getPath() )
        }
        else
        {
        backup.full( backupPath.getPath() );
        }
  }

完整备份方面一切正常,但增量备份部分抛出了空指针异常。

我错在哪里了?

编辑

通过Scala-Neo4j包装器构建GraphDatabase实例

class MyNeo4jClass extends SomethingClass with Neo4jWrapper with EmbeddedGraphDatabaseServiceProvider {
  def neo4jStoreDir = "/tmp/temp-neo-test"
  . . .
}

堆栈跟踪

Exception in thread "main" java.lang.NullPointerException
    at org.neo4j.consistency.checking.OwnerChain$3.checkReference(OwnerChain.java:111)
    at org.neo4j.consistency.checking.OwnerChain$3.checkReference(OwnerChain.java:106)
    at org.neo4j.consistency.report.ConsistencyReporter$DiffReportHandler.checkReference(ConsistencyReporter.java:330)
    at org.neo4j.consistency.report.ConsistencyReporter.dispatchReference(ConsistencyReporter.java:109)
    at org.neo4j.consistency.report.PendingReferenceCheck.checkReference(PendingReferenceCheck.java:50)
    at org.neo4j.consistency.store.DirectRecordReference.dispatch(DirectRecordReference.java:39)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.forReference(ConsistencyReporter.java:236)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.dispatchForReference(ConsistencyReporter.java:228)
    at org.neo4j.consistency.report.ConsistencyReporter$ReportInvocationHandler.invoke(ConsistencyReporter.java:192)
    at $Proxy17.forReference(Unknown Source)
    at org.neo4j.consistency.checking.OwnerChain.check(OwnerChain.java:143)
    at org.neo4j.consistency.checking.PropertyRecordCheck.checkChange(PropertyRecordCheck.java:57)
    at org.neo4j.consistency.checking.PropertyRecordCheck.checkChange(PropertyRecordCheck.java:35)
    at org.neo4j.consistency.report.ConsistencyReporter.dispatchChange(ConsistencyReporter.java:101)
    at org.neo4j.consistency.report.ConsistencyReporter.forPropertyChange(ConsistencyReporter.java:382)
    at org.neo4j.consistency.checking.incremental.StoreProcessor.checkProperty(StoreProcessor.java:61)
    at org.neo4j.consistency.checking.AbstractStoreProcessor.processProperty(AbstractStoreProcessor.java:95)
    at org.neo4j.consistency.store.DiffRecordStore$DispatchProcessor.processProperty(DiffRecordStore.java:207)
    at org.neo4j.kernel.impl.nioneo.store.PropertyStore.accept(PropertyStore.java:83)
    at org.neo4j.kernel.impl.nioneo.store.PropertyStore.accept(PropertyStore.java:43)
    at org.neo4j.consistency.store.DiffRecordStore.accept(DiffRecordStore.java:159)
    at org.neo4j.kernel.impl.nioneo.store.RecordStore$Processor.applyById(RecordStore.java:180)
    at org.neo4j.consistency.store.DiffStore.apply(DiffStore.java:73)
    at org.neo4j.kernel.impl.nioneo.store.StoreAccess.applyToAll(StoreAccess.java:174)
    at org.neo4j.consistency.checking.incremental.IncrementalDiffCheck.execute(IncrementalDiffCheck.java:43)
    at org.neo4j.consistency.checking.incremental.DiffCheck.check(DiffCheck.java:39)
    at org.neo4j.consistency.checking.incremental.intercept.CheckingTransactionInterceptor.complete(CheckingTransactionInterceptor.java:160)
    at org.neo4j.kernel.impl.transaction.xaframework.InterceptingXaLogicalLog$1.intercept(InterceptingXaLogicalLog.java:79)
    at org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog$LogDeserializer.readAndWriteAndApplyEntry(XaLogicalLog.java:1120)
    at org.neo4j.kernel.impl.transaction.xaframework.XaLogicalLog.applyTransaction(XaLogicalLog.java:1292)
    at org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.applyCommittedTransaction(XaResourceManager.java:766)
    at org.neo4j.kernel.impl.transaction.xaframework.XaDataSource.applyCommittedTransaction(XaDataSource.java:246)
    at org.neo4j.com.ServerUtil.applyReceivedTransactions(ServerUtil.java:423)
    at org.neo4j.backup.BackupService.unpackResponse(BackupService.java:453)
    at org.neo4j.backup.BackupService.incrementalWithContext(BackupService.java:388)
    at org.neo4j.backup.BackupService.doIncrementalBackup(BackupService.java:286)
    at org.neo4j.backup.BackupService.doIncrementalBackup(BackupService.java:273)
    at org.neo4j.backup.OnlineBackup.incremental(OnlineBackup.java:147)
    at Saddahaq.User_node$.backup_data(User_node.scala:1637)
    at Saddahaq.User_node$.main(User_node.scala:2461)
    at Saddahaq.User_node.main(User_node.scala)

请在构建GraphDatabase实例时,粘贴NPE的堆栈跟踪和您传递的配置设置列表。 - Stefan Armbruster
@StefanArmbruster已经编辑了带有堆栈跟踪的问题。 - yAsH
1个回答

2

备份完成后,检查备份目标的一致性。当前增量版本的一致性检查器存在一个导致观察到NPE的错误。

解决方法:要么始终使用backup.full进行完整备份,要么通过使用来防止在增量备份上进行一致性检查。

backup.incremental(backupPath.getPath(), false);

这适用于Neo4j企业版1.9.4。但是我在Neo4j企业版1.8.3中遇到了异常“Exception in thread "main" org.neo4j.com.ComException: Client could not connect to /127.0.0.1:6362”。 - yAsH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接