code: protected final JobSchedulerBuilder scheduleJob(Class<? extends Job> jobClass) {
          checkNotNull(jobClass, "Argument 'jobClass' must be not null.");
  
          if (!RequireUtil.allowClass(getSettings(), jobClass)) {
              return null;
          }
  
          JobSchedulerBuilder builder = new JobSchedulerBuilder(jobClass);
  
          if (jobClass.isAnnotationPresent(Scheduled.class)) {
              Scheduled scheduled = jobClass.getAnnotation(Scheduled.class);
  
              builder
                      // job
                      .withJobName(scheduled.jobName())
                      .withJobGroup(scheduled.jobGroup())
                      .withRequestRecovery(scheduled.requestRecovery())
                      .withStoreDurably(scheduled.storeDurably())
                              // trigger
                      .withCronExpression(scheduled.cronExpression())
                      .withTriggerName(scheduled.triggerName());
  
              if (!Scheduled.DEFAULT.equals(scheduled.timeZoneId())) {
                  TimeZone timeZone = TimeZone.getTimeZone(scheduled.timeZoneId());
                  if (timeZone != null) {
                      builder.withTimeZone(timeZone);
                  }
              }
          }
  
          requestInjection(builder);
          return builder;
      }
docs: Allows {@code Job} scheduling, delegating Guice create the {@code Job} instance
  and inject members.
  <p>
  If given {@code Job} class is annotated with {@link Scheduled}, then {@code Job}
  and related {@code Trigger} values will be extracted from it.
  
  @param jobClass The {@code Job} has to be scheduled
  @return The {@code Job} builder or null if the job class may not be registered