public synchronized void transition(final ServiceController<?> controller, final ServiceController.Transition transition) { switch (transition) { case STARTING_to_START_FAILED: { failed.add(controller); break; } case START_FAILED_to_STARTING: { failed.remove(controller); break; } case START_REQUESTED_to_PROBLEM: { problem.add(controller); break; } case PROBLEM_to_START_REQUESTED: { problem.remove(controller); break; } } if (transition.leavesRestState()) { outstanding++; } else if (transition.entersRestState()) { if (outstanding-- == 1) { notifyAll(); } } }
@Override public void transition(ServiceController controller, ServiceController.Transition transition) { if (this.direction == Direction.DOWNWARDS) { if (transition.getAfter().equals(ServiceController.Substate.DOWN)) { this.direction = Direction.UPWARDS; this.controller.setMode(this.mode); } } else if (this.direction == Direction.UPWARDS) { if (transition.entersRestState()) { this.controller.removeListener(this); if (this.callback != null) { this.callback.accept(controller); } } } } }