/* * Copyright 2015 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wso2.carbon.registry.event.core.internal.builder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; import org.wso2.carbon.CarbonConstants; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.registry.event.core.EventBroker; import org.wso2.carbon.registry.event.core.EventBundleNotificationService; import org.wso2.carbon.registry.event.core.qpid.QpidServerDetails; import org.wso2.carbon.registry.event.core.exception.EventBrokerConfigurationException; import org.wso2.carbon.registry.event.core.exception.EventBrokerException; import org.wso2.carbon.registry.event.core.internal.CarbonEventBroker; import org.wso2.carbon.registry.event.core.internal.util.EventBrokerHolder; import org.wso2.carbon.utils.Axis2ConfigurationContextObserver; import org.wso2.carbon.utils.multitenancy.MultitenantConstants; public class EventBrokerHandler implements EventBundleNotificationService { private static final Log log = LogFactory.getLog(EventBrokerHandler.class); private ComponentContext context; private ServiceRegistration eventServiceRegistration; public EventBrokerHandler(ComponentContext context) { this.context = context; } public void startEventBroker() { try { // set incarnate this thread to supper tenat since carbon contexes can only be // run is supertenants PrivilegedCarbonContext.startTenantFlow(); PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID); PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(CarbonConstants.REGISTRY_SYSTEM_USERNAME); EventBroker eventBroker = EventBrokerBuilder.createEventBroker(); this.eventServiceRegistration = this.context.getBundleContext().registerService(EventBroker.class.getName(), eventBroker, null); // register the tenat login listener EventAxis2ConfigurationContextObserver observer = new EventAxis2ConfigurationContextObserver(); observer.setEventBroker(eventBroker); this.context.getBundleContext().registerService( Axis2ConfigurationContextObserver.class.getName(), observer, null); if(log.isDebugEnabled()){ log.info("Successfully registered the event broker"); } } catch (EventBrokerConfigurationException e) { log.error("Can not create the event broker", e); } finally { PrivilegedCarbonContext.endTenantFlow(); } } public void stopEventBroker() { ServiceReference serviceReference = this.context.getBundleContext().getServiceReference(EventBroker.class.getName()); CarbonEventBroker carbonEventBroker = (CarbonEventBroker) this.context.getBundleContext().getService(serviceReference); //unregister the service before cleaning up. this.eventServiceRegistration.unregister(); try { carbonEventBroker.cleanUp(); } catch (EventBrokerException e) { log.error("Can not clean up the carbon broker ", e); } } public void notifyStart(QpidServerDetails qpidServerDetails) { EventBrokerHolder.getInstance().registerQpidServerDetails(qpidServerDetails); this.startEventBroker(); } }