code: public T find(String key, Object val, CacheLoader<T> loader, Object ... args) {
          ConcurrentCache<Object,T> cache = caches.get(key);
          T item;
  
          if( val instanceof BigDecimal ) {
              val = ((BigDecimal)val).longValue();
          }
          item = cache.get(val);
          if( item == null  && loader != null ) {
              item = loader.load(args);
              if( item == null ) {
                  return null;
              }
              synchronized( this ) {
                  item = getCurrent(item);
                  put(item);
              }
          }
          return item;
      }
docs: Seeks the item from the cache that is identified by the specified key having
  the specified value. If no match is found, the specified loader will be called
  with the specified arguments in order to place an instantiated item into the cache.
  @param key the name of the unique identifier attribute whose value you have
  @param val the value of the unique identifier that identifiers the desired item
  @param loader a loader to load the desired object from the persistence store if it
  is not in memory
  @param args any arguments to pass to the loader
  @return the object that matches the specified key/value