WIP update/refactoring on caching

This commit is contained in:
Rob Bygrave
2014-04-24 01:57:52 +12:00
parent 2dccb818a2
commit 4c4e084e43
25 changed files with 728 additions and 460 deletions
@@ -19,7 +19,7 @@ import com.avaje.tests.model.basic.Customer.Status;
public class TestCacheBeanData extends BaseTestCase {
@Test
public void test() {
public void testCacheBeanExtractAndLoad() {
SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null);
BeanDescriptor<Customer> desc = server.getBeanDescriptor(Customer.class);
@@ -42,8 +42,7 @@ public class TestCacheBeanData extends BaseTestCase {
((EntityBean)c)._ebean_getIntercept().setNewBeanForUpdate();
CachedBeanData cacheData = CachedBeanDataFromBean.extract(desc, (EntityBean)c);
//BeanProperty idProperty = desc.getBeanProperty("id");
//Assert.assertTrue(cacheData.isLoaded(idProperty.getPropertyIndex()));
Assert.assertNotNull(cacheData);
@@ -54,6 +53,19 @@ public class TestCacheBeanData extends BaseTestCase {
Assert.assertEquals(c.getId(), newCustomer.getId());
Assert.assertEquals(c.getName(), newCustomer.getName());
Assert.assertEquals(c.getStatus(), newCustomer.getStatus());
Assert.assertEquals(c.getSmallnote(), newCustomer.getSmallnote());
Assert.assertEquals(c.getCretime(), newCustomer.getCretime());
Assert.assertEquals(c.getUpdtime(), newCustomer.getUpdtime());
Assert.assertEquals(c.getBillingAddress().getId(), newCustomer.getBillingAddress().getId());
Assert.assertNotNull(newCustomer.getId());
Assert.assertNotNull(newCustomer.getName());
Assert.assertNotNull(newCustomer.getStatus());
Assert.assertNotNull(newCustomer.getSmallnote());
Assert.assertNotNull(newCustomer.getCretime());
Assert.assertNotNull(newCustomer.getUpdtime());
Assert.assertNotNull(newCustomer.getBillingAddress());
Assert.assertNotNull(newCustomer.getBillingAddress().getId());
}
}
@@ -22,7 +22,7 @@ public class TestDeleteByIdList extends BaseTestCase {
OrderDetail dummy = Ebean.getReference(OrderDetail.class, 1);
SpiEbeanServer server = (SpiEbeanServer) Ebean.getServer(null);
server.getBeanDescriptor(OrderDetail.class).cachePutBean(dummy);
server.getBeanDescriptor(OrderDetail.class).cacheBeanPut(dummy);
Customer c0 = ResetBasicData.createCustAndOrder("DelIdList-0");
Assert.assertNotNull(c0);
@@ -22,7 +22,7 @@ public class TestDeleteCascadeById extends BaseTestCase {
OrderDetail dummy = Ebean.getReference(OrderDetail.class, 1);
SpiEbeanServer server = (SpiEbeanServer) Ebean.getServer(null);
server.getBeanDescriptor(OrderDetail.class).cachePutBean(dummy);
server.getBeanDescriptor(OrderDetail.class).cacheBeanPut(dummy);
Customer cust = ResetBasicData.createCustAndOrder("DelCas");
Assert.assertNotNull(cust);
@@ -2,29 +2,35 @@ package com.avaje.tests.cache;
import java.util.List;
import com.avaje.ebeaninternal.server.cache.CachedManyIds;
import com.avaje.tests.model.basic.*;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.cache.ServerCache;
import com.avaje.ebean.cache.ServerCacheManager;
import com.avaje.ebeaninternal.server.cache.CachedManyIds;
import com.avaje.tests.model.basic.Contact;
import com.avaje.tests.model.basic.Country;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.OCachedBean;
import com.avaje.tests.model.basic.ResetBasicData;
public class TestCacheCollectionIds extends BaseTestCase {
ServerCacheManager cacheManager = Ebean.getServerCacheManager();
@Test
public void test() {
ResetBasicData.reset();
ServerCache custCache = Ebean.getServerCacheManager().getBeanCache(Customer.class);
ServerCache contactCache = Ebean.getServerCacheManager().getBeanCache(Contact.class);
ServerCache custManyIdsCache = Ebean.getServerCacheManager().getCollectionIdsCache(
Customer.class, "contacts");
ServerCache custCache = cacheManager.getBeanCache(Customer.class);
ServerCache contactCache = cacheManager.getBeanCache(Contact.class);
ServerCache custManyIdsCache = cacheManager.getCollectionIdsCache(Customer.class, "contacts");
// Ebean.getServerCacheManager().setCaching(Customer.class, true);
// Ebean.getServerCacheManager().setCaching(Contact.class, true);
// cacheManager.setCaching(Customer.class, true);
// cacheManager.setCaching(Contact.class, true);
custCache.clear();
custManyIdsCache.clear();
@@ -94,21 +100,21 @@ public class TestCacheCollectionIds extends BaseTestCase {
// arrange
ResetBasicData.reset();
CachedBean cachedBean = new CachedBean();
OCachedBean cachedBean = new OCachedBean();
cachedBean.getCountries().add(Ebean.find(Country.class, "NZ"));
cachedBean.getCountries().add(Ebean.find(Country.class, "AU"));
Ebean.save(cachedBean);
// act
CachedBean loadedBean = Ebean.find(CachedBean.class, cachedBean.getId());
OCachedBean loadedBean = Ebean.find(OCachedBean.class, cachedBean.getId());
loadedBean.getCountries().clear();
loadedBean.getCountries().add(Ebean.find(Country.class, "AU"));
Ebean.save(cachedBean);
CachedBean result = Ebean.find(CachedBean.class, cachedBean.getId());
ServerCache cachedBeanCountriesCache = Ebean.getServerCacheManager().getCollectionIdsCache(CachedBean.class, "countries");
OCachedBean result = Ebean.find(OCachedBean.class, cachedBean.getId());
ServerCache cachedBeanCountriesCache = cacheManager.getCollectionIdsCache(OCachedBean.class, "countries");
CachedManyIds cachedManyIds = (CachedManyIds) cachedBeanCountriesCache.get(result.getId());
@@ -127,21 +133,44 @@ public class TestCacheCollectionIds extends BaseTestCase {
// arrange
ResetBasicData.reset();
CachedBean cachedBean = new CachedBean();
OCachedBean cachedBean = new OCachedBean();
cachedBean.setName("cachedBeanTest");
cachedBean.getCountries().add(Ebean.find(Country.class, "NZ"));
cachedBean.getCountries().add(Ebean.find(Country.class, "AU"));
Ebean.save(cachedBean);
// act
CachedBean update = new CachedBean();
// clear the cache
ServerCache cachedBeanCountriesCache = cacheManager.getCollectionIdsCache(OCachedBean.class, "countries");
cachedBeanCountriesCache.clear();
Assert.assertEquals(0, cachedBeanCountriesCache.size());
// load the cache
OCachedBean dummyLoad = Ebean.find(OCachedBean.class, cachedBean.getId());
List<Country> dummyCountries = dummyLoad.getCountries();
Assert.assertEquals(2, dummyCountries.size());
// assert that the cache contains the expected entry
Assert.assertEquals("countries cache now loaded with 1 entry", 1, cachedBeanCountriesCache.size());
CachedManyIds dummyEntry = (CachedManyIds) cachedBeanCountriesCache.get(dummyLoad.getId());
Assert.assertNotNull(dummyEntry);
Assert.assertEquals("2 ids in the entry", 2, dummyEntry.getIdList().size());
Assert.assertTrue(dummyEntry.getIdList().contains("NZ"));
Assert.assertTrue(dummyEntry.getIdList().contains("AU"));
// act - this should invalidate our cache entry
OCachedBean update = new OCachedBean();
update.setId(cachedBean.getId());
update.setName("modified");
update.getCountries().add(Ebean.find(Country.class, "AU"));
Ebean.update(cachedBean);
Ebean.update(update);
Assert.assertEquals("countries entry was invalidated", 0, cachedBeanCountriesCache.size());
CachedBean result = Ebean.find(CachedBean.class, cachedBean.getId());
ServerCache cachedBeanCountriesCache = Ebean.getServerCacheManager().getCollectionIdsCache(CachedBean.class, "countries");
OCachedBean result = Ebean.find(OCachedBean.class, cachedBean.getId());
CachedManyIds cachedManyIds = (CachedManyIds) cachedBeanCountriesCache.get(result.getId());
@@ -1,14 +1,14 @@
package com.avaje.tests.model.basic;
import com.avaje.ebean.annotation.CacheStrategy;
import com.avaje.ebean.annotation.CacheTuning;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import java.util.ArrayList;
import java.util.List;
import com.avaje.ebean.annotation.CacheStrategy;
/**
* Cached bean for testing caching implementation.
@@ -16,11 +16,13 @@ import java.util.List;
@CacheStrategy
@Entity
@Table(name = "o_cached_bean")
public class CachedBean {
public class OCachedBean {
@Id
Long id;
String name;
@ManyToMany
List<Country> countries = new ArrayList<Country>();
@@ -32,6 +34,14 @@ public class CachedBean {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Country> getCountries() {
return countries;
}