code: @Override
      Object invokeOperation(Object implObject, Method method, Object[] args)
                      throws IllegalAccessException, IllegalArgumentException, InvocationTargetException,
                      SQLException {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled(); 
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(this, tc, "invokeOperation: " + method.getName(), args); 
  
          Object result;
  
          // Check for single parameter setter methods
          Class<?>[] types = method.getParameterTypes(); 
  
          if (types != null && types.length == 1 && method.getName().startsWith("set")
              && void.class.equals(method.getReturnType())) {
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(this, tc, "invokeOperation: " + method.getName(), "not supported"); 
              throw new SQLFeatureNotSupportedException(method.getName());
          } else // Not modifying the configuration, use the instance for the current config ID.
          {
              implObject = mcf.getUnderlyingDataSource();
              if (isTraceOn && tc.isDebugEnabled())
                  Tr.debug(this, tc, "invoke on " + AdapterUtil.toString(implObject)); 
              result = method.invoke(implObject, args);
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(this, tc, "invokeOperation: " + method.getName(), result); 
          return result;
      }
docs: Invokes a method. Data sources should use the dynamic configuration manager
  to select the correct configuration, or if the method is a single-parameter
  setter -- such as setExtProperties(map) -- then create a new configuration entry
  for it.
  
  @param implObject ignore this parameter; it does not apply to data sources.
  @param method the method being invoked.
  @param args the parameters to the method.
  
  @throws IllegalAccessException if the method is inaccessible.
  @throws IllegalArgumentException if the instance does not have the method or
  if the method arguments are not appropriate.
  @throws InvocationTargetException if the method raises a checked exception.
  @throws SQLException if unable to invoke the method for other reasons.
  
  @return the result of invoking the method.