Monthly Archives: 9月 2012

Play 2.0 の Cache API が使うに耐えない

Play 2.0(厳密にはこの記事の執筆時の最新 2.0.3)の Cache API はほんとうに使うに耐えません(Scala での話。Java ではどうだか試してません)。Ehcache を直で扱ったほうがよっぽどよさそうです。

1. キャッシュを削除できない。

キャッシュってそんなに任意で消すようなものでもないと思いますが、それにしても任意に消せないのはどうも不便です。ちなみに以下のようなコードがキャッシュを消すコードとして一部で出回っていますがデタラメです。null 値が永遠にキャッシュされるだけです。

Cache.set("YourCacheKey", null, 0)

2. キャッシュの寿命のデフォルト値を制御できない。

現在の実装では、キャッシュの寿命を指定しないと 0 を指定したことになります。0 を指定すると永遠にキャッシュするという意味になります。設定ファイルなどで調整できません。

3. null 値をキャッシュできない(取り出せない)。

null をキャッシュする意味があるのかというと、たまにあります。非常に長い処理の結果が null だったりしたら null も重要な情報のひとつです。Scala なら None 使えよって話もありますが。

それで、null 値をキャッシュに入れることはできるのです。ところが取り出そうとすると NullPointerException で落ちます。なので、前述のデタラメキャッシュ削除コードを使っていたりすると潜在バグの温床になります。NullPointerException が出ること自体 Play のバグのような気もしますが……。