diff --git a/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java b/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java index 938de3abc..5f2cac788 100644 --- a/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java +++ b/src/main/java/li/strolch/agent/impl/ComponentContainerImpl.java @@ -152,6 +152,9 @@ public class ComponentContainerImpl implements ComponentContainer { // initialize each component for (ComponentController controller : controllers) { + if (controller.getState() == ComponentState.INITIALIZED) + continue; + StrolchComponent component = controller.getComponent(); String componentName = component.getName(); ComponentConfiguration componentConfiguration = this.strolchConfiguration @@ -173,6 +176,9 @@ public class ComponentContainerImpl implements ComponentContainer { // Start each component for (ComponentController controller : controllers) { + if (controller.getState() == ComponentState.STARTED) + continue; + StrolchComponent component = controller.getComponent(); String msg = "Starting component {0}..."; //$NON-NLS-1$ String componentName = component.getName(); @@ -191,6 +197,9 @@ public class ComponentContainerImpl implements ComponentContainer { // Stop each component for (ComponentController controller : controllers) { + if (controller.getState() == ComponentState.STOPPED) + continue; + StrolchComponent component = controller.getComponent(); String msg = "Stopping component {0}..."; //$NON-NLS-1$ String componentName = component.getName(); @@ -208,6 +217,9 @@ public class ComponentContainerImpl implements ComponentContainer { // Destroy each component for (ComponentController controller : controllers) { + if (controller.getState() == ComponentState.DESTROYED) + continue; + StrolchComponent component = controller.getComponent(); String msg = "Destroying component {0}..."; //$NON-NLS-1$ String componentName = component.getName(); diff --git a/src/main/java/li/strolch/agent/impl/ComponentController.java b/src/main/java/li/strolch/agent/impl/ComponentController.java index 90fe72f43..323ccda95 100644 --- a/src/main/java/li/strolch/agent/impl/ComponentController.java +++ b/src/main/java/li/strolch/agent/impl/ComponentController.java @@ -19,6 +19,7 @@ import java.text.MessageFormat; import java.util.HashSet; import java.util.Set; +import li.strolch.agent.api.ComponentState; import li.strolch.agent.api.StrolchComponent; import li.strolch.runtime.configuration.StrolchConfigurationException; @@ -36,6 +37,10 @@ public class ComponentController { this.downstreamDependencies = new HashSet<>(); } + public ComponentState getState() { + return this.component.getState(); + } + public StrolchComponent getComponent() { return this.component; } diff --git a/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java b/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java index 59f147d16..127c51979 100644 --- a/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java +++ b/src/main/java/li/strolch/agent/impl/ComponentDependencyAnalyzer.java @@ -25,8 +25,14 @@ import li.strolch.runtime.configuration.ComponentConfiguration; import li.strolch.runtime.configuration.StrolchConfiguration; import li.strolch.runtime.configuration.StrolchConfigurationException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.eitchnet.utils.helper.StringHelper; + public class ComponentDependencyAnalyzer { + private static final Logger logger = LoggerFactory.getLogger(ComponentDependencyAnalyzer.class); private StrolchConfiguration strolchConfiguration; private Map controllerMap; @@ -134,5 +140,21 @@ public class ComponentDependencyAnalyzer { controller.addUpstreamDependency(dependency); } } + + logDependencies(0, findRootUpstreamComponents()); + } + + /** + * @param components + */ + private void logDependencies(int depth, Set components) { + if (depth == 0) { + logger.info("Dependency tree:"); + } + String inset = StringHelper.normalizeLength(" ", depth * 2, false, ' '); + for (ComponentController controller : components) { + logger.info(inset + controller.getComponent().getName()); + logDependencies(depth + 1, controller.getDownstreamDependencies()); + } } } diff --git a/src/test/java/li/strolch/runtime/test/component/ConfigurationParserTest.java b/src/test/java/li/strolch/runtime/test/component/ConfigurationParserTest.java index 3f680338c..de60bdad8 100644 --- a/src/test/java/li/strolch/runtime/test/component/ConfigurationParserTest.java +++ b/src/test/java/li/strolch/runtime/test/component/ConfigurationParserTest.java @@ -17,6 +17,7 @@ package li.strolch.runtime.test.component; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.io.File; @@ -81,6 +82,7 @@ public class ConfigurationParserTest { assertEquals("li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler", privilegeHandlerConfiguration.getImpl()); assertEquals(1, privilegeHandlerConfiguration.getPropertyKeys().size()); + assertTrue(privilegeHandlerConfiguration.getDependencies().contains("PersistenceHandler")); assertEquals("PrivilegeConfig.xml", privilegeHandlerConfiguration.getString("privilegeConfigFile", null)); // diff --git a/src/test/resources/configtest/config/StrolchConfiguration.xml b/src/test/resources/configtest/config/StrolchConfiguration.xml index 2c737c4e9..008c3327a 100644 --- a/src/test/resources/configtest/config/StrolchConfiguration.xml +++ b/src/test/resources/configtest/config/StrolchConfiguration.xml @@ -28,6 +28,8 @@ ResourceGeneratorHandler li.strolch.runtime.test.component.model.ResourceGeneratorHandlerTest li.strolch.runtime.test.component.model.ResourceGeneratorHandlerTestImpl + PersistenceHandler + ServiceHandler true