/** Actual stop */
  private void internalStop() {
    state = ComponentStatus.STOPPING;
    removeShutdownHook();

    List<PrioritizedMethod> stopMethods = new ArrayList<PrioritizedMethod>(componentLookup.size());
    for (Component c : componentLookup.values()) stopMethods.addAll(c.stopMethods);

    Collections.sort(stopMethods);

    // fire all STOP methods according to priority
    for (PrioritizedMethod em : stopMethods) em.invoke();

    destroy();
  }
  private void internalStart() throws CacheException, IllegalArgumentException {
    // start all internal components
    // first cache all start, stop and destroy methods.
    populateLifecycleMethods();

    List<PrioritizedMethod> startMethods = new ArrayList<PrioritizedMethod>(componentLookup.size());
    for (Component c : componentLookup.values()) startMethods.addAll(c.startMethods);

    // sort the start methods by priority
    Collections.sort(startMethods);

    // fire all START methods according to priority

    for (PrioritizedMethod em : startMethods) em.invoke();

    addShutdownHook();

    getLog().version(Version.printVersion());
    state = ComponentStatus.RUNNING;
  }