From da90eccc1213f61fb58009a32432dffb70e5bf3a Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Fri, 8 Apr 2016 02:03:02 +1200 Subject: [PATCH] #638 - ENH: Add Apache Ignite as L2 cache option --- src/main/java/com/avaje/ebean/plugin/SpiServer.java | 5 +++++ .../ebeaninternal/server/core/DefaultServer.java | 10 ++++++++++ .../ebeaninternal/server/deploy/BeanDescriptor.java | 4 ++++ .../server/deploy/BeanDescriptorCacheHelp.java | 13 ++++++++++++- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/avaje/ebean/plugin/SpiServer.java b/src/main/java/com/avaje/ebean/plugin/SpiServer.java index 73dcacecb..4c72f2a1f 100644 --- a/src/main/java/com/avaje/ebean/plugin/SpiServer.java +++ b/src/main/java/com/avaje/ebean/plugin/SpiServer.java @@ -46,4 +46,9 @@ public interface SpiServer extends EbeanServer { * Return the associated DataSource for this EbeanServer instance. */ DataSource getDataSource(); + + /** + * Initialise the query cache for the given bean type. + */ + boolean initQueryCache(String key); } diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java index eea93d587..cfb4220b5 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java @@ -2030,6 +2030,16 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { return beanDescriptorManager.getBeanDescriptorByClassName(beanClassName); } + @Override + public boolean initQueryCache(String key) { + BeanDescriptor desc = getBeanDescriptorById(key); + if (desc != null) { + desc.queryCacheInit(); + return true; + } + return false; + } + /** * Another server in the cluster sent this event so that we can inform local * BeanListeners of inserts updates and deletes that occurred remotely (on diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java index 485b6b234..6f281053a 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java @@ -1075,6 +1075,10 @@ public class BeanDescriptor implements MetaBeanInfo, BeanType { return cacheHelp.isCacheNotify(); } + public void queryCacheInit() { + cacheHelp.queryCacheInit(); + } + /** * Clear the query cache. */ diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java index 73d3fe4c5..35d853351 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorCacheHelp.java @@ -59,7 +59,7 @@ public final class BeanDescriptorCacheHelp { private ServerCache beanCache; private ServerCache naturalKeyCache; - private ServerCache queryCache; + private volatile ServerCache queryCache; public BeanDescriptorCacheHelp(BeanDescriptor desc, ServerCacheManager cacheManager, CacheOptions cacheOptions, boolean cacheSharableBeans, BeanPropertyAssocOne[] propertiesOneImported) { @@ -148,6 +148,17 @@ public final class BeanDescriptorCacheHelp { return cacheOptions; } + /** + * Initialise the query cache if required + * (as some node in the cluster already has it). + */ + public void queryCacheInit() { + if (queryCache == null) { + queryLog.debug(" init {}", cacheName); + queryCache = cacheManager.getQueryCache(beanType); + } + } + /** * Clear the query cache. */