code: public long getMS(String methodName, FacadeOperation op, Type type) {
          String cacheKey = type + "-" + methodName;
  
          if (methodTimeouts.containsKey(cacheKey)) {
              return methodTimeouts.get(cacheKey);
          }
  
          String configurationKeyPrefix = CONFIG_PREFIX+type+"."+beanName;
  
          String timeoutPropValue = properties.getProperty(configurationKeyPrefix + "." + methodName);
  
          if (timeoutPropValue == null && op != null) {
              if (log.isDebugEnabled()) {
                  log.debug("{} config not found for method {}, trying default for {} operations for this bean", type, methodName, op);
              }
  
              timeoutPropValue = properties.getProperty(configurationKeyPrefix + "." + op);
          }
  
          if (timeoutPropValue == null) {
              if (log.isDebugEnabled()) {
                  log.debug("{} config not found for method {}, trying default for this bean", type, methodName);
              }
  
              timeoutPropValue = properties.getProperty(configurationKeyPrefix);
          }
  
          Long timeout;
          if (timeoutPropValue == null) {
              if (log.isDebugEnabled()) {
                  log.debug("{} config not found for bean {} using global timeout", type, beanName);
              }
  
              switch (type) {
                  case timeout: {
                      timeout = defaultTimeoutMS; break;
                  }
                  case slowwarning: {
                      timeout = defaultSlowwarnMS; break;
                  }
                  default:
                      throw new IllegalArgumentException("Type " + type + " not known!");
              }
  
          } else {
              timeout = Long.parseLong(timeoutPropValue);
          }
  
          if (log.isDebugEnabled()) {
              log.debug("Setting {} for {}.{} to {}ms", type, beanName, methodName, timeout);
          }
  
          methodTimeouts.put(cacheKey, timeout);
  
          return timeout;
      }
docs: Return timeout or slowwarning value. First checks if timeout was
  configured for that method explicitly. If not, looks for timeout defined
  for operation type (read/write). If not, looks for a timeout defined for
  entire bean. If that is not set, takes a default global timeout.
  
  @param methodName to lookup timeout configuration by name
  @param op to lookup timeout configuration by operation
  @param type to lookup timeout configuration by type
  @return