docs: private void validateCCIConnectionFactory(ConnectionFactory cf, ConnectionFactoryService cfSvc,
                                                String user, @Sensitive String password,
                                                LinkedHashMap<String, Object> result) throws ResourceException {
          try {
              ResourceAdapterMetaData adapterData = cf.getMetaData();
              result.put("resourceAdapterName", adapterData.getAdapterName());
              result.put("resourceAdapterVersion", adapterData.getAdapterVersion());
  
              String spec = adapterData.getSpecVersion();
              if (spec != null && spec.length() > 0)
                  result.put("resourceAdapterJCASupport", spec);
  
              String vendor = adapterData.getAdapterVendorName();
              if (vendor != null && vendor.length() > 0)
                  result.put("resourceAdapterVendor", vendor);
  
              String desc = adapterData.getAdapterShortDescription();
              if (desc != null && desc.length() > 0)
                  result.put("resourceAdapterDescription", desc);
          } catch (NotSupportedException ignore) {
          } catch (UnsupportedOperationException ignore) {
          }
  
          ConnectionSpec conSpec = null;
          if (user != null || password != null) {
              String conFactoryClassName = cf.getClass().getName();
              String conSpecClassName = conFactoryClassName.replace("ConnectionFactory", "ConnectionSpec");
              if (!conFactoryClassName.equals(conSpecClassName))
                  conSpec = createConnectionSpec(cf, conSpecClassName, user, password);
  
              if (conSpec == null) {
                  // TODO find ConnectionSpec impl another way?
                  throw new RuntimeException("Unable to locate javax.resource.cci.ConnectionSpec impl from resource adapter.");
              }
          }
  
          Connection con;
          try {
              cfSvc.setValidating(true); // initializes a ThreadLocal that instructs the allocate operation to perform additional validation
              con = conSpec == null ? cf.getConnection() : cf.getConnection(conSpec);
          } finally {
              cfSvc.setValidating(false);
          }
          try {
              try {
                  ConnectionMetaData conData = con.getMetaData();
  
                  try {
                      String prodName = conData.getEISProductName();
                      if (prodName != null && prodName.length() > 0)
                          result.put("eisProductName", prodName);
                  } catch (NotSupportedException ignore) {
                  } catch (UnsupportedOperationException ignore) {
                  }
  
                  try {
                      String prodVersion = conData.getEISProductVersion();
                      if (prodVersion != null && prodVersion.length() > 0)
                          result.put("eisProductVersion", prodVersion);
                  } catch (NotSupportedException ignore) {
                  } catch (UnsupportedOperationException ignore) {
                  }
  
                  String userName = conData.getUserName();
                  if (userName != null && userName.length() > 0)
                      result.put("user", userName);
              } catch (NotSupportedException ignore) {
              } catch (UnsupportedOperationException ignore) {
              }
  
              try {
                  con.createInteraction().close();
              } catch (NotSupportedException ignore) {
              } catch (UnsupportedOperationException ignore) {
              }
          } finally {
              con.close();
          }
      }