code: @Override
      public GuavaCache init() {
          super.init();
  
          /*
           * Parse custom property: clone-cache-entries
           */
          boolean oldCloneCacheEntries = this.cloneCacheEntries;
          try {
              this.cloneCacheEntries = Boolean
                      .parseBoolean(getCacheProperty(CACHE_PROP_CLONE_CACHE_ENTRIES));
          } catch (Exception e) {
              this.cloneCacheEntries = oldCloneCacheEntries;
              if (getCacheProperty(CACHE_PROP_CLONE_CACHE_ENTRIES) != null) {
                  LOGGER.warn(e.getMessage(), e);
              }
          }
  
          int numProcessores = Runtime.getRuntime().availableProcessors();
          CacheBuilder<Object, Object> cacheBuilder = CacheBuilder.newBuilder()
                  .concurrencyLevel(numProcessores * 2);
          if (getCapacity() > 0) {
              cacheBuilder.maximumSize(getCapacity());
          }
  
          long expireAfterAccess = getExpireAfterAccess();
          long expireAfterWrite = getExpireAfterWrite();
          if (expireAfterAccess > 0) {
              cacheBuilder.expireAfterAccess(expireAfterAccess, TimeUnit.SECONDS);
          } else if (expireAfterWrite > 0) {
              cacheBuilder.expireAfterWrite(expireAfterWrite, TimeUnit.SECONDS);
          }
  
          CacheLoader<String, Object> guavaCacheLoader = new CacheLoader<String, Object>() {
              @Override
              public Object load(String key) throws Exception {
                  ICacheLoader cacheLoader = getCacheLoader();
                  Object result = cacheLoader != null ? cacheLoader.load(key) : null;
                  if (result != null) {
                      return result;
                  } else {
                      throw new CacheException.CacheEntryNotFoundException();
                  }
              }
          };
          cache = cacheBuilder.build(guavaCacheLoader);
  
          return this;
      }
docs: {@inheritDoc}