jakarta-oroを使ってオブジェクトキャッシュ
とりあえず永続化がらみから手を付けてみるか。
まずは構造から
org.apache.oro.util
Cache
↑
GenericCache
↑
CacheLRU
で、永続化を実装するのはGenericCacheのレイヤだからCacheから派生させて、PersistentGenericCache、さらにこれを派生させてPersistentCacheLRUか。
こういった中間層のすげ替えができないのがOOの面倒なとこだよなとか愚痴りつつさくっと実装。
良く考えたらエレメントがimmutableになってないとスレッドブロックが面倒なんじゃね?('A`)
とりあえず中見ながら考えるか。
Synchronizedブロックとか作るのやだなぁ('A`)
Synchronizeまわり
(´Д`) org.apache.oro.util.CacheLRU#getElementがsynchronizedになってる
おおざっぱすぎるううう。
これだと多重キャッシュにするとき泣くのが目にみえまくりんぐwwww
つーことでここもいじることにする。
って既に原型が無い件について。
CacheLRUまわり
永続キャッシュとメモリキャッシュのマウントをどうしたもんか。
基本はメモリキャッシュで、メモリキャッシュから回収されたオブジェクトを永続化して保存しとく線なんだけど、そうするとファイルキャッシュから取り出したオブジェクトのインデックスをメモリ上に展開しなきゃならんから起動時にフルスキャン?('A`)断る。
このへんがガンくせぇ
public synchronized Object getElement(Object key) { Object obj; obj = _table.get(key); if(obj != null) { GenericCacheEntry entry; entry = (GenericCacheEntry)obj; // Maintain LRU property __moveToFront(entry._index); return entry._value; } return null; }
if (obj!=null && obj instanceof GenericEntry)
あたりでお茶を濁すか。
なんか気持悪いなぁ。