docs: public void pushContextData(){
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "pushContextData");
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "Setting the original thread's class loader and saving off the current one");
          }
          //Set the original Context Class Loader
          this.currentCL = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
              public ClassLoader run() {
                  ClassLoader cl = Thread.currentThread().getContextClassLoader();
                  Thread.currentThread().setContextClassLoader(originalCL);
                  return cl;
              }
          });
          
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "Saving the current thread's context data");
          }
          //We are going to save off the current threads component metadata and context
          //We will restore this when we pop later on
          this.currentCD = saveContextData();
          
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "Setting the original thread's context data : " + this.originalCD);
          }
          if (this.originalCD != null) {
  
              //Push the data onto the thread that we have hooks into
              ComponentMetaDataAccessorImpl cmdai = ComponentMetaDataAccessorImpl.getComponentMetaDataAccessor();
              ComponentMetaData cmd = (ComponentMetaData) this.originalCD.get(ComponentMetaData);
              if (cmd != null) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Calling begin on the ComponentMetaData : " + cmdai + ", with : " + cmd);
                  }
                  cmdai.beginContext(cmd);
              }
              
              //Each producer service of the Transfer service is accessed in order to get the thread context data
            Iterator<ITransferContextService> TransferIterator = com.ibm.ws.webcontainer.osgi.WebContainer.getITransferContextServices();
            if (TransferIterator != null) {
              while(TransferIterator.hasNext()){
                ITransferContextService tcs = TransferIterator.next();
                if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                    Tr.debug(tc, "Calling restoreState on: " + tcs);
                }
                tcs.restoreState(this.originalCD);
              }
            }
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "pushContextData");
          }
      }