making HealthStatEventReceiver singleton and fixing references in components
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/5d29c8f0 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/5d29c8f0 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/5d29c8f0 Branch: refs/heads/stratos-4.1.x Commit: 5d29c8f03a2f5809fd82f9bc495622b181359742 Parents: fb5576e Author: Isuru Haththotuwa <[email protected]> Authored: Wed Dec 2 18:09:04 2015 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Mon Dec 7 18:48:09 2015 +0530 ---------------------------------------------------------------------- .../AutoscalerHealthStatEventReceiver.java | 18 +++---- .../internal/AutoscalerServiceComponent.java | 4 +- .../health/stat/HealthStatEventReceiver.java | 52 +++++++++++++------- 3 files changed, 45 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/5d29c8f0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/health/AutoscalerHealthStatEventReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/health/AutoscalerHealthStatEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/health/AutoscalerHealthStatEventReceiver.java index b8482f0..0b13500 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/health/AutoscalerHealthStatEventReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/health/AutoscalerHealthStatEventReceiver.java @@ -45,18 +45,18 @@ public class AutoscalerHealthStatEventReceiver { private ExecutorService executorService; public AutoscalerHealthStatEventReceiver() { - this.healthStatEventReceiver = new HealthStatEventReceiver(); + this.healthStatEventReceiver = HealthStatEventReceiver.getInstance(); addEventListeners(); } - public void execute() { - healthStatEventReceiver.setExecutorService(executorService); - healthStatEventReceiver.execute(); - - if (log.isInfoEnabled()) { - log.info("Autoscaler health stat event receiver thread started"); - } - } +// public void execute() { +// healthStatEventReceiver.setExecutorService(executorService); +// healthStatEventReceiver.execute(); +// +// if (log.isInfoEnabled()) { +// log.info("Autoscaler health stat event receiver thread started"); +// } +// } private void addEventListeners() { // Listen to health stat events that affect clusters http://git-wip-us.apache.org/repos/asf/stratos/blob/5d29c8f0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java index ba7c341..bb28577 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServiceComponent.java @@ -181,8 +181,8 @@ public class AutoscalerServiceComponent { // Start health stat receiver autoscalerHealthStatEventReceiver = new AutoscalerHealthStatEventReceiver(); - autoscalerHealthStatEventReceiver.setExecutorService(executorService); - autoscalerHealthStatEventReceiver.execute(); +// autoscalerHealthStatEventReceiver.setExecutorService(executorService); +// autoscalerHealthStatEventReceiver.execute(); if (log.isDebugEnabled()) { log.debug("Health statistics receiver thread started"); } http://git-wip-us.apache.org/repos/asf/stratos/blob/5d29c8f0/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/health/stat/HealthStatEventReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/health/stat/HealthStatEventReceiver.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/health/stat/HealthStatEventReceiver.java index e73a326..ede8f17 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/health/stat/HealthStatEventReceiver.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/health/stat/HealthStatEventReceiver.java @@ -21,8 +21,10 @@ package org.apache.stratos.messaging.message.receiver.health.stat; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.common.threading.StratosThreadPool; import org.apache.stratos.messaging.broker.subscribe.EventSubscriber; import org.apache.stratos.messaging.listener.EventListener; +import org.apache.stratos.messaging.message.receiver.StratosEventReceiver; import org.apache.stratos.messaging.util.MessagingUtil; import java.util.concurrent.ExecutorService; @@ -30,19 +32,33 @@ import java.util.concurrent.ExecutorService; /** * A thread for receiving health stat information from message broker */ -public class HealthStatEventReceiver { +public class HealthStatEventReceiver extends StratosEventReceiver { private static final Log log = LogFactory.getLog(HealthStatEventReceiver.class); private final HealthStatEventMessageDelegator messageDelegator; private final HealthStatEventMessageListener messageListener; private EventSubscriber eventSubscriber; - private boolean terminated; - private ExecutorService executorService; + private static volatile HealthStatEventReceiver instance; - public HealthStatEventReceiver() { + private HealthStatEventReceiver() { + // TODO: make pool size configurable + this.executorService = StratosThreadPool.getExecutorService("healthstat-event-receiver", 100); HealthStatEventMessageQueue messageQueue = new HealthStatEventMessageQueue(); this.messageDelegator = new HealthStatEventMessageDelegator(messageQueue); this.messageListener = new HealthStatEventMessageListener(messageQueue); + execute(); + } + + public static HealthStatEventReceiver getInstance () { + if (instance == null) { + synchronized (HealthStatEventReceiver.class) { + if (instance == null) { + instance = new HealthStatEventReceiver(); + } + } + } + + return instance; } public void addEventListener(EventListener eventListener) { @@ -50,7 +66,7 @@ public class HealthStatEventReceiver { } - public void execute() { + private void execute() { try { // Start topic subscriber thread eventSubscriber = new EventSubscriber(MessagingUtil.Topics.HEALTH_STAT_TOPIC.getTopicName(), messageListener); @@ -69,17 +85,17 @@ public class HealthStatEventReceiver { } } - public void terminate() { - eventSubscriber.terminate(); - messageDelegator.terminate(); - terminated = true; - } - - public ExecutorService getExecutorService() { - return executorService; - } - - public void setExecutorService(ExecutorService executorService) { - this.executorService = executorService; - } +// public void terminate() { +// eventSubscriber.terminate(); +// messageDelegator.terminate(); +// terminated = true; +// } +// +// public ExecutorService getExecutorService() { +// return executorService; +// } +// +// public void setExecutorService(ExecutorService executorService) { +// this.executorService = executorService; +// } }
