docs: public void gatherAndDisplayMetaDataInfo(Connection conn, WSManagedConnectionFactoryImpl mcf) throws SQLException
      {
          java.sql.DatabaseMetaData mData = conn.getMetaData();
  
          String databaseProductName = mData.getDatabaseProductName();
          String driverName = mData.getDriverName(); 
  
          String driverVersion = null;
          String databaseProductVersion = null;
          try {
              driverVersion = mData.getDriverVersion();
              databaseProductVersion = mData.getDatabaseProductVersion();
          } catch (Exception e) {
              // Ignore any Runtime errors as the info collected are solely for FFDC purpose.
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(this, tc, "Exception occurred while getting metaData info. Exception is: ", e);
              }
          }
  
          setDatabaseProductName(databaseProductName);
          setDriverName(driverName); 
          setDriverMajorVersion(mData.getDriverMajorVersion()); 
  
          Tr.info(tc, "DB_PRODUCT_NAME", databaseProductName);
          Tr.info(tc, "DB_PRODUCT_VERSION", databaseProductVersion); 
          Tr.info(tc, "JDBC_DRIVER_NAME", driverName); 
          Tr.info(tc, "JDBC_DRIVER_VERSION", driverVersion); 
  
          try {
              if (mData.supportsResultSetHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT) &&
                  mData.supportsResultSetHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT)) {
                  if (tc.isDebugEnabled()) {
                      Tr.debug(this, tc, "Holdabiliy is supported");
                  }
                  holdabilitySupported = true;
              } else {
                  if (tc.isDebugEnabled()) {
                      Tr.debug(this, tc, "Holdability not supported");
                  }
                  holdabilitySupported = false;
              }
  
          } catch (Throwable x) {
              if (x instanceof SQLException) {
                  SQLException sqe = (SQLException) x;
                  if ((isConnectionError(sqe))) {
                      throw sqe; // if this is a stale we need to throw exception here.
                  }
  
                  // Some DB drivers throw SQLException when the JDBC version is 2.x.
                  // Holdability is not supported in 2.0
  
                  holdabilitySupported = false;
                  if (tc.isDebugEnabled()) {
                      Tr.debug(this, tc, "getHoldability is not supported in this JDBC driver. Encounter a java.sql.SQLException", sqe);
                  }
              } else 
              {
                  //NO FFDC needed
                  // just log it and do nothing
                  if (tc.isDebugEnabled()) {
                      Tr.debug(this, tc, "caught an exception when testing the holdability from metadata, will call the holdability itself to know if supported", x);
                  }
  
              }
          }
          try {
              mcf.jdbcDriverSpecVersion = mData.getJDBCMajorVersion() * 10;
          } catch (AbstractMethodError methError) {
              // No FFDC code needed. JDBC driver version is less than 3.0.
              mcf.jdbcDriverSpecVersion = 20;
          }
          catch (UnsupportedOperationException supportX) // raised by old Sybase driver
          {
              // No FFDC code needed. Driver is not JDBC 3.0 compliant because it does not
              // support getJDBCMajorVersion,
              mcf.jdbcDriverSpecVersion = 20;
          }
          catch (SQLException sqlX) {
              // No FFDC code needed.
              // Informix driver throws SQLException when the JDBC version is 2.x.
  
              mcf.jdbcDriverSpecVersion = 20;
  
              if (tc.isDebugEnabled())
                  Tr.debug(this, tc, "metadata.getJDBCMajorVersion", sqlX);
  
              // Need to fail if it was a connection error.
              if (isConnectionError(sqlX))
                  throw sqlX;
          }
  
          if (mcf.jdbcDriverSpecVersion > 30)
              try {
                  mcf.jdbcDriverSpecVersion += mData.getJDBCMinorVersion();
              } catch (SQLException x) {
              } catch (UnsupportedOperationException x) {
              }
  
          if (mcf.jdbcDriverSpecVersion >= 40)
              try 
              {
                  // Reset to the default client info of the data source (based on an initial connection),
                  // instead of using the default values for the JDBC driver--which could differ from the
                  // defaults specified for the data source.
                  Properties clientInfo = conn.getClientInfo();
                  if (clientInfo != null)
                      mcf.defaultClientInfo.putAll(clientInfo);
              }
              catch (SQLFeatureNotSupportedException featureX) {
                  // No FFDC code needed.
                  // The JDBC 4.0 driver ought to implement the getClientInfOProperties method,
                  // but doesn't.  Issue a warning, but tolerate the error so that WAS can still
                  // interoperate with the JDBC driver.
                  Tr.warning(tc, "FEATURE_NOT_IMPLEMENTED", "java.sql.Connection.getClientInfo");
              }
              catch (AbstractMethodError methErr) {
                  // No FFDC code needed.
                  // Work around a bug in Oracle where the driver reports "10" instead
                  // of the JDBC specification level.
                  // If the JDBC 4.0 metadata operation cannot be found on the driver,
                  // then it must really be a JDBC 3.0 driver.
                  if (tc.isDebugEnabled())
                      Tr.debug(this, tc,
                               "JDBC spec level, " + mcf.jdbcDriverSpecVersion +
                                               ", reported by the driver is not valid. Using 30 (3.0) instead.");
                  mcf.jdbcDriverSpecVersion = 30;
              }
              catch (UnsupportedOperationException operationX) 
              {
                  // No FFDC code needed.
                  // Returned by Sybase jconn4.jar versions that are older than jConnect-7.07.
                  // The JDBC 4.0 driver ought to throw SQLFeatureNotSupportedException,
                  // but doesn't.  Issue a warning, but tolerate the error so that WAS can still
                  // interoperate with the JDBC driver.
                  Tr.warning(tc, "FEATURE_NOT_IMPLEMENTED", "java.sql.Connection.getClientInfo");
              }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(this, tc, "JDBC spec version implemented by driver", mcf.jdbcDriverSpecVersion);
      }