making TenantEventReceiver a singleton and fixing the references in the components
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/170c27cc Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/170c27cc Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/170c27cc Branch: refs/heads/master Commit: 170c27cc61aaddcb2a28239e98ad11b438b421bb Parents: b3dc546 Author: Isuru Haththotuwa <[email protected]> Authored: Wed Dec 2 17:49:15 2015 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Thu Dec 24 20:04:05 2015 +0530 ---------------------------------------------------------------------- .../agent/CartridgeAgentEventListeners.java | 4 +-- .../internal/LoadBalancerServiceComponent.java | 6 ++-- .../receiver/tenant/TenantEventReceiver.java | 31 +++++++++++++++----- 3 files changed, 29 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/170c27cc/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgentEventListeners.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgentEventListeners.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgentEventListeners.java index 1d64ff0..ffa3750 100644 --- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgentEventListeners.java +++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgentEventListeners.java @@ -79,8 +79,8 @@ public class CartridgeAgentEventListeners { this.instanceNotifierEventReceiver = new InstanceNotifierEventReceiver(); - this.tenantEventReceiver = new TenantEventReceiver(); - this.tenantEventReceiver.setExecutorService(eventListenerExecutorService); + this.tenantEventReceiver = TenantEventReceiver.getInstance(); +// this.tenantEventReceiver.setExecutorService(eventListenerExecutorService); extensionHandler = new DefaultExtensionHandler(); http://git-wip-us.apache.org/repos/asf/stratos/blob/170c27cc/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java index 442686a..e772322 100644 --- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java +++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/internal/LoadBalancerServiceComponent.java @@ -225,9 +225,9 @@ public class LoadBalancerServiceComponent { private void startTenantEventReceiver(ExecutorService executorService) { - tenantEventReceiver = new TenantEventReceiver(); - tenantEventReceiver.setExecutorService(executorService); - tenantEventReceiver.execute(); + tenantEventReceiver = TenantEventReceiver.getInstance(); +// tenantEventReceiver.setExecutorService(executorService); +// tenantEventReceiver.execute(); if (log.isInfoEnabled()) { log.info("Tenant event receiver thread started"); } http://git-wip-us.apache.org/repos/asf/stratos/blob/170c27cc/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java index 988a2ce..1c519b9 100644 --- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java +++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/receiver/tenant/TenantEventReceiver.java @@ -21,11 +21,13 @@ package org.apache.stratos.messaging.message.receiver.tenant; 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.publish.EventPublisher; import org.apache.stratos.messaging.broker.publish.EventPublisherPool; import org.apache.stratos.messaging.broker.subscribe.EventSubscriber; import org.apache.stratos.messaging.event.initializer.CompleteTenantRequestEvent; 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; @@ -34,28 +36,43 @@ import java.util.concurrent.ExecutorService; * A thread for receiving tenant information from message broker and * build tenant information in tenant manager. */ -public class TenantEventReceiver { +public class TenantEventReceiver extends StratosEventReceiver { private static final Log log = LogFactory.getLog(TenantEventReceiver.class); private TenantEventMessageDelegator messageDelegator; private TenantEventMessageListener messageListener; private EventSubscriber eventSubscriber; - private ExecutorService executorService; + private static volatile TenantEventReceiver instance; - public TenantEventReceiver() { + private TenantEventReceiver() { + // TODO: make pool size configurable + this.executorService = StratosThreadPool.getExecutorService("tenant-event-receiver", 100); TenantEventMessageQueue messageQueue = new TenantEventMessageQueue(); this.messageDelegator = new TenantEventMessageDelegator(messageQueue); this.messageListener = new TenantEventMessageListener(messageQueue); + execute(); + } + + public static TenantEventReceiver getInstance () { + if (instance == null) { + synchronized (TenantEventReceiver.class) { + if (instance == null) { + instance = new TenantEventReceiver(); + } + } + } + + return instance; } public void addEventListener(EventListener eventListener) { messageDelegator.addEventListener(eventListener); } - public void setExecutorService(ExecutorService executorService) { - this.executorService = executorService; - } +// public void setExecutorService(ExecutorService executorService) { +// this.executorService = executorService; +// } - public void execute() { + private void execute() { try { // Start topic subscriber thread eventSubscriber = new EventSubscriber(MessagingUtil.Topics.TENANT_TOPIC.getTopicName(), messageListener);
