code: private Object invoke(Method method, Object[] args) throws IllegalAccessException, InvocationTargetException {
          ArrayList<ThreadContext> contextAppliedToThread = threadContextDescriptor.taskStarting();
          try {
              return method.invoke(object, args);
          } finally {
              threadContextDescriptor.taskStopping(contextAppliedToThread);
          }
      }
docs: Apply context, invoke the method, then remove the context from the thread.
  
  @param method the method
  @param args method parameters
  @return result of the method
  @throws IllegalAccessException if unable to access the method
  @throws InvocationTargetException if the method fails