docs: public synchronized Object put(Object key, Object value) {
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINER)) {
              //PM16861 Modified trace statement by removing toString of session object to avoid deadlock
              StringBuffer sb = new StringBuffer("key=").append(key);
              LoggingUtil.SESSION_LOGGER_CORE.entering(methodClassName, methodNames[PUT], sb.toString());
          }
  
          if (maxSize == 0)
              return null;
  
          CacheEntryWrapper currEntry;
          CacheEntryWrapper oldestEntry = null;
  
          // See if entry exists
          currEntry = (CacheEntryWrapper) super.get(key);
  
          if (currEntry == null) { // need new entry
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, methodClassName, methodNames[PUT], "Doesn't exist in HashMap");
              }
  
              currentSize++;
              if (_iStoreCallback != null) {
                  _iStoreCallback.sessionLiveCountInc(value);
              }
  
              if (currentSize > maxSize) {
                  // too many entries, remove the oldest
                  if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                      LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, methodClassName, methodNames[PUT], "Too Many Entries.. Remove the oldest entry: " + lru.key);
                  }
                  oldestEntry = (CacheEntryWrapper) removeGuts(lru.key);
                  if (_iStoreCallback != null) {
                      _iStoreCallback.sessionCacheDiscard(oldestEntry.value);
                  }
              }
  
              currEntry = new CacheEntryWrapper();
              currEntry.key = key;
              currEntry.value = value;
  
              currEntry.next = mru;
              if (mru != null)
                  mru.prev = currEntry;
              else
                  lru = currEntry;
              mru = currEntry;
  
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, methodClassName, methodNames[PUT], "Adding new entry to the map");
              }
  
          }
  
          else { // found entry
  
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, methodClassName, methodNames[PUT], "Key already in use .. Reuse the entry");
              }
  
              updateCacheList(key);
              currEntry.value = value;
          }
  
          Object replacedEntry = super.put(key, currEntry);
  
          if (oldestEntry != null) {
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  //PM16861
                  LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[PUT], "Returning object associated with this key: " + oldestEntry.key);
              }
              return oldestEntry.value;
          }
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[PUT], null);
          }
          return null;
      }