docs: protected Object getValue(String id, BackedSession s) {
          if (com.ibm.websphere.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_WAS.entering(methodClassName, methodNames[GET_VALUE]);
          }
          Connection conn = null;
          PreparedStatement prop_stmt = null;
          ResultSet rs = null;
          boolean psClose = false;
          String sessId = s.getId();
  
          Object tmp = null;
          conn = getConnection(false);
  
          if (conn == null) {
              if (com.ibm.websphere.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINER)) {
                  LoggingUtil.SESSION_LOGGER_WAS.exiting(methodClassName, methodNames[GET_VALUE], "unable to get con when processing session " + sessId + " for prop " + id);
              }
              return null;
          }
  
          try {
  
              InputStream is_large;
              InputStream is_medium;
              InputStream is_small;
  
              BufferedInputStream bis_small;
              BufferedInputStream bis_medium;
              BufferedInputStream bis_large;
  
              rs = null;
  
              if (usingDB2 || usingDerby)
                  prop_stmt = conn.prepareStatement(getProp);
              else
                  prop_stmt = conn.prepareStatement(getPropNotDB2);
  
              prop_stmt.setString(1, sessId);
              prop_stmt.setString(2, id);
              prop_stmt.setString(3, getIStore().getId());
  
              if (com.ibm.websphere.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.FINE, methodClassName, methodNames[GET_VALUE], "before query for " + id + " session " + sessId);
              }
  
              rs = prop_stmt.executeQuery();
  
              if (!rs.next()) {
                  rs.close();
                  prop_stmt.close();
                  psClose = true;
                  return null;
              }
  
              if (com.ibm.websphere.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_WAS.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.FINE, methodClassName, methodNames[GET_VALUE], "read results after query (FOUND) for " + id + " session " + sessId);
              }
  
              //Oracle Behaviour:
              // 1)Returns non null stream for long raw even when no data is present. This
              //   voilates JDBC spec. we have bug report into Oracle. Bug id is BUG#1255136
              // 2)Also we cannot use available() for long raw to check to see if any data is present
              //  or not. JDBC doesn't manadate to implement available().
              //
              // Once, Oracle fixes 1), we can use getBinaryStream() which makes coding easy
              //       by not creating byte array and then again creating binary stream from it.
              if (usingOracle) {
                  tmp = oracleGetValue(rs, s);
              } else {
                  long startTime = System.currentTimeMillis();
                  long readSize = 0;
                  is_small = rs.getBinaryStream(smallCol);
                  boolean found = false;
  
                  if (is_small != null) {
                      if (available(is_small)) {
                          readSize = is_small.available();
                          bis_small = new BufferedInputStream(is_small);
                          try {
                              tmp = ((DatabaseStore) getIStore()).getLoader().loadObject(bis_small);
                          } catch (ClassNotFoundException ce) {
                              com.ibm.ws.ffdc.FFDCFilter.processException(ce, "com.ibm.ws.session.store.db.DatabaseHashMap.getValue", "1335", s);
                              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "BackedHashtable.classNotFoundError");
                              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.sessionid", id);
                              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.exception", ce);
                          }
                          bis_small.close();
                          is_small.close();
                          found = true;
  
                      } else
                          is_small.close();
                  }
  
                  if (!found) {
                      is_medium = rs.getBinaryStream(medCol);
                      if (is_medium != null) {
                          if (available(is_medium)) {
                              readSize = is_medium.available();
                              bis_medium = new BufferedInputStream(is_medium);
                              try {
                                  tmp = ((DatabaseStore) getIStore()).getLoader().loadObject(bis_medium);
                              } catch (ClassNotFoundException ce) {
  
                                  com.ibm.ws.ffdc.FFDCFilter.processException(ce, "com.ibm.ws.session.store.db.DatabaseHashMap.getValue", "1360", s);
                                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "BackedHashtable.classNotFoundError");
                                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.sessionid", id);
                                  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.exception", ce);
                              }
                              bis_medium.close();
                              is_medium.close();
                              found = true;
                          } else
                              is_medium.close();
                      }
                  }
  
                  //  Only look in the large column for DB2; PM54094: ensure large column not check by Sybase
  
                  if (!found && !usingSybase) {
                      /*
                       * PK77100.
                       * Issue: the semantics expected by WAS from the java.io.InputStream method available() and that provided by the JDBC driver
                       * implementation differ. After session manager executes the query to retrieve an existing object from the database,
                       * session manager has a mechanism to validate whether there is any data remaining for an InputStream by checking
                       * java.io.InputStream.available(). From the JDBC driver standpoint this means the number of bytes currently available
                       * from this InputStream that have already been brought over to the client side but not yet consumed by the application.
                       * When fullyMaterializeLobData=false, no data is initially brought over to the client-side with the SELECT, just the locator.
                       * Initially (i.e. before the first read), available() will return 0. There are no data bytes available that don't require a
                       * blocking read (i.e. flow to the engine) to acquire
                       *
                       * Solution: Calling ResultSet.getBlob() will result into the materialization to the client-side. The subsequent usage of
                       * Blob.length()determines there is any data retrieving from the LARGE Column
                       */
                      //is_large = rs.getBinaryStream(lgCol);
  
                      Blob getBlobData = rs.getBlob(lgCol);
  
                      if (getBlobData != null) {
                          if (getBlobData.length() > 0) {
                              is_large = getBlobData.getBinaryStream();
  
                              if (is_large != null) {
                                  //if (available(is_large)) {    // commented out by PK77100
                                  //readSize = is_large.available(); // commented out by PK77100
                                  readSize = getBlobData.length();
                                  bis_large = new BufferedInputStream(is_large);
                                  try {
                                      tmp = ((DatabaseStore) getIStore()).getLoader().loadObject(bis_large);
                                  } catch (ClassNotFoundException ce) {
  
                                      com.ibm.ws.ffdc.FFDCFilter.processException(ce, "com.ibm.ws.session.store.db.DatabaseHashMap.getValue", "1387", s);
                                      LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "BackedHashtable.classNotFoundError");
                                      LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.sessionid", id);
                                      LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.exception", ce);
                                  }
                                  bis_large.close();
                                  is_large.close();
                                  found = true;
                              }//if (is_large != null)
                               //} else   //commented out by PK77100
                               //  is_large.close();  // commented out by PK77100, we only require to close the Binary Stream if the stream is available
                          }//if (getBlobData.length()){
                      }//if (getBlobData!=null)
                  } // if (!found)
                  SessionStatistics pmiStats = _iStore.getSessionStatistics();
                  if (pmiStats != null) {
                      pmiStats.readTimes(readSize, System.currentTimeMillis() - startTime);
                  }
              }
  
              rs.close();
              prop_stmt.close();
              psClose = true;
          } catch (SQLException se) {
              //            if (isStaleConnectionException(se)) {
              //                com.ibm.ws.ffdc.FFDCFilter.processException(se, "com.ibm.ws.session.store.db.DatabaseHashMap.getValue", "1408", s);
              //                LoggingUtil.SESSION_LOGGER_WAS.logp(Level.WARNING, methodClassName, methodNames[GET_VALUE], "StaleConnectionException");
              //            } else {
              com.ibm.ws.ffdc.FFDCFilter.processException(se, "com.ibm.ws.session.store.db.DatabaseHashMap.getValue", "1411", s);
              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "DatabaseHashMap.getValueErrBH");
              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.sessionid", sessId + " " + id);
              // spit out sesisonid + property name
              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.exception", se);
              //            }
          } catch (Exception e) {
              com.ibm.ws.ffdc.FFDCFilter.processException(e, "com.ibm.ws.session.store.db.DatabaseHashMap.getValue", "1417", s);
              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "DatabaseHashMap.getValueErrBH");
              // PQ87534  LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodName, "CommonMessage.object", s.toString());
              LoggingUtil.SESSION_LOGGER_WAS.logp(Level.SEVERE, methodClassName, methodNames[GET_VALUE], "CommonMessage.exception", e);
  
          } finally {
              if (!psClose && prop_stmt != null) {
                  closeResultSet(rs);
                  closeStatement(prop_stmt);
              }
              closeConnection(conn);
          }
  
          return tmp;
      }