JPAのキャッシュでハマる
JPAのキャッシュでハマりました。
仕組みをちゃんと理解していないからだね。
現象
- Webアプリケーションでデータ参照
- 別処理で該当データ削除
- Webアプリケーションで再度同一データ参照
- データがないはずなのに参照できる
キャッシュと考えれば、当たり前ですな。
原因
- JPA(EclipseLink)ではL1キャッシュ、L2キャッシュというものがあり、これがデフォルトで有効だから。
- L1キャッシュは同一スレッド内キャッシュだそうです
- L2キャッシュは同一JVM内キャッシュだそうです
環境
- JavaEE7
- JPA
- EclipseLink
- JPA
対策
パフォーマンス上どうなんだ、って話はありますがキャッシュを無効化しました。
- デフォルト無効で、Entityにアノテーションでキャッシュ化とかはできそうです。
- 参照マスタはキャッシュとか?
- デフォルト無効で、Entityにアノテーションでキャッシュ化とかはできそうです。
persistance.xml
<persistence ..> <persistance-unit ...> ...いろいろ設定 <shared-cache-mode>NONE</shared-cache-mode> <=追加
参考URL
新品価格 |