code: @Override
      public void doWork(
                         Work work,
                         long startTimeout,
                         ExecutionContext execContext,
                         WorkListener workListener) throws WorkException {
  
          try {
              beforeRunCheck(work, workListener, startTimeout);
  
              new WorkProxy(work, startTimeout, execContext, workListener, bootstrapContext, runningWork, false).call();
          } catch (WorkException ex) {
              throw ex;
          } catch (Throwable t) {
              WorkRejectedException wrex = new WorkRejectedException(t);
              wrex.setErrorCode(WorkException.INTERNAL);
              if (workListener != null)
                  workListener.workRejected(new WorkEvent(work, WorkEvent.WORK_REJECTED, work, wrex));
              throw wrex;
          }
      }
docs: This method does not return until the work is completed as the caller
  expects to wait until the work is completed before getting control back.
  This method accomplishes this by NOT spinning a thread.
  
  @pre providerId != null
  
  @param work
  @param startTimeout
  @param execContext
  @param workListener
  @throws WorkException
  @see <a
  href="http://java.sun.com/j2ee/1.4/docs/api/javax/resource/spi/work/WorkManager.html#doWork(com.ibm.javarx.spi.work.Work, long, com.ibm.javarx.spi.work.ExecutionContext, com.ibm.javarx.spi.work.WorkListener)">
  com.ibm.javarx.spi.work.WorkManager.doWork(Work, long, ExecutionContext, WorkListener)</a>