protected final JobSchedulerBuilder scheduleJob( Class<? extends Job> jobClass )
    {
        checkNotNull( jobClass, "Argument 'jobClass' must be not 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 ( !DEFAULT.equals( scheduled.timeZoneId() ) )
            {
                TimeZone timeZone = getTimeZone( scheduled.timeZoneId() );
                if ( timeZone != null )
                {
                    builder.withTimeZone( timeZone );
                }
            }
        }

        requestInjection( builder );
        return builder;
    }