docs: @Override
      public synchronized Object put(Object key, Object value) {
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINER)) {
              //PM16861
              StringBuffer sb = new StringBuffer("{").append(key).append("} ").append(appNameForLogging);
              LoggingUtil.SESSION_LOGGER_CORE.entering(methodClassName, methodNames[PUT], sb.toString());
          }
          Object replacedEntry = null;
  
          // First see if replacing an existing entry 
          Object currEntry = super.get(key);
  
          if (currEntry != null) {
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[PUT], "replacing existing entry");
              }
              replacedEntry = super.put(key, value);
          } else {
              if ((overflowAllowed) && (OverflowTabl != null)) {
                  synchronized (OverflowTablLock) {
                      currEntry = OverflowTabl.get(key);
                      if (currEntry != null) {
                          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                              LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[PUT], "replacing existing entry in overflow Hashmap");
                          }
                          replacedEntry = OverflowTabl.put(key, value);
                      }
                  }
              }
          }
  
          // Handle new entries
          if (currEntry == null) {
              currentSize++;
              // increment pmi counter
              if (_iStore.getStoreCallback() != null) {
                  _iStore.getStoreCallback().sessionLiveCountInc(value);
              }
  
              if (currentSize <= maxSize) {
                  replacedEntry = super.put(key, value);
                  if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                      LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[PUT], "add new entry to Hashmap");
                  }
              } else { // overflow
                  currentSize--;
                  if (overflowAllowed) {
                      synchronized (OverflowTablLock) {
                          if (OverflowTabl == null) {
                              OverflowTabl = new HashMap(currentSize, 1);
                              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                                  LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[PUT], "Creating Overflow Table");
                              }
                          }
  
                          replacedEntry = OverflowTabl.put(key, value);
                          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                              LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[PUT], "add new entry to overflow Hashmap");
                          }
                      }
                  } else
                      throw new TooManySessionsException(); // no overflow allowed
              }
          }
  
          return replacedEntry;
      }