Repository: incubator-stratos Updated Branches: refs/heads/master ec84193b2 -> 1295d29c1
making Cartridge Agent to accept an implementation of CartridgeAgent as an argument Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/ae7f9062 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/ae7f9062 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/ae7f9062 Branch: refs/heads/master Commit: ae7f9062df5b08b8ab37fa34ddaa5cb15911cb92 Parents: 71f282b Author: Nirmal Fernando <[email protected]> Authored: Tue Mar 18 18:29:19 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Tue Mar 18 18:29:19 2014 +0530 ---------------------------------------------------------------------- .../stratos/cartridge/agent/CartridgeAgent.java | 121 ++++++++++--------- .../apache/stratos/cartridge/agent/Main.java | 27 ++++- 2 files changed, 90 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ae7f9062/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java index c735355..105c069 100644 --- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java +++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java @@ -41,31 +41,58 @@ public class CartridgeAgent implements Runnable { log.info("Cartridge agent started"); } - String jndiPropertiesDir = System.getProperty(CartridgeAgentConstants.JNDI_PROPERTIES_DIR); - if(StringUtils.isBlank(jndiPropertiesDir)) { - if(log.isErrorEnabled()){ - log.error(String.format("System property not found: %s", CartridgeAgentConstants.JNDI_PROPERTIES_DIR)); + validateRequiredSystemProperties(); + + // Start instance notifier listener thread + subscribeToTopicsAndRegisterListeners(); + + // Publish instance started event + CartridgeAgentEventPublisher.publishInstanceStartedEvent(); + + // Execute start servers extension + ExtensionUtils.executeStartServersExtension(); + + // Wait for all ports to be active + CartridgeAgentUtils.waitUntilPortsActive("localhost", CartridgeAgentConfiguration.getInstance().getPorts()); + + // Check repo url + String repoUrl = CartridgeAgentConfiguration.getInstance().getRepoUrl(); + if ("null".equals(repoUrl) || StringUtils.isBlank(repoUrl)) { + if(log.isInfoEnabled()) { + log.info("No artifact repository found"); } - return; + + // Publish instance activated event + CartridgeAgentEventPublisher.publishInstanceActivatedEvent(); } - String payloadPath = System.getProperty(CartridgeAgentConstants.PARAM_FILE_PATH); - if(StringUtils.isBlank(payloadPath)) { - if(log.isErrorEnabled()){ - log.error(String.format("System property not found: %s", CartridgeAgentConstants.PARAM_FILE_PATH)); - } - return; + String persistanceMappingsPayload = CartridgeAgentConfiguration.getInstance().getPersistanceMappings(); + if(persistanceMappingsPayload != null) { + ExtensionUtils.executeVolumeMountExtension(persistanceMappingsPayload); } + // TODO: Start this thread only if this node is configured as a commit true node + // Start periodical file checker task + // ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + // scheduler.scheduleWithFixedDelay(new RepositoryFileListener(), 0, 10, TimeUnit.SECONDS); - String extensionsDir = System.getProperty(CartridgeAgentConstants.EXTENSIONS_DIR); - if(StringUtils.isBlank(extensionsDir)) { - if(log.isWarnEnabled()){ - log.warn(String.format("System property not found: %s", CartridgeAgentConstants.EXTENSIONS_DIR)); - } + // Keep the thread live until terminated + + // start log publishing + LogPublisherManager logPublisherManager = new LogPublisherManager(); + publishLogs(logPublisherManager); + + while (!terminated) { + try { + Thread.sleep(1000); + } catch (InterruptedException ignore) { + } } - // Start instance notifier listener thread - if(log.isDebugEnabled()) { + logPublisherManager.stop(); + } + + protected void subscribeToTopicsAndRegisterListeners() { + if(log.isDebugEnabled()) { log.debug("Starting instance notifier event message receiver thread"); } InstanceNotifierMessageProcessorChain processorChain = new InstanceNotifierMessageProcessorChain(); @@ -110,50 +137,32 @@ public class CartridgeAgent implements Runnable { } catch (InterruptedException e) { } } + } - // Publish instance started event - CartridgeAgentEventPublisher.publishInstanceStartedEvent(); - - // Execute start servers extension - ExtensionUtils.executeStartServersExtension(); - - // Wait for all ports to be active - CartridgeAgentUtils.waitUntilPortsActive("localhost", CartridgeAgentConfiguration.getInstance().getPorts()); - - // Check repo url - String repoUrl = CartridgeAgentConfiguration.getInstance().getRepoUrl(); - if ("null".equals(repoUrl) || StringUtils.isBlank(repoUrl)) { - if(log.isInfoEnabled()) { - log.info("No artifact repository found"); + protected void validateRequiredSystemProperties() { + String jndiPropertiesDir = System.getProperty(CartridgeAgentConstants.JNDI_PROPERTIES_DIR); + if(StringUtils.isBlank(jndiPropertiesDir)) { + if(log.isErrorEnabled()){ + log.error(String.format("System property not found: %s", CartridgeAgentConstants.JNDI_PROPERTIES_DIR)); } - - // Publish instance activated event - CartridgeAgentEventPublisher.publishInstanceActivatedEvent(); + return; } - String persistanceMappingsPayload = CartridgeAgentConfiguration.getInstance().getPersistanceMappings(); - if(persistanceMappingsPayload != null) - ExtensionUtils.executeVolumeMountExtension(persistanceMappingsPayload); - // TODO: Start this thread only if this node is configured as a commit true node - // Start periodical file checker task - // ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - // scheduler.scheduleWithFixedDelay(new RepositoryFileListener(), 0, 10, TimeUnit.SECONDS); - - // Keep the thread live until terminated - - // start log publishing - LogPublisherManager logPublisherManager = new LogPublisherManager(); - publishLogs(logPublisherManager); - - while (!terminated) { - try { - Thread.sleep(1000); - } catch (InterruptedException ignore) { - } + String payloadPath = System.getProperty(CartridgeAgentConstants.PARAM_FILE_PATH); + if(StringUtils.isBlank(payloadPath)) { + if(log.isErrorEnabled()){ + log.error(String.format("System property not found: %s", CartridgeAgentConstants.PARAM_FILE_PATH)); + } + return; } - logPublisherManager.stop(); - } + String extensionsDir = System.getProperty(CartridgeAgentConstants.EXTENSIONS_DIR); + if(StringUtils.isBlank(extensionsDir)) { + if(log.isWarnEnabled()){ + log.warn(String.format("System property not found: %s", CartridgeAgentConstants.EXTENSIONS_DIR)); + } + } + } private static void publishLogs (LogPublisherManager logPublisherManager) { http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/ae7f9062/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java index 5f00281..3bf73e7 100644 --- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java +++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/Main.java @@ -19,6 +19,8 @@ package org.apache.stratos.cartridge.agent; +import java.lang.reflect.Constructor; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.log4j.PropertyConfigurator; @@ -31,7 +33,7 @@ import org.apache.stratos.cartridge.agent.config.configurator.JndiConfigurator; public class Main { private static final Log log = LogFactory.getLog(Main.class); - private static CartridgeAgent cartridgeAgent; + private static CartridgeAgent cartridgeAgent = null; public static void main(String[] args) { try { @@ -47,7 +49,28 @@ public class Main { // Initialize cartridge agent configuration CartridgeAgentConfiguration.getInstance(); - cartridgeAgent = new CartridgeAgent(); + if (args.length >= 1) { + String className = args[0]; + try { + Constructor<?> c = Class.forName(className) + .getConstructor(); + cartridgeAgent = (CartridgeAgent) c.newInstance(); + log.info("Loaded Cartridge Agent using [class] "+className); + } catch (Exception e) { + String msg = String.format("Cannot load Cartridge Agent from [class name] %s, " + + "hence using the default agent.", className); + log.warn(msg, e); + } + } + + if (cartridgeAgent == null) { + // load default agent + cartridgeAgent = new CartridgeAgent(); + if (log.isDebugEnabled()) { + log.debug("Loading default Cartridge Agent."); + } + } + // start agent Thread thread = new Thread(cartridgeAgent); thread.start(); } catch (Exception e) {
