docs: private final Connection getConnectionUsingDriver(String userN, String password) throws ResourceException 
      {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(this, tc, "getConnectionUsingDriver", AdapterUtil.toString(dataSourceOrDriver), userN);
  
          final String user = userN == null ? null : userN.trim();
          final String pwd = password == null ? null : password.trim();
  
          Connection conn = null;
          boolean isConnectionSetupComplete = false;
          try {
              conn = AccessController.doPrivileged(new PrivilegedExceptionAction<Connection>() {
                  public Connection run() throws Exception {
                      Hashtable<?, ?> vProps = dsConfig.get().vendorProps;
                      Properties conProps = new Properties();
                      String url = null;
                      // convert property values to String and decode passwords 
                      for (Map.Entry<?, ?> prop : vProps.entrySet()) {
                          String name = (String) prop.getKey();
                          Object value = prop.getValue();
                          if (value instanceof String) {
                              String str = (String) value;
                              if ("URL".equals(name) || "url".equals(name)) {
                                  url = str;
                                  if (isTraceOn && tc.isDebugEnabled())
                                      Tr.debug(this, tc, name + '=' + PropertyService.filterURL(str));
                              } else if ((user == null || !"user".equals(name)) && (pwd == null || !"password".equals(name))) {
                                  // Decode passwords
                                  if (PropertyService.isPassword(name)) {
                                      if (isTraceOn && tc.isDebugEnabled())
                                          Tr.debug(this, tc, "prop " + name + '=' + (str == null ? null : "***"));
                                      if (PasswordUtil.getCryptoAlgorithm(str) != null) {
                                          str = PasswordUtil.decode(str);
                                      }
                                  } else {
                                      if (isTraceOn && tc.isDebugEnabled())
                                          Tr.debug(this, tc, "prop " + name + '=' + str);
                                  }
                                  conProps.setProperty(name, str);
                              }
                          } else {
                              if (isTraceOn && tc.isDebugEnabled())
                                  Tr.debug(this, tc, "prop " + name + '=' + value);
                              // Convert to String value
                              conProps.setProperty(name, value.toString());
                          }
                      }
  
                      if (user != null) {
                          conProps.setProperty("user", user);
                          conProps.setProperty("password", pwd);
                          if (isTraceOn && tc.isDebugEnabled()) {
                              Tr.debug(this, tc, "prop user=" + user);
                              Tr.debug(this, tc, "prop password=" + (pwd == null ? null : "***"));
                          }
                      }
                      Connection conn = ((Driver) dataSourceOrDriver).connect(url, conProps);
                      
                      //Although possible, this shouldn't happen since the JDBC Driver has indicated it can accept the URL
                      if(conn == null) {
                          //return beginning on JDBC url (ex jdbc:db2:
                          String urlPrefix = "";
                          int first = url.indexOf(":");
                          int second = url.indexOf(":", first+1);
                          if(first < 0 || second < 0) {
                              urlPrefix = url.substring(0, 10);
                          } else {
                              urlPrefix = url.substring(0, second);
                          }
                          throw new ResourceException(AdapterUtil.getNLSMessage("DSRA4006.null.connection", dsConfig.get().id, vendorImplClass.getName(), urlPrefix));
                      }
                      return conn;
                  }
              });
  
              try {
                  postGetConnectionHandling(conn);
              } catch (SQLException se) {
                  FFDCFilter.processException(se, getClass().getName(), "871", this);
                  if (isTraceOn && tc.isEntryEnabled())
                      Tr.exit(this, tc, "getConnectionUsingDriver", se);
                  throw AdapterUtil.translateSQLException(se, this, false, getClass()); 
              }
  
              isConnectionSetupComplete = true;
          } catch (PrivilegedActionException pae) {
              FFDCFilter.processException(pae.getException(), getClass().getName(), "879");
              ResourceException resX = new DataStoreAdapterException("JAVAX_CONN_ERR", pae.getException(), getClass(), "Connection");
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(this, tc, "getConnectionUsingDriver", pae.getException());
              throw resX;
          } catch (ClassCastException castX) {
              // There's a possibility this occurred because of an error in the JDBC driver
              // itself.  The trace should allow us to determine this.
              FFDCFilter.processException(castX, getClass().getName(), "887");
              ResourceException resX = new DataStoreAdapterException("NOT_A_1_PHASE_DS", null, getClass(), castX.getMessage());
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(this, tc, "getConnectionUsingDriver", castX);
              throw resX;
          } finally {
              // Destroy the connection if we weren't able to successfully complete the setup.
              if (conn != null && !isConnectionSetupComplete)
                  try {
                      conn.close();
                  } catch (Throwable x) {
                  }
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(this, tc, "getConnectionUsingDriver", AdapterUtil.toString(conn));
          return conn;
      }