[Seasar-user:21307] Re: [s2csv]同じCSVEntityを用いるCSVファイルをマルチスレッドで読み込むとバリデーションエラーとなる

newta [E-MAIL ADDRESS DELETED]
2012年 3月 30日 (金) 19:57:24 JST


お世話になります。
newtaです。

CSVDescPoolImplのメタデータのキャッシュで
cacheにHashMapを使ってるのが問題に見えますね。。

同期したMapを使おうと思います。

直近の対応としてはCSVDescPoolを継承したクラスを作ってもらって、
cacheにMapUtil.createHashMapで同期されたHashMapを生成するか
ConcurrentHashMapなどを使ってもらうかして、
diconで作成したクラスを指定して、利用してもらえればと思います。



2012年3月30日16:45 大塚 <[E-MAIL ADDRESS DELETED]>:
> seasar-userの皆様。
> お世話になります。大塚です。
>
> s2csvを利用させていただき、利便性の高さに感謝しております。
>
> 同ライブラリを用いて複数のCSVファイルをマルチスレッドに読み込んだところ、
> 以下の様に一定の頻度でバリデーションエラーとなるケースが発生したため報告いたします。
>
> 環境
> OS:Windows7 64bit
> JDK:1.6.0_25
> JAR:s2-framework-2.4.45.jar、s2csv-0.0.2-sp1.jar
>
> 前提
>  書式が同一のCSVファイル(10行程度)*15ファイル。
>  同一のCSVEntityを使用。
>  スレッド数は2ないし3でほぼ同時に起動。
>
> 現象
>  本来はエラーとならない行(カラム)で、一定の頻度(200回中18回)でバリデーションエラーとなる。
>
> その他
>  s2csv.diconにて、org.seasar.s2csv.csv.desc.impl.CSVDescPoolImplを
>  singletonからprototypeとしたところ発生しなくなりました。(0/200)
>  また、シングルスレッドで実行した場合も発生しない様です。
>
> 再現させるためのミニマムコードがすぐには示せないのが申し訳ないですが、取り急ぎご報告まで。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user


Seasar-user メーリングリストの案内