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)
あたりでお茶を濁すか。
なんか気持悪いなぁ。

いろいろ台無し。

_| ̄|○ l|l
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/LinkedHashMap.html

うがー。