2016-05-05 14 views
0

CSVファイルからクリーンなデータベースにいくつかのデータをロードしようとしています。私はApache Camelを使用してETLプロセスを作成し、入力CSVを読み込んでファイルを複数の行に分割し、行ごとに1つのトランザクションを使用して並列に各行を処理します。TransactionManagerException:このスレッドのトランザクションは現在ありません

クラスImportRouteBuilderは、それが非常にあるので、私のモデルはまだ進化している間、LOADのCSVのサイファーかのNeo4jのインポートツールを使用していたしませんでしたので、私はこれをした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() 
    } 

を拡張しますプロトタイプ作成中にOGMを使用すると便利です。しかし今、私はOGMがこれを生成するプロセスの途中で壁を発見しましたTransactionManagerException、トランザクションを管理するいくつかのスレッド問題のように見えます。 org.neo4j.ogm.exception.TransactionManagerException:によって引き起こさ :com.cartrawler.service.CountryImportSpecification.Shouldで

は、国のcsv(9 CountryImportSpecification.groovy)をインポートすることができ、トランザクションは、このスレッドの現在のではありませんorg.neo4j.ogm.transaction.AbstractTransaction.rollbackでorg.neo4j.ogm.session.transaction.DefaultTransactionManager.rollback(DefaultTransactionManager.java:78) (AbstractTransaction.java:65)org.neo4jで で 。 ogm.drivers.embeddedtransaction.EmbeddedTransaction.rollback(EmbeddedTransaction.java:60) at com.cartrawler.service.CountryCsvImporter.process(CountryCsvImpo rter.groovy:28)

は、トランザクションが単一のスレッドのみであると親切 ルイスオスカー

+0

質問の書式を2回修正しましたが、読みやすくするために書式を修正するようにしましたが、変更は続けています。自分で修正したい場合は、コードやスタックトレースを[インデントする方法](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)をご覧ください。 – cybersam

答えて

1
は、並列処理をオフにし

、ありがとうございます。

+0

ありがとうございました。 –

+0

こんにちはクラウス、私はバネのデータに移動し、輸入業者がsedaのキューから走っているときにインポートを並行して処理することができました。 –

+0

@ClausIbsenこれは、データベースへの同時アクセスが不可能であることを意味しますか?どのように並列処理をオフにする? – Polyakoff

関連する問題