docs: @Override
      public void execute(TaskExecutionContext context) { // e.g. error handling
          debugFw("...Beginning the cron4j task (before run): {}", jobType);
          final TaskExecutionContext nativeContext;
          final OptionalThing<LaunchNowOption> nowOption;
          if (context instanceof RomanticCron4jTaskExecutionContext) {
              final RomanticCron4jTaskExecutionContext romantic = (RomanticCron4jTaskExecutionContext) context;
              nativeContext = romantic.getNativeContext();
              nowOption = romantic.getLaunchNowOption();
          } else {
              nativeContext = context;
              nowOption = OptionalThing.empty();
          }
          try {
              final LocalDateTime activationTime = currentTime.get();
              final Cron4jJob job = findJob();
              final Thread jobThread = Thread.currentThread();
              RunnerResult runnerResult = null;
              Throwable controllerCause = null;
              try {
                  debugFw("...Calling doExecute() of task (before run)");
                  runnerResult = doExecute(job, nativeContext, nowOption); // not null
                  if (canTriggerNext(job, runnerResult)) {
                      debugFw("...Calling triggerNext() of job in task (after run)");
                      job.triggerNext(); // should be after current job ending
                  }
              } catch (JobConcurrentlyExecutingException e) { // these catch statements are related to deriveRunnerExecResultType()
                  debugFw("...Calling catch clause of job concurrently executing exception: {}", e.getClass().getSimpleName());
                  final String msg = "Cannot execute the job task by concurrent execution: " + varyingCron + ", " + jobType.getSimpleName();
                  error(OptionalThing.of(job), msg, e);
                  controllerCause = e;
              } catch (Throwable cause) { // from framework part (exception in appilcation job are already handled)
                  debugFw("...Calling catch clause of job controller's exception: {}", cause.getClass().getSimpleName());
                  final String msg = "Failed to execute the job task: " + varyingCron + ", " + jobType.getSimpleName();
                  error(OptionalThing.of(job), msg, cause);
                  controllerCause = cause;
              }
              final OptionalThing<RunnerResult> optRunnerResult = optRunnerResult(runnerResult); // empty when error 
              final OptionalThing<LocalDateTime> endTime = deriveEndTime(optRunnerResult);
              debugFw("...Calling recordJobHistory() of task (after run): {}, {}", optRunnerResult, endTime);
              recordJobHistory(nativeContext, job, jobThread, activationTime, optRunnerResult, endTime, optControllerCause(controllerCause));
              debugFw("...Ending the cron4j task (after run): {}, {}", optRunnerResult, endTime);
          } catch (Throwable coreCause) { // controller dead
              final String msg = "Failed to control the job task: " + varyingCron + ", " + jobType.getSimpleName();
              error(OptionalThing.empty(), msg, coreCause);
          }
      }