docs: private void synchronizePropertiesWithCRI() throws ResourceException {
  
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          int previousTransactionIsolation = -1; // only used for debugging
          int previousHoldability = -1; //  - only used for debugging
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(this, tc, "synchronizePropertiesWithCRI");
  
          try {
              isolationChanged = false;
              holdabilityChanged = false;
  
              if (kerberosConnection) {
                  if (!AdapterUtil.matchGSSName(mc_gssName, cri.gssName)) {
                      if (isTraceOn && tc.isDebugEnabled()) 
                      {
                          Tr.debug(this, tc, "synching kerberos gssCredential on this mc and then clearing ps cache");
                      }
  
                      //  move the clearing of statement to before we issue the reuse.
                      // this will cover for cases where the reuse results in bad stuff. DB2 on Z seem to leak when this happens.
                      // reuse is supported with clean model only
  
                      // the cache gets created after the synchronizePropertiesWithCRI on newly created mc.
                      // thus, we should only call it if its not null here.  We don't want to have the check
                      // happen at the clearSTatementCache() since it puts a tr that cache is disabled (which si not the case)
                      if (statementCache != null) {
                          clearStatementCache();
                      }
  
                      // the reuse call won't go down to the DB til the next execution of the.  DB optimizaiton.
                      // if we were in a tran, a connection will have to match as we do compare subject and CRI
                      // the fact that the gssNames don't match, means we are not in a tra.
                      mcf.helper.reuseKerbrosConnection(sqlConn, cri.gssCredential, null);
  
                      //now save the cri props in the mc
                      mc_gssCredential = cri.gssCredential;
                      mc_gssName = cri.gssName;
  
                      // now that we issued the reuse, we need to purge the PS cache for this mc as
                      // reuse is supported with clean model only
  
                      handleCleanReuse();
                  }
              }
  
              // Retrieve the default values for all Connection properties. 
              // Save the default values for when null is specified in the CRI. 
              previousTransactionIsolation = getTransactionIsolation();
              previousHoldability = currentHoldability;
  
              if (currentTransactionIsolation != cri.ivIsoLevel) {
                  setTransactionIsolation(cri.ivIsoLevel);
              }
  
              if (cri.ivCatalog != null && !cri.ivCatalog.equals(defaultCatalog)) {
                  setCatalog(cri.ivCatalog);
              }
  
  
              if (cri.ivReadOnly != null && defaultReadOnly != cri.ivReadOnly.booleanValue() && mcf.supportsIsReadOnly) {
                  helper.setReadOnly(this, cri.ivReadOnly.booleanValue(), false); 
              }
  
              if (!AdapterUtil.match(cri.ivShardingKey, currentShardingKey)
               || !AdapterUtil.match(cri.ivSuperShardingKey, currentSuperShardingKey)) {
                  setShardingKeys(cri.ivShardingKey, cri.ivSuperShardingKey);
              }
  
              if (cri.ivTypeMap != null && defaultTypeMap != cri.ivTypeMap && mcf.supportsGetTypeMap) {
                  setTypeMap(cri.ivTypeMap);
              }
              
              if (mcf.supportsGetNetworkTimeout && cri.ivNetworkTimeout != currentNetworkTimeout) {
                  final ExecutorService libertyThreadPool = mcf.connectorSvc.getLibertyThreadPool();
                  // setNetworkTimeout is the only JDBC Connection property that may perform access checks
                  if (System.getSecurityManager() == null) {
                      setNetworkTimeout(libertyThreadPool, cri.ivNetworkTimeout);
                  } else {
                      try {
                          AccessController.doPrivileged(new PrivilegedExceptionAction<Void>() {
                              @Override
                              public Void run() throws Exception {
                                  setNetworkTimeout(libertyThreadPool, cri.ivNetworkTimeout);
                                  return null;
                              }
                          });
                      } catch (PrivilegedActionException e) {
                          if (e.getException() instanceof SQLException)
                              throw (SQLException) e.getException();
                          throw (RuntimeException) e.getException();
                      }
                  }
              }
  
              if(mcf.supportsGetSchema && (cri.ivSchema != null || defaultSchema != null)){
                  String targetSchema = cri.ivSchema == null ? defaultSchema : cri.ivSchema;
                  if(!AdapterUtil.match(currentSchema, targetSchema))
                      setSchema(targetSchema);
              }
  
              //  - synchronize the holdability value to either cri value or default value
              // if the default value is not 0, which means the JDBC driver supports holdability.
              if (defaultHoldability != 0) {
                  int targetHoldability = cri.ivHoldability == 0 ?
                                  defaultHoldability : cri.ivHoldability;
                  if (currentHoldability != targetHoldability) {
                      setHoldability(targetHoldability);
                  }
              }
  
          } catch (SQLException sqlX) {
              FFDCFilter.processException(sqlX, getClass().getName() + ".synchronizePropertiesWithCRI", "850", this);
              ResourceException x = AdapterUtil.translateSQLException(sqlX, this, true, getClass()); 
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(this, tc, "synchronizePropertiesWithCRI", sqlX);
              throw x;
          }
  
          if (isTraceOn && tc.isDebugEnabled()) 
          {
              Tr.debug(this, tc, "previous/current value:",
                                     "AutoCommit:    " + currentAutoCommit + "/" + currentAutoCommit,
                                     "Isolation:     " + AdapterUtil.getIsolationLevelString(previousTransactionIsolation) +
                                                     "/" + AdapterUtil.getIsolationLevelString(currentTransactionIsolation),
                                     "Catalog:       " + defaultCatalog + "/" + (cri.ivCatalog == null ? defaultCatalog : cri.ivCatalog),
                                     "Schema:        " + defaultSchema + "/" + (cri.ivSchema == null ? defaultSchema : cri.ivSchema),
                                     "ShardingKey:   " + initialShardingKey + "/" + cri.ivShardingKey,
                                     "SuperShardingK:" + initialSuperShardingKey + "/" + cri.ivSuperShardingKey,
                                     "NetworkTimeout:" + defaultNetworkTimeout + "/" + (cri.ivNetworkTimeout == 0 ? defaultNetworkTimeout : cri.ivNetworkTimeout),
                                     "IsReadOnly:    " + defaultReadOnly + "/" + (cri.ivReadOnly == null ? defaultReadOnly : cri.ivReadOnly), 
                                     "TypeMap:       " + defaultTypeMap + "/" + (cri.ivTypeMap == null ? defaultTypeMap : cri.ivTypeMap),
                                     "Holdability:   " + AdapterUtil.getCursorHoldabilityString(previousHoldability) +
                                                     "/" + AdapterUtil.getCursorHoldabilityString(currentHoldability));
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(this, tc, "synchronizePropertiesWithCRI");
  
      }