TransactionManagerException:此线程的事务不是最新的

时间:2016-05-05 21:21:34

标签: neo4j apache-camel neo4j-ogm

我正在尝试将CS​​V文件中的一些数据加载到干净的数据库实例中。我通过使用Apache Camel创建ETL过程来完成此操作,它读取输入CSV将文件拆分为多行并使用每行一个事务并行处理每一行。

类ImportRouteBuilder扩展了RouteBuilder {

private final Importer importer
private final String endpoint

public ImportRouteBuilder(Importer importer, String endpoint) {
    this.endpoint = endpoint
    this.importer = importer
}

@Override
void configure() throws Exception {
    from(endpoint)
            .unmarshal(buildCsvDataFormat())
            .split(body())
            .parallelProcessing()
            .bean(importer)
}

private static CsvDataFormat buildCsvDataFormat() {
    CsvDataFormat csv = new CsvDataFormat();
    csv.skipHeaderRecord = true
    csv
}

}

@Slf4j
@Service
class CountryCsvImporter implements Importer {
   @Autowired
   private CountryRepository countryRepository

   @Autowired
   private Session session

   @Override
   void process(List record) {
       Transaction tx = session.beginTransaction();
       try {
          importCountry(record)
          tx.commit()
       }catch (Throwable t) {
          tx.rollback()
     }
     tx.close()
    }

我之所以这样做,是因为在我的模型仍在不断发展时不想使用LOAD CSV cypher或Neo4j导入工具,因为在原型设计时使用OGM非常方便。但是现在我在流程的中间找到了一个墙,OGM生成了这个 TransactionManagerException ,看起来这是管理事务的一些线程问题。

在com.cartrawler.service.CountryImportSpecification.Should能够导入国家csv(CountryImportSpecification.groovy:9) 引起: org.neo4j.ogm.exception.TransactionManagerException:此线程的交易不是最新的 at org.neo4j.ogm.session.transaction.DefaultTransactionManager.rollback(DefaultTransactionManager.java:78) 在org.neo4j.ogm.transaction.AbstractTransaction.rollback(AbstractTransaction.java:65) at org.neo4j.ogm.drivers.embedded.transaction.EmbeddedTransaction.rollback(EmbeddedTransaction.java:60) 在com.cartrawler.service.CountryCsvImporter.process(CountryCsvImporter.groovy:28)

谢天谢地,谢天谢地   路易斯奥斯卡

1 个答案:

答案 0 :(得分:1)

关闭并行处理,因为事务只是单线程。