private void transition(State targetState) { // Short-circuit if the service is already at the target state if (this.controller.getState() == targetState) return; StabilityMonitor monitor = new StabilityMonitor(); monitor.addController(this.controller); try { // Force service to transition to desired state Mode targetMode = modeToggle.get(targetState).get(this.controller.getMode()); if (targetMode != null) { this.controller.setMode(targetMode); } monitor.awaitStability(); if (this.controller.getState() == ServiceController.State.START_FAILED) { throw new IllegalStateException(this.controller.getStartException()); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { monitor.removeController(this.controller); } } }
throw new IllegalStateException(controller.getStartException());
monitor.removeController(binderServiceController); final Exception startException = binderServiceController.getStartException(); if (startException != null) { throw startException;
public StartException getStartException() { return controller.getStartException(); }
public StartException getStartException() { return controller.getStartException(); }
public synchronized void transition(ServiceController<? extends Object> serviceController, ServiceController.Transition transition) { switch (transition) { case STARTING_to_UP: { complete = true; notifyAll(); break; } case STARTING_to_START_FAILED: { complete = true; exception = serviceController.getStartException(); notifyAll(); break; } default: break; } }
/** {@inheritDoc} */ @Override public StartException getStartException() { return getDelegate().getStartException(); }
/** {@inheritDoc} */ @Override public StartException getStartException() { return getDelegate().getStartException(); }
@Override public void transition(ServiceController<?> controller, ServiceController.Transition transition) { if (transition.enters(ServiceController.State.START_FAILED)) { StartException exception = controller.getStartException(); Throwable cause = exception.getCause(); testableArchiveService.setError(cause); } } });
@Override public void transition(ServiceController<?> controller, ServiceController.Transition transition) { if (transition.enters(ServiceController.State.START_FAILED)) { StartException exception = controller.getStartException(); Throwable cause = exception.getCause(); testableArchiveService.setError(cause); } } });
@Override public void listenerAdded(ServiceController<? extends ModuleDefinition> controller) { log.tracef("listenerAdded: %s", controller); State state = controller.getState(); if (state == State.UP || state == State.START_FAILED) { done(controller, controller.getStartException()); } }
@Override public void listenerAdded(ServiceController<? extends ModuleSpec> controller) { log.tracef("listenerAdded: %s", controller); State state = controller.getState(); if (state == State.UP || state == State.START_FAILED) { done(controller, controller.getStartException()); } }
@Override public void transition(ServiceController<?> controller, ServiceController.Transition transition) { if (transition.getAfter().equals(ServiceController.Substate.START_FAILED)) { log.errorf(controller.getStartException(), "Unable to start service: %s", controller.getName()); } } });
private void transition(State targetState) { // Short-circuit if the service is already at the target state if (this.controller.getState() == targetState) return; StabilityMonitor monitor = new StabilityMonitor(); monitor.addController(this.controller); try { // Force service to transition to desired state Mode targetMode = modeToggle.get(targetState).get(this.controller.getMode()); if (targetMode != null) { this.controller.setMode(targetMode); } monitor.awaitStability(); if (this.controller.getState() == ServiceController.State.START_FAILED) { throw new IllegalStateException(this.controller.getStartException()); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { monitor.removeController(this.controller); } } }
@Override public void transition(final ServiceController<? extends ModuleSpec> controller, final ServiceController.Transition transition) { switch (transition) { case STARTING_to_UP: log.tracef("serviceStarted: %s", controller); done(controller, null); break; case STARTING_to_START_FAILED: log.tracef(controller.getStartException(), "serviceFailed: %s", controller); done(controller, controller.getStartException()); break; case STOP_REQUESTED_to_STOPPING: { log.tracef("serviceStopping: %s", controller); ModuleSpec moduleSpec = this.moduleSpec; ModuleIdentifier identifier = moduleSpec.getModuleIdentifier(); Module module = findLoadedModuleLocal(identifier); if(module != null) unloadModuleLocal(module); // TODO: what if the service is restarted? controller.removeListener(this); break; } } }
@Override public void transition(final ServiceController<? extends ModuleDefinition> controller, final ServiceController.Transition transition) { switch (transition) { case STARTING_to_UP: log.tracef("serviceStarted: %s", controller); done(controller, null); break; case STARTING_to_START_FAILED: log.tracef(controller.getStartException(), "serviceFailed: %s", controller); done(controller, controller.getStartException()); break; case STOP_REQUESTED_to_STOPPING: { log.tracef("serviceStopping: %s", controller); ModuleSpec moduleSpec = this.moduleSpec; ModuleIdentifier identifier = moduleSpec.getModuleIdentifier(); Module module = findLoadedModuleLocal(identifier); if(module != null) unloadModuleLocal(module); // TODO: what if the service is restarted? controller.removeListener(this); break; } } }
@Override public void handleEvent(final ServiceController<?> controller, final LifecycleEvent event) { latch.awaitUninterruptibly(); switch (event) { case UP: log.tracef("serviceStarted: %s", controller); done(controller, null); break; case FAILED: log.tracef(controller.getStartException(), "serviceFailed: %s", controller); done(controller, controller.getStartException()); break; case DOWN: { log.tracef("serviceStopping: %s", controller); ModuleSpec moduleSpec = this.moduleSpec; String identifier = moduleSpec.getName(); Module module = findLoadedModuleLocal(identifier); if(module != null) unloadModuleLocal(identifier, module); // TODO: what if the service is restarted? controller.removeListener(this); break; } } }
@Override public void handleEvent(final ServiceController<?> controller, final LifecycleEvent event) { latch.awaitUninterruptibly(); switch (event) { case UP: log.tracef("serviceStarted: %s", controller); done(controller, null); break; case FAILED: log.tracef(controller.getStartException(), "serviceFailed: %s", controller); done(controller, controller.getStartException()); break; case DOWN: { log.tracef("serviceStopping: %s", controller); ModuleSpec moduleSpec = this.moduleSpec; String identifier = moduleSpec.getName(); Module module = findLoadedModuleLocal(identifier); if(module != null) unloadModuleLocal(identifier, module); // TODO: what if the service is restarted? controller.removeListener(this); break; } } }
@SuppressWarnings("unchecked") @Override public ModuleSpec findModule(ModuleIdentifier identifier) throws ModuleLoadException { ServiceController<ModuleDefinition> controller = (ServiceController<ModuleDefinition>) serviceContainer.getService(moduleSpecServiceName(identifier)); if (controller == null) { ServerLogger.MODULE_SERVICE_LOGGER.debugf("Could not load module '%s' as corresponding module spec service '%s' was not found", identifier, identifier); return null; } UninterruptibleCountDownLatch latch = new UninterruptibleCountDownLatch(1); ModuleSpecLoadListener listener = new ModuleSpecLoadListener(latch); try { synchronized (controller) { final State state = controller.getState(); if (state == State.UP || state == State.START_FAILED) { listener.done(controller, controller.getStartException()); } } controller.addListener(listener); } finally { latch.countDown(); } return listener.getModuleSpec(); }
@SuppressWarnings("unchecked") @Override public ModuleSpec findModule(ModuleIdentifier identifier) throws ModuleLoadException { ServiceController<ModuleDefinition> controller = (ServiceController<ModuleDefinition>) serviceContainer.getService(moduleSpecServiceName(identifier)); if (controller == null) { ServerLogger.MODULE_SERVICE_LOGGER.debugf("Could not load module '%s' as corresponding module spec service '%s' was not found", identifier, identifier); return null; } UninterruptibleCountDownLatch latch = new UninterruptibleCountDownLatch(1); ModuleSpecLoadListener listener = new ModuleSpecLoadListener(latch); try { synchronized (controller) { final State state = controller.getState(); if (state == State.UP || state == State.START_FAILED) { listener.done(controller, controller.getStartException()); } } controller.addListener(listener); } finally { latch.countDown(); } return listener.getModuleSpec(); }