@Override
  public String process() throws Exception {
    logger.fine(sourceClass + ".process()");

    // Do something a bit "compute-intensive".
    Random r = new Random();
    int x = r.nextInt();
    int y = r.nextInt();
    for (int i = 0; i < 10; i++) {
      x = (y * x) % 3469;
      y = (x * y) % 3491;
    }

    // This is the ongoing appending to the JOB exit status
    String exitStatus = null;
    try {
      exitStatus = contributeToExitStatus();
      appendToJobContext(exitStatus);
    } catch (FailViaException e) {
      logger.fine(sourceClass + ".process(); Exiting with exitStatus = " + exitStatus);
      String errorAppend = (String) jobCtx.getTransientUserData();
      appendToJobContext(errorAppend);
      throw new RuntimeException("Throwing exception on purpose");
    }

    logger.fine(sourceClass + ".process(); exitStatus = " + exitStatus);

    // Now we're going to switch gears and consider the step exit Status
    if (exitStatus.startsWith("s")) {
      logger.fine(
          "For step exitStatus for step: "
              + stepCtx.getStepName()
              + " , return: "
              + JSL_STOP_TRANSITION);
      return JSL_STOP_TRANSITION;
    } else if (exitStatus.startsWith("f")) {
      logger.fine(
          "For step exitStatus for step: "
              + stepCtx.getStepName()
              + " , return: "
              + JSL_FAIL_TRANSITION);
      return JSL_FAIL_TRANSITION;
    } else {
      logger.fine(
          "For step exitStatus for step: " + stepCtx.getStepName() + " , don't return value");
      return null;
    }
  }