making HealthStatEventReceiver singleton and fixing references in components
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 @@
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
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 @@
// 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");
}
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 @@
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 @@
/**
* 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 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 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;
+// }
}