docs: @Override
      @FFDCIgnore(ConfigParserTolerableException.class)
      public void start(BundleContext bc) {
          try {
              locationTracker = new ServiceTracker<WsLocationAdmin, WsLocationAdmin>(bc, WsLocationAdmin.class.getName(), null);
              locationTracker.open();
  
              variableRegistryTracker = new ServiceTracker<VariableRegistry, VariableRegistry>(bc, VariableRegistry.class.getName(), null);
              variableRegistryTracker.open();
  
              caSupportTracker = new ServiceTracker<SystemConfigSupport, SystemConfigSupport>(bc, SystemConfigSupport.class.getName(), null);
              caSupportTracker.open();
  
              SystemConfigSupport systemConfigSupport = caSupportTracker.getService();
              ServiceReference<ConfigurationAdmin> caAdminRef = bc.getServiceReference(ConfigurationAdmin.class);
              ConfigurationAdmin configAdmin = bc.getService(caAdminRef);
  
              // Create MetaTypeRegistry and register as a service
              metaTypeRegistry = new MetaTypeRegistry();
              metaTypeRegistry.start(bc);
  
              Dictionary<String, Object> properties = new Hashtable<String, Object>();
              properties.put("service.vendor", "IBM");
              bc.registerService(MetaTypeRegistry.class.getName(), metaTypeRegistry, properties);
  
              // Create SystemConfiguration and start
              systemConfiguration = new SystemConfiguration(bc, systemConfigSupport, configAdmin, this.getOnError());
              systemConfiguration.start();
              bc.registerService(SystemConfiguration.class.getName(), systemConfiguration, properties);
  
              // Open MS/MSF Trackers
              systemConfigSupport.openManagedServiceTrackers();
          } catch (ConfigMergeException e) {
              // Always fail
              quit(bc, e);
          } catch (ConfigUpdateException e) {
              if (this.getOnError().equals(OnError.FAIL)) {
                  quit(bc, e);
              }
          } catch (ConfigParserTolerableException e) {
              // We only get back here with a parser exception if we intend to fail startup
              quit(bc, e);
          } catch (ConfigValidationException cve) {
              if (!cve.docLocation.isEmpty())
                  Tr.fatal(tc, "fatal.configValidator.documentNotValid", cve.docLocation);
              quit(bc, cve);
          } catch (Exception e) {
              // this is something fatal/unexpected an usually means we can't process config
              quit(bc, e);
          }
      }