cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Jarrel <garyjar...@gmail.com>
Subject Further on Cache Groups
Date Mon, 31 May 2010 02:44:06 GMT
Hi All!

Another interesting thing that I have just come across in relation to
cache grouping and to continue on Bob's thread "Removing Cayenne cache
groups" I have the following two test cases.

@SuppressWarnings("unchecked")
public void testBasicSelectQueryWithoutDaoWithSharedCache() {
    QueryCache domainCache = getSharedCache();
    QueryCache contextCache = getLocalCache();

    // this is one in the shared cache
    assertEquals(0, domainCache.size());

    // this is 0 in the local cache
    assertEquals(0, contextCache.size());

    SelectQuery q = new SelectQuery(Admin.class);
    q.setCacheGroups("testGroup");
    q.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);

    List<Admin> result = getDataContext().performQuery(q);
    assertEquals(2, result.size());

    // this is one in the shared cache
    assertEquals(1, domainCache.size());

    // this is 0 in the local cache
    assertEquals(0, contextCache.size());
}

@SuppressWarnings("unchecked")
public void testBasicSelectQueryWithoutDaoWithLocalCache() {
    QueryCache domainCache = getSharedCache();
    QueryCache contextCache = getLocalCache();

    // this is one in the shared cache
    assertEquals(0, domainCache.size());

    // this is 0 in the local cache
    assertEquals(0, contextCache.size());

    SelectQuery q = new SelectQuery(Admin.class);
    q.setCacheGroups("testGroup");
    q.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);

    List<Admin> result = getDataContext().performQuery(q);
    assertEquals(2, result.size());

    // this is one in the shared cache
    assertEquals(0, domainCache.size());

    // this is 0 in the local cache
    assertEquals(1, contextCache.size());
}

and the following initialization method that runs before each test case.

private void initCache() {
    DataContext context = (DataContext) getDataContext();
    DataDomain domain = context.getParentDataDomain();

    domain.setQueryCacheFactory(new OSQueryCacheFactory());
    domain.setSharedCacheEnabled(true);
    this.osCache = true;

    QueryCache localCache = getLocalCache();
    QueryCache sharedCache = getSharedCache();

    sharedCache.clear();
    localCache.clear();

    sharedCache.removeGroup("testGroup");
    localCache.removeGroup("testGroup");

    if (osCache) {
        OSQueryCache sharedOSCache = (OSQueryCache) sharedCache;
        sharedOSCache.getOsCache().removeEntry("testGroup");
        //sharedOSCache.getOsCache().removeEntry("Admin");
    }
}

When run one by one the test cases succeed fine. However when run all
together the second test case fails on the following line at the very
start:

// this is one in the shared cache
assertEquals(0, domainCache.size());

This will happen if I keep the last line of the init method commented
out which is:

sharedOSCache.getOsCache().removeEntry("Admin");

As soon as the line is uncommented then everything runs fine. This is
despite the fact that I am removing my testGroup before each test
case.

Any thoughts?

Thank you

Gary

Mime
View raw message