J2EE アプリケーションにキャッシング層を作成しました。この例では、Ehcache を使用します。これにより、いくつかの課題が生じました。
この例を見てみましょう。
OrderItem orderitem = cache.getOrderItemByID("id");
OrderItem old_orderitem = cache.getOrderItemID("id");
orderitem.setStatus(1);
old_orderitem.setStatus(2);
注意しないと、これらのオブジェクトのいずれかに変更を加えると、他のオブジェクトに影響を与えます (同じオブジェクトを参照します)。orderitem をデータベースに保存すると、status=2 になります。
これをどのように解決するのが最善でしょうか?
各オブジェクトに .copyObject() メソッドを作成してみました。新しいオブジェクトを作成し、すべての値を設定するだけです。しかし、これは良い解決策とは思えません。
この例は、単に説明するためのものです。コードはそれよりもはるかに複雑ですが、結果は同じです。
**********************2010年7月15日更新************************ **************************
EHCache 2 には、copyRead() と copyWrite() を有効にするオプションがいくつかあります。そして、これは私の問題をすべて解決します:)