docs: public void init(
          CmsConfigurationManager configurationManager,
          I_CmsDbContextFactory dbContextFactory,
          CmsPublishEngine publishEngine)
      throws CmsInitException {
  
          if (dbContextFactory == null) {
              throw new CmsInitException(
                  org.opencms.main.Messages.get().container(org.opencms.main.Messages.ERR_CRITICAL_NO_DB_CONTEXT_0));
          }
  
          m_dbContextFactory = dbContextFactory;
  
          CmsSystemConfiguration systemConfiguration = (CmsSystemConfiguration)configurationManager.getConfiguration(
              CmsSystemConfiguration.class);
  
          // create the driver manager
          m_driverManager = CmsDriverManager.newInstance(configurationManager, this, dbContextFactory, publishEngine);
  
          try {
              // invoke the init method of the driver manager
              m_driverManager.init(configurationManager, dbContextFactory);
              if (CmsLog.INIT.isInfoEnabled()) {
                  CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_DRIVER_MANAGER_START_PHASE4_OK_0));
              }
          } catch (Exception exc) {
              CmsMessageContainer message = Messages.get().container(Messages.LOG_ERR_DRIVER_MANAGER_START_0);
              if (LOG.isFatalEnabled()) {
                  LOG.fatal(message.key(), exc);
              }
              throw new CmsInitException(message, exc);
          }
  
          // create a new lock manager
          m_lockManager = m_driverManager.getLockManager();
  
          // initialize the permission handler
          String permHandlerClassName = systemConfiguration.getPermissionHandler();
          if (permHandlerClassName == null) {
              // use default implementation
              m_permissionHandler = new CmsDefaultPermissionHandler();
          } else {
              // use configured permission handler
              try {
                  m_permissionHandler = (I_CmsPermissionHandler)Class.forName(permHandlerClassName).newInstance();
              } catch (Exception e) {
                  throw new CmsInitException(
                      org.opencms.main.Messages.get().container(
                          org.opencms.main.Messages.ERR_CRITICAL_CLASS_CREATION_1,
                          permHandlerClassName),
                      e);
              }
          }
  
          m_permissionHandler.init(m_driverManager, systemConfiguration);
  
          if (CmsLog.INIT.isInfoEnabled()) {
              CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_SECURITY_MANAGER_INIT_0));
          }
      }