code: void wrapAndRun (Runnable runnable) { // PM90834 added method
        if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINEST)) { 
            logger.entering(CLASS_NAME,"wrapAndRun",runnable);
        }
  
        try {
            this.popContextData();
  
            if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && logger.isLoggable(Level.FINEST)) {
                logger.logp(Level.FINEST, CLASS_NAME, "wrapAndRun", "run with context class loader: " + Thread.currentThread().getContextClassLoader());
            }
  
            runnable.run();
        } finally {
            try {
                this.resetContextData();
            }finally {
                if (runnable instanceof CompleteRunnable) {
                    asyncContext.notifyITransferContextCompleteState();
                }
  
                if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled()&&logger.isLoggable (Level.FINEST)) { 
                    logger.exiting(CLASS_NAME,"wrapAndRun",runnable);
                }
            }
        }
    }
docs: Execute a runnable within some context. Other objects could call popContextData
  and resetContextData on their own, but this ensures that they are called in the right order.
  
  @param runnable