docs: public synchronized void initialize(CmsObject cms, CmsConfigurationManager configurationManager)
      throws CmsRoleViolationException {
  
          if (OpenCms.getRunLevel() > OpenCms.RUNLEVEL_1_CORE_OBJECT) {
              // certain test cases won't have an OpenCms context
              OpenCms.getRoleManager().checkRole(cms, CmsRole.DATABASE_MANAGER);
          }
  
          Iterator<String> it;
          int count = 0;
          it = m_modules.keySet().iterator();
          while (it.hasNext()) {
              // get the module description
              CmsModule module = m_modules.get(it.next());
  
              if (module.getActionClass() != null) {
                  // create module instance class
                  I_CmsModuleAction moduleAction = module.getActionInstance();
                  if (module.getActionClass() != null) {
                      try {
                          moduleAction = (I_CmsModuleAction)Class.forName(module.getActionClass()).newInstance();
                      } catch (Exception e) {
                          CmsLog.INIT.info(
                              Messages.get().getBundle().key(Messages.INIT_CREATE_INSTANCE_FAILED_1, module.getName()),
                              e);
                      }
                  }
                  if (moduleAction != null) {
                      count++;
                      module.setActionInstance(moduleAction);
                      if (CmsLog.INIT.isInfoEnabled()) {
                          CmsLog.INIT.info(
                              Messages.get().getBundle().key(
                                  Messages.INIT_INITIALIZE_MOD_CLASS_1,
                                  moduleAction.getClass().getName()));
                      }
                      try {
                          // create a copy of the adminCms so that each module instance does have
                          // it's own context, a shared context might introduce side - effects
                          CmsObject adminCmsCopy = OpenCms.initCmsObject(cms);
                          // initialize the module
                          moduleAction.initialize(adminCmsCopy, configurationManager, module);
                      } catch (Throwable t) {
                          LOG.error(
                              Messages.get().getBundle().key(
                                  Messages.LOG_INSTANCE_INIT_ERR_1,
                                  moduleAction.getClass().getName()),
                              t);
                      }
                  }
              }
          }
  
          // initialize the export points
          initModuleExportPoints();
          m_importExportRepository.initialize(cms);
  
          if (CmsLog.INIT.isInfoEnabled()) {
              CmsLog.INIT.info(
                  Messages.get().getBundle().key(Messages.INIT_NUM_CLASSES_INITIALIZED_1, new Integer(count)));
          }
      }