diff --git a/src/main/java/com/avaje/ebeaninternal/server/cache/CachedBeanDataFromBean.java b/src/main/java/com/avaje/ebeaninternal/server/cache/CachedBeanDataFromBean.java index e21842c8f..bdade5923 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/cache/CachedBeanDataFromBean.java +++ b/src/main/java/com/avaje/ebeaninternal/server/cache/CachedBeanDataFromBean.java @@ -11,10 +11,10 @@ public class CachedBeanDataFromBean { public static CachedBeanData extract(BeanDescriptor desc, EntityBean bean) { EntityBeanIntercept ebi = bean._ebean_getIntercept(); - + Object[] data = new Object[desc.getPropertyCount()]; boolean[] loaded = new boolean[desc.getPropertyCount()]; - + BeanProperty idProperty = desc.getIdProperty(); if (idProperty != null) { int propertyIndex = idProperty.getPropertyIndex(); @@ -47,14 +47,14 @@ public class CachedBeanDataFromBean { } private static EntityBean createSharableBean(BeanDescriptor desc, EntityBean bean, EntityBeanIntercept beanEbi) { - + if (!desc.isCacheSharableBeans() || !beanEbi.isFullyLoadedBean()) { return null; } if (beanEbi.isReadOnly()) { return bean; - } - + } + // create a readOnly sharable instance by copying the data EntityBean sharableBean = desc.createEntityBean(); BeanProperty idProp = desc.getIdProperty(); diff --git a/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java b/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java index 822d477e5..56107ea15 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java +++ b/src/main/java/com/avaje/ebeaninternal/server/cache/CachedManyIds.java @@ -19,7 +19,7 @@ public class CachedManyIds { public String toString() { return idList.toString(); } - + public List getIdList() { return idList; } diff --git a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultCacheHolder.java b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultCacheHolder.java index e7f566375..742be5f8f 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultCacheHolder.java +++ b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultCacheHolder.java @@ -1,120 +1,117 @@ package com.avaje.ebeaninternal.server.cache; -import java.util.HashMap; -import java.util.concurrent.ConcurrentHashMap; - 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 java.util.HashMap; +import java.util.concurrent.ConcurrentHashMap; + /** * Manages the construction of caches. */ public class DefaultCacheHolder { - private final ConcurrentHashMap concMap = new ConcurrentHashMap(); + private final ConcurrentHashMap concMap = new ConcurrentHashMap(); - private final HashMap synchMap = new HashMap(); + private final HashMap synchMap = new HashMap(); - private final Object monitor = new Object(); + private final Object monitor = new Object(); - private final ServerCacheFactory cacheFactory; + private final ServerCacheFactory cacheFactory; - private final ServerCacheOptions defaultOptions; + private final ServerCacheOptions defaultOptions; - private final boolean useBeanTuning; + private final boolean useBeanTuning; - /** - * Create with a cache factory and default cache options. - * - * @param cacheFactory - * the factory for creating the cache - * @param defaultOptions - * the default options for tuning the cache - * @param useBeanTuning - * if true then use the bean class specific tuning. This is - * generally false for the query cache. - */ - public DefaultCacheHolder(ServerCacheFactory cacheFactory, - ServerCacheOptions defaultOptions, boolean useBeanTuning) { + /** + * Create with a cache factory and default cache options. + * + * @param cacheFactory the factory for creating the cache + * @param defaultOptions the default options for tuning the cache + * @param useBeanTuning if true then use the bean class specific tuning. This is + * generally false for the query cache. + */ + public DefaultCacheHolder(ServerCacheFactory cacheFactory, + ServerCacheOptions defaultOptions, boolean useBeanTuning) { - this.cacheFactory = cacheFactory; - this.defaultOptions = defaultOptions; - this.useBeanTuning = useBeanTuning; - } + this.cacheFactory = cacheFactory; + this.defaultOptions = defaultOptions; + this.useBeanTuning = useBeanTuning; + } - /** - * Return the default cache options. - */ - public ServerCacheOptions getDefaultOptions() { - return defaultOptions; - } + /** + * Return the default cache options. + */ + public ServerCacheOptions getDefaultOptions() { + return defaultOptions; + } - /** - * Return the cache for a given bean type. - */ - public ServerCache getCache(String cacheKey) { + /** + * Return the cache for a given bean type. + */ + public ServerCache getCache(String cacheKey) { - ServerCache cache = concMap.get(cacheKey); - if (cache != null) { - return cache; - } - synchronized (monitor) { - cache = synchMap.get(cacheKey); - if (cache == null) { - ServerCacheOptions options = getCacheOptions(cacheKey); - cache = cacheFactory.createCache(cacheKey, options); - synchMap.put(cacheKey, cache); - concMap.put(cacheKey, cache); - } - return cache; - } - } + ServerCache cache = concMap.get(cacheKey); + if (cache != null) { + return cache; + } + synchronized (monitor) { + cache = synchMap.get(cacheKey); + if (cache == null) { + ServerCacheOptions options = getCacheOptions(cacheKey); + cache = cacheFactory.createCache(cacheKey, options); + synchMap.put(cacheKey, cache); + concMap.put(cacheKey, cache); + } + return cache; + } + } - public void clearCache(String cacheKey) { + public void clearCache(String cacheKey) { - ServerCache cache = concMap.get(cacheKey); - if (cache != null) { - cache.clear(); - } - } - - /** - * Return true if there is an active cache for this bean type. - */ - public boolean isCaching(String beanType) { - return concMap.containsKey(beanType); - } + ServerCache cache = concMap.get(cacheKey); + if (cache != null) { + cache.clear(); + } + } - public void clearAll() { - for (ServerCache serverCache : concMap.values()) { - serverCache.clear(); - } - } + /** + * Return true if there is an active cache for this bean type. + */ + public boolean isCaching(String beanType) { + return concMap.containsKey(beanType); + } - /** - * Return the cache options for a given bean type. - */ - private ServerCacheOptions getCacheOptions(String beanType) { + public void clearAll() { + for (ServerCache serverCache : concMap.values()) { + serverCache.clear(); + } + } - if (useBeanTuning) { - // read the deployment annotation - try { - Class cls = Class.forName(beanType); - CacheTuning cacheTuning = cls.getAnnotation(CacheTuning.class); - if (cacheTuning != null) { - ServerCacheOptions o = new ServerCacheOptions(cacheTuning); - o.applyDefaults(defaultOptions); - return o; - } - } catch (ClassNotFoundException e){ - // ignore - } - } + /** + * Return the cache options for a given bean type. + */ + private ServerCacheOptions getCacheOptions(String beanType) { - return defaultOptions.copy(); + if (useBeanTuning) { + // read the deployment annotation + try { + Class cls = Class.forName(beanType); + CacheTuning cacheTuning = cls.getAnnotation(CacheTuning.class); + if (cacheTuning != null) { + ServerCacheOptions o = new ServerCacheOptions(cacheTuning); + o.applyDefaults(defaultOptions); + return o; + } + } catch (ClassNotFoundException e) { + // ignore + } + } - } + return defaultOptions.copy(); + + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java index c75d63f03..31143aecd 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java +++ b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCache.java @@ -10,7 +10,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCacheFactory.java b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCacheFactory.java index db68b1ec8..49b933c6b 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCacheFactory.java +++ b/src/main/java/com/avaje/ebeaninternal/server/cache/DefaultServerCacheFactory.java @@ -11,17 +11,17 @@ import com.avaje.ebean.cache.ServerCacheOptions; */ public class DefaultServerCacheFactory implements ServerCacheFactory { - private EbeanServer ebeanServer; - - public void init(EbeanServer ebeanServer){ - this.ebeanServer = ebeanServer; - } - - public ServerCache createCache(String cacheKey, ServerCacheOptions cacheOptions) { - - ServerCache cache = new DefaultServerCache(cacheKey, cacheOptions); - cache.init(ebeanServer); - return cache; - } - + private EbeanServer ebeanServer; + + public void init(EbeanServer ebeanServer) { + this.ebeanServer = ebeanServer; + } + + public ServerCache createCache(String cacheKey, ServerCacheOptions cacheOptions) { + + ServerCache cache = new DefaultServerCache(cacheKey, cacheOptions); + cache.init(ebeanServer); + return cache; + } + }