docs: public synchronized void initialize(CmsObject adminCms) throws CmsRoleViolationException {
  
          if (OpenCms.getRunLevel() > OpenCms.RUNLEVEL_1_CORE_OBJECT) {
              // simple unit tests will have runlevel 1 and no CmsObject
              OpenCms.getRoleManager().checkRole(adminCms, CmsRole.WORKPLACE_MANAGER);
          }
  
          // the list of job entries
          m_jobs = new ArrayList<CmsScheduledJobInfo>();
  
          // save the admin cms
          m_adminCms = adminCms;
  
          // Quartz scheduler settings
          Properties properties = new Properties();
          properties.put(StdSchedulerFactory.PROP_SCHED_INSTANCE_NAME, "OpenCmsScheduler");
          properties.put(StdSchedulerFactory.PROP_SCHED_THREAD_NAME, "OpenCms: Scheduler");
          properties.put(StdSchedulerFactory.PROP_SCHED_RMI_EXPORT, CmsStringUtil.FALSE);
          properties.put(StdSchedulerFactory.PROP_SCHED_RMI_PROXY, CmsStringUtil.FALSE);
          properties.put(StdSchedulerFactory.PROP_THREAD_POOL_CLASS, CmsSchedulerThreadPool.class.getName());
          properties.put(StdSchedulerFactory.PROP_JOB_STORE_CLASS, "org.quartz.simpl.RAMJobStore");
          // this will be required in quartz versions from 1.6, but constants are not supported in earlier versions
          properties.put("org.quartz.scheduler.jmx.export", CmsStringUtil.FALSE);
          properties.put("org.quartz.scheduler.jmx.proxy", CmsStringUtil.FALSE);
  
          try {
              // initialize the Quartz scheduler
              SchedulerFactory schedulerFactory = new StdSchedulerFactory(properties);
              m_scheduler = schedulerFactory.getScheduler();
          } catch (Exception e) {
              LOG.error(Messages.get().getBundle().key(Messages.LOG_NO_SCHEDULER_0), e);
              // can not continue
              m_scheduler = null;
              return;
          }
  
          if (CmsLog.INIT.isInfoEnabled()) {
              CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_SCHEDULER_INITIALIZED_0));
          }
  
          if (m_configuredJobs != null) {
              // add all jobs from the system configuration
              for (int i = 0; i < m_configuredJobs.size(); i++) {
                  try {
                      CmsScheduledJobInfo job = m_configuredJobs.get(i);
                      scheduleJob(adminCms, job);
                  } catch (CmsSchedulerException e) {
                      // ignore this job, but keep scheduling the other jobs
                      // note: the log is has already been written
                  }
              }
          }
  
          try {
              // start the scheduler
              m_scheduler.start();
          } catch (Exception e) {
              LOG.error(Messages.get().getBundle().key(Messages.LOG_CANNOT_START_SCHEDULER_0), e);
              // can not continue
              m_scheduler = null;
              return;
          }
  
          if (CmsLog.INIT.isInfoEnabled()) {
              CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_SCHEDULER_STARTED_0));
              CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_SCHEDULER_CONFIG_FINISHED_0));
          }
      }