code: @Override
      public boolean offer(String name, Object obj) {
          boolean accepted = false;
          // check map size
          if (CACHE.size() < capacity) {
              SoftReference<?> tmp = CACHE.get(name);
              // because soft references can be garbage collected when a system is
              // in need of memory, we will check that the cacheable object is
              // valid
              // log.debug("Softreference: " + (null == tmp));
              // if (null != tmp) {
              // log.debug("Softreference value: " + (null == tmp.get()));
              // }
              if (null == tmp || null == tmp.get()) {
                  ICacheable cacheable = null;
                  if (obj instanceof ICacheable) {
                      cacheable = (ICacheable) obj;
                  } else {
                      cacheable = new CacheableImpl(obj);
                  }
                  // set the objects name
                  cacheable.setName(name);
                  // set a registry entry
                  registry.put(name, 1);
                  // create a soft reference
                  SoftReference<ICacheable> value = new SoftReference<ICacheable>(cacheable);
                  CACHE.put(name, value);
                  // set acceptance
                  accepted = true;
                  log.info("{} has been added to the cache. Current size: {}", name, CACHE.size());
              }
          } else {
              log.warn("Cache has reached max element size: " + capacity);
          }
          return accepted;
      }
docs: {@inheritDoc}