code: public void run()
     {
        ClassLoader oldCL = SecurityActions.getThreadContextClassLoader();
        SecurityActions.setThreadContextClassLoader(work.getClass().getClassLoader());
  
        org.ironjacamar.core.spi.security.SecurityContext oldSC = securityIntegration.getSecurityContext();
  
        try
        {
           start();
           workManager.addWorkWrapper(this);
  
           if (startedLatch != null)
              startedLatch.countDown();
  
           work.run();
  
           end();
        }
        catch (Throwable t)
        {
           exception = new WorkCompletedException(t.getMessage(), t);
  
           cancel();
        } 
        finally
        {
           workManager.removeWorkWrapper(this);
           work.release();
  
           if (workListener != null)
           {
              WorkEvent event = new WorkEvent(workManager, WorkEvent.WORK_COMPLETED, work, exception);
              workListener.workCompleted(event);
           }
  
           securityIntegration.setSecurityContext(oldSC);
           SecurityActions.setThreadContextClassLoader(oldCL);
  
           if (startedLatch != null)
           {
              while (startedLatch.getCount() != 0)
                 startedLatch.countDown();
           }
  
           if (completedLatch != null)
              completedLatch.countDown();
  
           if (trace)
              log.tracef("Executed work: %s", this);
        }
     }
docs: Run