docs: @Override
      @Trivial // traced with greater granularity within method
      public ArrayList<com.ibm.wsspi.threadcontext.ThreadContext> taskStarting() throws RejectedExecutionException {
          final boolean trace = TraceComponent.isAnyTracingEnabled();
  
          // EE Concurrency 3.3.4: All invocations to any of the proxied interface methods will fail with a
          // java.lang.IllegalStateException exception if the application component is not started or deployed.
          if (metadataIdentifier != null && cmProvider.metadataIdentifierService.getMetaData(metadataIdentifier) == null)
              com.ibm.ws.context.service.serializable.ThreadContextDescriptorImpl.notAvailable(metadataIdentifier, "");
  
          ArrayList<com.ibm.wsspi.threadcontext.ThreadContext> contextAppliedToThread = new ArrayList<com.ibm.wsspi.threadcontext.ThreadContext>(contextSnapshots.size());
          try {
              for (com.ibm.wsspi.threadcontext.ThreadContext contextSnapshot : contextSnapshots) {
                  contextSnapshot = contextSnapshot.clone();
  
                  contextSnapshot.taskStarting();
  
                  contextAppliedToThread.add(contextSnapshot);
  
                  if (trace && tc.isDebugEnabled()) {
                      if (contextSnapshot instanceof DeferredClearedContext) {
                          Object clearedContextController = ((DeferredClearedContext) contextSnapshot).clearedContextController;
                          if (clearedContextController != null)
                              Tr.debug(this, tc, "cleared context " + clearedContextController);
                      } else {
                          Tr.debug(this, tc, "applied context " + toString(contextSnapshot));
                      }
                  }
              }
          } catch (RuntimeException | Error x) {
              // In the event of failure, undo all context propagation up to this point.
              for (int c = contextAppliedToThread.size() - 1; c >= 0; c--)
                  try {
                      com.ibm.wsspi.threadcontext.ThreadContext appliedContext = contextAppliedToThread.get(c);
                      if (trace && tc.isDebugEnabled()) {
                          if (appliedContext instanceof DeferredClearedContext) {
                              Object clearedContextController = ((DeferredClearedContext) appliedContext).clearedContextController;
                              if (clearedContextController != null)
                                  Tr.debug(this, tc, "restore context " + clearedContextController);
                          } else {
                              Tr.debug(this, tc, "restore context " + toString(appliedContext));
                          }
                      }
                      appliedContext.taskStopping();
                  } catch (Throwable stopX) {
                  }
  
              throw x;
          }
  
          return contextAppliedToThread;
      }