docs: protected void recordJobHistory(TaskExecutionContext context, Cron4jJob job, Thread jobThread, LocalDateTime activationTime,
              OptionalThing<RunnerResult> runnerResult, OptionalThing<LocalDateTime> endTime, OptionalThing<Throwable> controllerCause) {
          final TaskExecutor taskExecutor = context.getTaskExecutor();
          final Cron4jJobHistory jobHistory = prepareJobHistory(job, activationTime, runnerResult, endTime, controllerCause);
          final int historyLimit = getHistoryLimit();
          jobRunner.getHistoryHook().ifPresent(hook -> {
              final Method hookMethod = findHookMethod(hook, "hookRecord");
              arrangeHookThreadCacheContext();
              jobRunner.getAccessContextArranger().ifPresent(arranger -> { // for DB control
                  arrangeHookPreparedAccessContext(arranger, hook, hookMethod, job);
              });
              arrangeHookCallbackContext(hook, hookMethod, job);
              try {
                  showJobHistoryHookRecording(job, hook);
                  hook.hookRecord(jobHistory, new JobHistoryResource(historyLimit));
              } finally {
                  clearHookCallbackContext();
                  clearHookPreparedAccessContext();
                  clearHookThreadCacheContext();
              }
          });
          Cron4jJobHistory.record(taskExecutor, jobHistory, historyLimit);
      }