@Override public void stop() throws MuleException { if (orderedCoreExtensions == null) { return; } if (LOGGER.isDebugEnabled()) { LOGGER.debug("Stopping core extensions"); } for (int i = orderedCoreExtensions.size() - 1; i >= 0; i--) { MuleCoreExtension extension = orderedCoreExtensions.get(i); if (startedCoreExtensions.contains(extension)) { try { extension.stop(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Core extension '{}' stopped", extension.toString()); } } catch (Throwable e) { LOGGER.warn("Error stopping core extension: " + extension.getName(), e); } } } startedCoreExtensions.clear(); }
@Test public void stopsCoreExtensionsInOrder() throws Exception { List<MuleCoreExtension> extensions = new LinkedList<>(); MuleCoreExtension extension1 = mock(MuleCoreExtension.class); MuleCoreExtension extension2 = mock(MuleCoreExtension.class); extensions.add(extension1); extensions.add(extension2); when(coreExtensionDiscoverer.discover()).thenReturn(extensions); List<MuleCoreExtension> orderedExtensions = new LinkedList<>(); orderedExtensions.add(extension1); orderedExtensions.add(extension2); when(coreExtensionDependencyResolver.resolveDependencies(extensions)).thenReturn(orderedExtensions); coreExtensionManager.initialise(); coreExtensionManager.start(); coreExtensionManager.stop(); InOrder ordered = inOrder(extension1, extension2); ordered.verify(extension2).stop(); ordered.verify(extension1).stop(); }
@Test public void stopsCoreExtensionsAfterStartFail() throws Exception { List<MuleCoreExtension> extensions = new LinkedList<>(); MuleCoreExtension extension1 = mock(MuleCoreExtension.class); MuleCoreExtension extension2 = mock(MuleCoreExtension.class); Exception firstStartFailure = new RuntimeException(); doThrow(firstStartFailure).when(extension1).start(); when(coreExtensionDiscoverer.discover()).thenReturn(extensions); extensions.add(extension1); extensions.add(extension2); List<MuleCoreExtension> orderedExtensions = new LinkedList<>(); orderedExtensions.add(extension1); orderedExtensions.add(extension2); when(coreExtensionDependencyResolver.resolveDependencies(extensions)).thenReturn(orderedExtensions); coreExtensionManager.initialise(); try { coreExtensionManager.start(); fail(); } catch (Exception e) { assertThat(e, sameInstance(firstStartFailure)); } coreExtensionManager.stop(); verify(extension2, never()).stop(); }
@Override public void stop() throws MuleException { if (orderedCoreExtensions == null) { return; } LOGGER.info("Stopping core extensions"); for (int i = orderedCoreExtensions.size() - 1; i >= 0; i--) { MuleCoreExtension extension = orderedCoreExtensions.get(i); try { extension.stop(); LOGGER.info("Core extension '{}' stopped", extension.toString()); } catch (Throwable e) { LOGGER.warn("Error stopping core extension: " + extension.getName(), e); } } }