/**
   * Initialize log level overrides from debug options.
   *
   * <p>This may only be called during bootstrapping before any custom overrides are set. Your
   * milage may vary if called while the application is running.
   *
   * @throws Exception
   */
  void initializeLogLevelOverrides() throws Exception {
    // reset current overrides
    overriddenLogLevels.clear();

    // add a note to the status manager
    final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    final StatusManager sm = lc.getStatusManager();
    if (sm != null) {
      sm.add(new InfoStatus("Initializing log level overrides.", this));
    }

    // apply new overrides
    try {
      final Map<String, String> options =
          BootActivator.getInstance().getService(DebugOptions.class).getOptions();
      for (final Entry<String, String> e : options.entrySet()) {
        final String loggerName = getLoggerNameForDebugOption(e.getKey());
        if (loggerName != null) {
          if ((null != e.getValue()) && !"false".equalsIgnoreCase(e.getValue())) {
            setLogLevelOverride(loggerName, "DEBUG");
          }
        }
      }
    } catch (final ServiceNotAvailableException e) {
      // no debug options available (ignore)
    }
  }
  static synchronized void doStart() throws Exception {
    if (state != Status.STARTING) return;

    // do not start if running in production mode and not explicitly set
    final EnvironmentInfo info = BootActivator.getEnvironmentInfo();
    if (info.getProperty("gyrex.jmxrmi.skip") != null) return;

    // use defaults from
    // http://wiki.eclipse.org/Jetty/Tutorial/JMX#Enabling_JMXConnectorServer_for_Remote_Access
    String host = "localhost";
    int port = Platform.getInstancePort(1099);

    // allow port and host override through arguments
    if (info.getProperty(PROPERTY_PORT) != null) {
      try {
        port = Integer.parseInt(info.getProperty(PROPERTY_PORT));
      } catch (final Exception e) {
        throw new IllegalArgumentException(
            String.format("Invalid JMX port (%s).", info.getProperty(PROPERTY_PORT)), e);
      }
    }
    if (info.getProperty(PROPERTY_HOST) != null) {
      host = info.getProperty(PROPERTY_HOST);
    }

    // TODO: may want to support protected access using <instance-location>/etc/jmx/... files

    LOG.info("Enabling JMX remote connections on port {} (host {}).", new Object[] {port, host});

    final JMXServiceURL url =
        new JMXServiceURL("rmi", host, port, String.format("/jndi/rmi://%s:%d/jmxrmi", host, port));
    connectorServer =
        new ConnectorServer(url, null, "org.eclipse.gyrex.jmx:name=rmiconnectorserver");
    connectorServer.start();

    state = Status.STARTED;
  }