#637 - Change SPI for ServerCache, add ServerCacheType to allow different cache construction for query bean and bean cache

This commit is contained in:
Robin Bygrave
2016-04-06 21:38:54 +12:00
parent 7b4d6f2d17
commit 7c11acaf89
5 changed files with 30 additions and 25 deletions
@@ -21,6 +21,6 @@ public interface ServerCacheFactory {
/**
* Create the cache for the given type with options.
*/
ServerCache createCache(String cacheKey, ServerCacheOptions cacheOptions);
ServerCache createCache(ServerCacheType type, String cacheKey, ServerCacheOptions cacheOptions);
}
@@ -1,17 +1,18 @@
package com.avaje.ebeaninternal.server.cache;
import java.io.Serializable;
import java.util.Arrays;
/**
* Data held in the bean cache for cached beans.
*/
public class CachedBeanData {
public class CachedBeanData implements Serializable {
private final long whenCreated;
private final Object sharableBean;
private final boolean[] loaded;
private final Object[] data;
private final boolean naturalKeyUpdate;
private final Object naturalKey;
private final Object oldNaturalKey;
@@ -29,7 +30,7 @@ public class CachedBeanData {
public String toString() {
return Arrays.toString(data);
}
/**
* Return a copy of the property data.
*/
@@ -48,6 +49,20 @@ public class CachedBeanData {
return dest;
}
/**
* Return the loaded status for each property.
*/
public boolean[] getLoaded() {
return loaded;
}
/**
* Return the property values.
*/
public Object[] getData() {
return data;
}
/**
* Return when the cached data was created.
*/
@@ -75,7 +90,7 @@ public class CachedBeanData {
public Object getNaturalKey() {
return naturalKey;
}
/**
* Return the old natural key (its entry should be removed).
*/
@@ -4,6 +4,7 @@ import com.avaje.ebean.annotation.CacheTuning;
import com.avaje.ebean.cache.ServerCache;
import com.avaje.ebean.cache.ServerCacheFactory;
import com.avaje.ebean.cache.ServerCacheOptions;
import com.avaje.ebean.cache.ServerCacheType;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
@@ -51,7 +52,7 @@ public class DefaultCacheHolder {
/**
* Return the cache for a given bean type.
*/
public ServerCache getCache(String cacheKey) {
public ServerCache getCache(String cacheKey, ServerCacheType type) {
ServerCache cache = concMap.get(cacheKey);
if (cache != null) {
@@ -61,7 +62,7 @@ public class DefaultCacheHolder {
cache = synchMap.get(cacheKey);
if (cache == null) {
ServerCacheOptions options = getCacheOptions(cacheKey);
cache = cacheFactory.createCache(cacheKey, options);
cache = cacheFactory.createCache(type, cacheKey, options);
synchMap.put(cacheKey, cache);
concMap.put(cacheKey, cache);
}
@@ -4,6 +4,7 @@ import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.cache.ServerCache;
import com.avaje.ebean.cache.ServerCacheFactory;
import com.avaje.ebean.cache.ServerCacheOptions;
import com.avaje.ebean.cache.ServerCacheType;
/**
@@ -17,7 +18,7 @@ public class DefaultServerCacheFactory implements ServerCacheFactory {
this.ebeanServer = ebeanServer;
}
public ServerCache createCache(String cacheKey, ServerCacheOptions cacheOptions) {
public ServerCache createCache(ServerCacheType type, String cacheKey, ServerCacheOptions cacheOptions) {
ServerCache cache = new DefaultServerCache(cacheKey, cacheOptions);
cache.init(ebeanServer);
@@ -5,6 +5,7 @@ import com.avaje.ebean.cache.ServerCache;
import com.avaje.ebean.cache.ServerCacheFactory;
import com.avaje.ebean.cache.ServerCacheManager;
import com.avaje.ebean.cache.ServerCacheOptions;
import com.avaje.ebean.cache.ServerCacheType;
import com.avaje.ebeaninternal.api.SpiEbeanServer;
@@ -70,33 +71,25 @@ public class DefaultServerCacheManager implements ServerCacheManager {
public ServerCache getCollectionIdsCache(Class<?> beanType, String propertyName) {
return collectionIdsCache.getCache(beanType.getName() + "." + propertyName);
}
public boolean isCollectionIdsCaching(Class<?> beanType) {
return collectionIdsCache.isCaching(beanType.getName());
return collectionIdsCache.getCache(beanType.getName() + "." + propertyName, ServerCacheType.COLLECTION_IDS);
}
public ServerCache getNaturalKeyCache(Class<?> beanType) {
return naturalKeyCache.getCache(beanType.getName());
}
public boolean isNaturalKeyCaching(Class<?> beanType) {
return naturalKeyCache.isCaching(beanType.getName());
return naturalKeyCache.getCache(beanType.getName(), ServerCacheType.NATURAL_KEY);
}
/**
* Return the query cache for a given bean type.
*/
public ServerCache getQueryCache(Class<?> beanType) {
return queryCache.getCache(beanType.getName());
return queryCache.getCache(beanType.getName(), ServerCacheType.QUERY);
}
/**
* Return the bean cache for a given bean type.
*/
public ServerCache getBeanCache(Class<?> beanType) {
return beanCache.getCache(beanType.getName());
return beanCache.getCache(beanType.getName(), ServerCacheType.BEAN);
}
/**
@@ -107,9 +100,4 @@ public class DefaultServerCacheManager implements ServerCacheManager {
}
public boolean isQueryCaching(Class<?> beanType) {
return queryCache.isCaching(beanType.getName());
}
}