@Override public void dispose() { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Disposing core extensions"); } for (MuleCoreExtension extension : coreExtensions) { if (initializedCoreExtensions.contains(extension)) { try { extension.dispose(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Core extension '{}' disposed", extension.toString()); } } catch (Exception ex) { LOGGER.error("Error disposing core extension " + extension.getName(), ex); } } } initializedCoreExtensions.clear(); }
@Test public void disposesCoreExtensions() throws Exception { List<MuleCoreExtension> extensions = new LinkedList<>(); TestDeploymentServiceAwareExtension extension1 = mock(TestDeploymentServiceAwareExtension.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.dispose(); InOrder inOrder = inOrder(extension1, extension2); inOrder.verify(extension1).dispose(); inOrder.verify(extension2).dispose(); }
@Test public void disposesCoreExtensionsAfterStartFail() 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).initialise(); 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); try { coreExtensionManager.initialise(); fail(); } catch (Exception e) { assertThat(e.getCause(), sameInstance(firstStartFailure)); } coreExtensionManager.dispose(); verify(extension2, never()).dispose(); }
@Override public void dispose() { LOGGER.info("Disposing core extensions"); for (MuleCoreExtension extension : coreExtensions) { try { extension.dispose(); LOGGER.info("Core extension '{}' disposed", extension.toString()); } catch (Exception ex) { LOGGER.error("Error disposing core extension " + extension.getName(), ex); } } }