* Cache data must be independent of any objects available to used,
* otherwise modification of user objects outside transaction will
* damage cache data
*/
public void testCacheIndependence() throws Throwable {
Transaction tx = null;
Collection addresses = this.getAddresses();
deleteAddresses(addresses);
Identity oid;
Address address = new Address("oldCountry", "oldCity", "oldStreet");
try {
tx = _kit.getTransaction(_conn);
tx.begin();
_conn.makePersistent(address);
oid = _conn.getIdentity(address);
tx.commit();
address.setStreet("newStreet");
tx = _kit.getTransaction(_conn);
tx.begin();
address = (Address) _conn.getObjectByIdentity(oid);
assertEquals("Cache was damaged.", "oldStreet", address.getStreet());
tx.commit();
address.setStreet("newStreet");
tx = _kit.getTransaction(_conn);
tx.begin();
address = (Address) _conn.getObjectByIdentity(oid, LockType.WRITE_LOCK);
assertEquals("Cache was damaged.", "oldStreet", address.getStreet());
tx.commit();
address.setStreet("newStreet");
tx = _kit.getTransaction(_conn);
tx.begin();
address = (Address) _conn.getObjectByIdentity(oid);
assertEquals("Cache was damaged.", "oldStreet", address.getStreet());
tx.commit();
} catch (Throwable e) {
if (tx != null) {
try {
tx.rollback();
} catch (Throwable ex) {
ex.printStackTrace();
}
}
throw e;