docs: public void start(EJBRuntimeConfig config) throws CSIException {
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "start");
  
          ivContainer = config.getContainer();
          ivEJBMDOrchestrator = config.getEJBMDOrchestrator();
  
          // Check system property to determine if the deferred EJB initialization option has been disabled
          // The initializeEJBsAtStartup system property has 3 possible values:
          // (True) - all EJBs will be initialized during application start.
          // (False) - all EJBs (except MDBs and Startupbeans) will have their initialization deferred.
          // (Not Set) - The property is not set and therefore deferred initialization will be determined
          //             on a bean-by-bean basis.
          // Moved from processBean via defect 294477
          String ias = ContainerProperties.InitializeEJBsAtStartup; // 391302
          if (ias != null) {
              ivInitAtStartupSet = true;
              ivInitAtStartup = ias.equalsIgnoreCase("true");
          }
  
          //PK15508: make uowCrtl a global variable.  Change from: UOWControl ivUOWControl = cef.getUOWControl(tx); to:
          ContainerExtensionFactory cef = config.getContainerExtensionFactory();
          ivUOWControl = cef.getUOWControl(getUserTransaction()); // LIDB4171-35.03 F84120
          EJBSecurityCollaborator<?> securityCollaborator = config.getSecurityCollaborator();
  
          StatefulPassivator statefulPassivator = config.getStatefulPassivator();
          EJBPMICollaboratorFactory pmiFactory = config.getPmiBeanFactory();
          PassivationPolicy passivationpolicy = config.getPassivationPolicy();
          ivSfFailoverCache = config.getSfFailoverCache();
  
          ivDefaultDataSourceJNDIName = config.getDefaultDataSourceJNDIName();
  
          long cacheSize = config.getCacheSize();
          long cacheSweepInterval = config.getCacheSweepInterval();
  
          ScheduledExecutorService ivScheduledExecutorService = this.getScheduledExecutorService(); // F73234
          ScheduledExecutorService deferrableScheduledExecutorService = this.getDeferrableScheduledExecutorService();
  
          PoolManager poolMgr = PoolManager.newInstance();
          poolMgr.setDrainInterval(config.getInactivePoolCleanupInterval());
          poolMgr.setScheduledExecutorService(ivScheduledExecutorService);
  
          Cache ejbCache = new Cache("EJB Cache", cacheSize, false);
          BackgroundLruEvictionStrategy evictor = new BackgroundLruEvictionStrategy(ejbCache, (int) cacheSize, cacheSweepInterval, ivScheduledExecutorService, deferrableScheduledExecutorService); // F73234
          ejbCache.setEvictionStrategy(evictor);
          evictor.start();
  
          Cache wrapperCache = new Cache("Wrapper Cache", 2 * cacheSize, true);
          SweepLruEvictionStrategy wrapperEvictor = new SweepLruEvictionStrategy(wrapperCache, (int) (2
                                                                                                      * cacheSize), 3
                                                                                                                    * cacheSweepInterval, ivScheduledExecutorService, deferrableScheduledExecutorService); // d118138, F73234
          wrapperCache.setEvictionStrategy(wrapperEvictor);
          wrapperEvictor.start();
  
          WrapperManager wrapperManager = config.getWrapperManager();
          wrapperManager.initialize(wrapperCache);
  
          EJBRequestCollaborator<?>[] afterActivationCollaborators = config.getAfterActivationCollaborators();
          EJBRequestCollaborator<?>[] beforeActivationCollaborators = config.getBeforeActivationCollaborators();
          EJBRequestCollaborator<?> beforeActivationAfterCompletionCollaborators[] = config.getBeforeActivationAfterCompletionCollaborators();
  
          J2EENameFactory j2eeNameFactory = config.getJ2EENameFactory();
          StatefulSessionKeyFactory sessionKeyFactory = config.getStatefulSessionKeyFactory();
          ivWebServicesHandlerResolver = config.getWSEJBHandlerResolver();
  
          // -------------------------------------------------------------------------
          // Initialize EJSContainer with configuration values...
          // -------------------------------------------------------------------------
          ContainerConfig containerConfig = new ContainerConfig(this, null, config.getName(), ejbCache, wrapperManager, passivationpolicy, // LIDB2775-23.4
                          config.getPersisterFactory(), config.getEntityHelper(), pmiFactory, securityCollaborator, statefulPassivator, sessionKeyFactory, // LIDB2775-23.7
                          config.getStatefulSessionHandleFactory(), // F743-13024
                          poolMgr, j2eeNameFactory, config.getObjectCopier(), // RTC102299
                          config.getOrbUtils(), // F743-13024
                          ivUOWControl, afterActivationCollaborators, beforeActivationCollaborators, beforeActivationAfterCompletionCollaborators, cef, // 125942
                          config.getStatefulBeanEnqDeq(), // d646413.2
                          config.getDispatchEventListenerManager(), // d646413.2
                          ivSfFailoverCache, // LIDB2018-1
                          config.isSFSBFailoverEnabled()); // LIDB2018-1
  
          ivContainer.initialize(containerConfig);
  
          InjectionEngine injectionEngine = getInjectionEngine();
  
          try {
              // Register ObjectFactory for EJBContext and subinterfaces.      F48603
              injectionEngine.registerObjectFactory(Resource.class, EntityContext.class, EJBContextObjectFactory.class, false, null, false);
              injectionEngine.registerObjectFactory(Resource.class, EntityContextExtension.class, EJBContextObjectFactory.class, false, null, false);
              injectionEngine.registerObjectFactory(Resource.class, EJBContext.class, EJBContextObjectFactory.class, false, null, false);
              injectionEngine.registerObjectFactory(Resource.class, EJBContextExtension.class, EJBContextObjectFactory.class, false, null, false);
              injectionEngine.registerObjectFactory(Resource.class, SessionContext.class, EJBContextObjectFactory.class, false, null, false);
              injectionEngine.registerObjectFactory(Resource.class, SessionContextExtension.class, EJBContextObjectFactory.class, false, null, false);
              injectionEngine.registerObjectFactory(Resource.class, MessageDrivenContext.class, EJBContextObjectFactory.class, false, null, false);
              injectionEngine.registerObjectFactory(Resource.class, MessageDrivenContextExtension.class, EJBContextObjectFactory.class, false, null, false);
  
              // Register ObjectFactory to handle TimerService refs.           F48603
              injectionEngine.registerObjectFactory(Resource.class, TimerService.class, TimerServiceObjectFactory.class, false, null, false);
          } catch (InjectionException ex) {
              throw new CSIException("Failed to register injection engine object factories", ex);
          }
  
          // Register to bind java:comp/EJBContext, etc.                      F48603
          injectionEngine.registerInjectionMetaDataListener(this);
  
          // Override default managed bean auto link reference factory.    d698540.1
          injectionEngine.registerManagedBeanReferenceFactory(new MBLinkReferenceFactoryImpl());
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "start");
      }