目的
Coherenceのキャッシュからとれるオブジェクトが毎回異なることを検証する環境
先日作ったS2JDBCを使います。Coherence+S2JDBC CacheLoader,CacheStore編
・Java 6.0
・Seasar 2.4.43
・Coherence 3.6.1
・Eclipse Java EE IDE for Web Developers.Helios Service Release 1
検証用サンプルソース
package com.chirokings;まずは
import java.math.BigDecimal;
import com.chirokings.entity.Employee;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class CacheTest {
public static void main(String[] args) {
NamedCache cache = CacheFactory.getCache("VirtualCache");
String sourceKey = "key";
String someKey = "key";
Employee sourceValue = new Employee();
cache.put(sourceKey, sourceValue);
Employee value1 = (Employee) cache.get(sourceKey);
Employee value2 = (Employee) cache.get(someKey);
value1.age = new BigDecimal(27);
cache.put(sourceKey, value1);
value2 = (Employee) cache.get(someKey);
}
}
value1:putしたKeyと同じKeyを使用してget(18行目)
value2:putしたKeyと同じオブジェクトIDを持つ異なるKeyを使用してget(19行目)
この2つのケースではcache.getにわたるオブジェクトは同一になります。
単にオブジェクトを入れる箱の名前が異なるだけです。
この結果、putしたオブジェクトと得られた2つのオブジェクトの全てが異なるオブジェクトになっているのが分かります。
図1:19行目まで実行完了
オブジェクトが異なるので当然フィールドを変更しても他のオブジェクトに影響ありません。(21行目)
図2:21行目まで実行完了
変更したオブジェクトを一度キャッシュへputしてvalue2へ取得します。(23,24行目)
すると、またオブジェクトが異なることが分かります。
図3:24行目まで実行完了