/** * Copyright (c) 2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * 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.mediation.initializer; import org.apache.axis2.AxisFault; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.deployment.DeploymentEngine; import org.apache.axis2.description.AxisServiceGroup; import org.apache.axis2.description.Parameter; import org.apache.axis2.engine.AxisConfiguration; import org.apache.commons.io.FileUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.synapse.ServerConfigurationInformation; import org.apache.synapse.ServerConfigurationInformationFactory; import org.apache.synapse.ServerContextInformation; import org.apache.synapse.ServerManager; import org.apache.synapse.SynapseConstants; import org.apache.synapse.config.xml.MultiXMLConfigurationBuilder; import org.apache.synapse.core.SynapseEnvironment; import org.apache.synapse.debug.SynapseDebugInterface; import org.apache.synapse.debug.SynapseDebugManager; import org.apache.synapse.deployers.InboundEndpointDeployer; import org.apache.synapse.deployers.SynapseArtifactDeploymentStore; import org.apache.synapse.inbound.InboundEndpoint; import org.apache.synapse.registry.Registry; import org.apache.synapse.registry.RegistryEntry; import org.apache.synapse.task.TaskConstants; import org.apache.synapse.task.TaskDescriptionRepository; import org.apache.synapse.task.TaskScheduler; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; import org.osgi.service.component.ComponentContext; import org.wso2.carbon.application.deployer.service.ApplicationManagerService; import org.wso2.carbon.base.ServerConfiguration; import org.wso2.carbon.core.ServerShutdownHandler; import org.wso2.carbon.event.core.EventBroker; import org.wso2.carbon.inbound.endpoint.EndpointListenerLoader; import org.wso2.carbon.inbound.endpoint.persistence.service.InboundEndpointPersistenceService; import org.wso2.carbon.mediation.dependency.mgt.services.ConfigurationTrackingService; import org.wso2.carbon.mediation.initializer.configurations.ConfigurationManager; import org.wso2.carbon.mediation.initializer.handler.ProxyLogHandler; import org.wso2.carbon.mediation.initializer.handler.SynapseExternalPropertyConfigurator; import org.wso2.carbon.mediation.initializer.multitenancy.TenantServiceBusInitializer; import org.wso2.carbon.mediation.initializer.persistence.MediationPersistenceManager; import org.wso2.carbon.mediation.initializer.services.SynapseConfigurationService; import org.wso2.carbon.mediation.initializer.services.SynapseConfigurationServiceImpl; import org.wso2.carbon.mediation.initializer.services.SynapseEnvironmentService; import org.wso2.carbon.mediation.initializer.services.SynapseEnvironmentServiceImpl; import org.wso2.carbon.mediation.initializer.services.SynapseRegistrationsService; import org.wso2.carbon.mediation.initializer.services.SynapseRegistrationsServiceImpl; import org.wso2.carbon.mediation.initializer.utils.ConfigurationHolder; import org.wso2.carbon.mediation.ntask.internal.NtaskService; import org.wso2.carbon.mediation.registry.ESBRegistryConstants; import org.wso2.carbon.mediation.registry.services.SynapseRegistryService; import org.wso2.carbon.registry.core.CollectionImpl; import org.wso2.carbon.registry.core.Resource; import org.wso2.carbon.registry.core.exceptions.RegistryException; import org.wso2.carbon.registry.core.service.RegistryService; import org.wso2.carbon.registry.core.session.UserRegistry; import org.wso2.carbon.securevault.SecretCallbackHandlerService; import org.wso2.carbon.task.services.TaskDescriptionRepositoryService; import org.wso2.carbon.task.services.TaskSchedulerService; import org.wso2.carbon.utils.Axis2ConfigurationContextObserver; import org.wso2.carbon.utils.CarbonUtils; import org.wso2.carbon.utils.ConfigurationContextService; import org.wso2.carbon.utils.ServerConstants; import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import org.wso2.securevault.SecurityConstants; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Paths; import java.util.Properties; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @scr.component name="esb.core.initializer" immediate="true" * @scr.reference name="registry.service" * interface="org.wso2.carbon.registry.core.service.RegistryService" * cardinality="1..1" policy="dynamic" * bind="setRegistryService" unbind="unsetRegistryService" * @scr.reference name="config.context.service" * interface="org.wso2.carbon.utils.ConfigurationContextService" * cardinality="1..1" policy="dynamic" * bind="setConfigurationContextService" unbind="unsetConfigurationContextService" * @scr.reference name="application.manager" * interface="org.wso2.carbon.application.deployer.service.ApplicationManagerService" * cardinality="1..1" policy="dynamic" * bind="setAppManager" unbind="unsetAppManager" * @scr.reference name="synapse.registry.service" * interface="org.wso2.carbon.mediation.registry.services.SynapseRegistryService" * cardinality="1..1" policy="dynamic" * bind="setSynapseRegistryService" unbind="unsetSynapseRegistryService" * cardinality="1..1" policy="dynamic" * @scr.reference name="task.description.repository.service" * interface="org.wso2.carbon.task.services.TaskDescriptionRepositoryService" * cardinality="1..1" policy="dynamic" * bind="setTaskDescriptionRepositoryService" unbind="unsetTaskDescriptionRepositoryService" * @scr.reference name="task.scheduler.service" * interface="org.wso2.carbon.task.services.TaskSchedulerService" * cardinality="1..1" policy="dynamic" * bind="setTaskSchedulerService" unbind="unsetTaskSchedulerService" * @scr.reference name="secret.callback.handler.service" * interface="org.wso2.carbon.securevault.SecretCallbackHandlerService" * cardinality="1..1" policy="dynamic" * bind="setSecretCallbackHandlerService" unbind="unsetSecretCallbackHandlerService" * @scr.reference name="config.tracking.service" * interface="org.wso2.carbon.mediation.dependency.mgt.services.ConfigurationTrackingService" * cardinality="1..1" policy="dynamic" * bind="setConfigTrackingService" unbind="unsetConfigTrackingService" * @scr.reference name="eventbroker.service" * interface="org.wso2.carbon.event.core.EventBroker" cardinality="1..1" * policy="dynamic" bind="setEventBroker" unbind="unSetEventBroker" * @scr.reference name="esbntask.taskservice" * interface="org.wso2.carbon.mediation.ntask.internal.NtaskService" cardinality="0..1" * policy="dynamic" bind="setTaskService" unbind="unsetTaskService" * @scr.reference name="inbound.endpoint.persistence.service" * interface="org.wso2.carbon.inbound.endpoint.persistence.service.InboundEndpointPersistenceService" * cardinality="1..1" policy="dynamic" * bind="setInboundPersistenceService" unbind="unsetInboundPersistenceService" */ @SuppressWarnings({"JavaDoc", "UnusedDeclaration"}) public class ServiceBusInitializer { private static final Log log = LogFactory.getLog(ServiceBusInitializer.class); private static RegistryService registryService; private static ConfigurationTrackingService configTrackingService; private static ServerConfigurationInformation configurationInformation; private static ApplicationManagerService applicationManager; private static String configPath; private ConfigurationContextService configCtxSvc; private SynapseRegistryService synRegSvc; // private DataSourceInformationRepositoryService dataSourceInformationRepositoryService; private TaskDescriptionRepositoryService repositoryService; private TaskSchedulerService taskSchedulerService; private SecretCallbackHandlerService secretCallbackHandlerService; private static EventBroker eventBroker; private ServerManager serverManager; protected void activate(ComponentContext ctxt) { log.info("Starting ESB..."); // FIXME: this is a hack to get rid of the https port retrieval from the axis2 // configuration returning the non blocking https transport. Ideally we should be able // to fix this by making it possible to let the authentication of carbon be done through // the non blocking https transport setHttpsProtForConsole(); //clean up temp folder created for connector class loader reference String javaTempDir = System.getProperty("java.io.tmpdir"); String APP_UNZIP_DIR = javaTempDir.endsWith(File.separator) ? javaTempDir + "libs" : javaTempDir + File.separator + "libs"; cleanupTempDirectory(APP_UNZIP_DIR); try { BundleContext bndCtx = ctxt.getBundleContext(); ConfigurationHolder.getInstance().setBundleContext(bndCtx); TenantServiceBusInitializer listener = new TenantServiceBusInitializer(); bndCtx.registerService( Axis2ConfigurationContextObserver.class.getName(), listener, null); // initialize the lock Lock lock = new ReentrantLock(); configCtxSvc.getServerConfigContext().getAxisConfiguration().addParameter( ServiceBusConstants.SYNAPSE_CONFIG_LOCK, lock); // first check which configuration should be active UserRegistry registry = registryService.getConfigSystemRegistry(); // init the multiple configuration tracker ConfigurationManager configurationManager = new ConfigurationManager(registry, configCtxSvc.getServerConfigContext()); configurationManager.init(); // set the event broker as a property if (eventBroker != null) { configCtxSvc.getServerConfigContext().setProperty("mediation.event.broker", eventBroker); } // Initialize Synapse ServerContextInformation contextInfo = initESB(configurationManager. getTracker().getCurrentConfigurationName()); ServiceRegistration synCfgRegistration = null; ServiceRegistration synEnvRegistration = null; if (contextInfo.getSynapseConfiguration() != null) { //Properties props = new Properties(); SynapseConfigurationService synCfgSvc = new SynapseConfigurationServiceImpl(contextInfo.getSynapseConfiguration(), MultitenantConstants.SUPER_TENANT_ID, configCtxSvc.getServerConfigContext()); synCfgRegistration = bndCtx.registerService( SynapseConfigurationService.class.getName(), synCfgSvc, null); initPersistence(synCfgSvc, configurationManager.getTracker().getCurrentConfigurationName()); bndCtx.registerService( ServerShutdownHandler.class.getName(), new MPMShutdownHandler( synCfgSvc.getSynapseConfiguration().getAxisConfiguration()), null); if (log.isDebugEnabled()) { log.debug("SynapseConfigurationService Registered"); } if (configTrackingService != null) { if (log.isDebugEnabled()) { log.debug("Publishing the SynapseConfiguration to the " + "ConfigurationTrackingService"); } configTrackingService.setSynapseConfiguration(contextInfo. getSynapseConfiguration()); } } else { handleFatal("Couldn't register the SynapseConfigurationService, " + "SynapseConfiguration not found"); } SynapseEnvironment synapseEnvironment = contextInfo.getSynapseEnvironment(); if (synapseEnvironment != null) { //Properties props = new Properties(); SynapseEnvironmentService synEnvSvc = new SynapseEnvironmentServiceImpl(synapseEnvironment, MultitenantConstants.SUPER_TENANT_ID, configCtxSvc.getServerConfigContext()); synEnvRegistration = bndCtx.registerService( SynapseEnvironmentService.class.getName(), synEnvSvc, null); synapseEnvironment.registerSynapseHandler(new SynapseExternalPropertyConfigurator()); synapseEnvironment.registerSynapseHandler(new ProxyLogHandler()); if (log.isDebugEnabled()) { log.debug("SynapseEnvironmentService Registered"); } } else { handleFatal("Couldn't register the SynapseEnvironmentService, " + "SynapseEnvironment not found"); } //Properties props = new Properties(); SynapseRegistrationsService synRegistrationsSvc = new SynapseRegistrationsServiceImpl(synCfgRegistration, synEnvRegistration, MultitenantConstants.SUPER_TENANT_ID, configCtxSvc.getServerConfigContext()); bndCtx.registerService(SynapseRegistrationsService.class.getName(), synRegistrationsSvc, null); configCtxSvc.getServerConfigContext().setProperty( ConfigurationManager.CONFIGURATION_MANAGER, configurationManager); // Start Inbound Endpoint Listeners EndpointListenerLoader.loadListeners(); registerInboundDeployer(configCtxSvc.getServerConfigContext() .getAxisConfiguration(), contextInfo.getSynapseEnvironment()); } catch (Exception e) { handleFatal("Couldn't initialize the ESB...", e); } catch (Throwable t) { log.fatal("Failed to initialize ESB due to a fatal error", t); } } protected void deactivate(ComponentContext ctxt) { serverManager.stop(); serverManager.shutdown(); } private void initPersistence(SynapseConfigurationService synCfgSvc, String configName) throws RegistryException, AxisFault { // Initialize the mediation persistence manager if required ServerConfiguration serverConf = ServerConfiguration.getInstance(); String persistence = serverConf.getFirstProperty(ServiceBusConstants.PERSISTENCE); // Check whether persistence is disabled if (!ServiceBusConstants.DISABLED.equals(persistence)) { // Check registry persistence is disabled or not String regPersistence = serverConf.getFirstProperty( ServiceBusConstants.REGISTRY_PERSISTENCE); UserRegistry registry = ServiceBusConstants.ENABLED.equals(regPersistence) ? registryService.getConfigSystemRegistry() : null; // Check the worker interval is set or not String interval = serverConf.getFirstProperty(ServiceBusConstants.WORKER_INTERVAL); long intervalInMillis = 5000L; if (interval != null && !"".equals(interval)) { try { intervalInMillis = Long.parseLong(interval); } catch (NumberFormatException e) { log.error("Invalid value " + interval + " specified for the mediation " + "persistence worker interval, Using defaults", e); } } // Finally init the persistence manager MediationPersistenceManager pm = new MediationPersistenceManager(registry, configurationInformation.getSynapseXMLLocation(), synCfgSvc.getSynapseConfiguration(), intervalInMillis, configName); configCtxSvc.getServerConfigContext().getAxisConfiguration().addParameter(new Parameter( ServiceBusConstants.PERSISTENCE_MANAGER, pm)); } else { log.info("Persistence for mediation configuration is disabled"); } } private void setHttpsProtForConsole() { ServerConfiguration config = ServerConfiguration.getInstance(); if (CarbonUtils.isRunningInStandaloneMode()) { // Try to get the port information from the Carbon TransportManager // -- Standalone Mode -- final String TRANSPORT_MANAGER = "org.wso2.carbon.tomcat.ext.transport.ServletTransportManager"; try { Class transportManagerClass = Class.forName(TRANSPORT_MANAGER); Object transportManager = transportManagerClass.newInstance(); Method method = transportManagerClass.getMethod("getPort", String.class); int httpsPort = (Integer) method.invoke(transportManager, "https"); int httpPort = (Integer) method.invoke(transportManager, "http"); // required to properly log the management console URL System.setProperty("carbon.https.port", Integer.toString(httpsPort)); System.setProperty("carbon.http.port", Integer.toString(httpPort)); System.setProperty("httpPort", Integer.toString(httpPort)); System.setProperty("httpsPort", Integer.toString(httpsPort)); // this is required for the dashboard to work config.setConfigurationProperty("RegistryHttpPort", Integer.toString(httpPort)); } catch (ClassNotFoundException e) { log.error("Failed to load the transport manager class using reflection", e); } catch (Exception e) { log.error("failed to set ports http/https",e); } } else { // Try to get the port information from the carbon.xml // -- Webapp Deployment Mode -- if (log.isDebugEnabled()) { log.debug("TransportManager implementation not found. Switching to " + "webapp deployment mode. Reading HTTPS port from the carbon.xml."); } String serverURL = config.getFirstProperty("ServerURL"); if (serverURL != null) { try { URL url = new URL(serverURL); if ("https".equals(url.getProtocol())) { System.setProperty("carbon.https.port", String.valueOf(url.getPort())); } else { log.warn("Invalid protocol " + url.getProtocol() + " in Carbon server URL"); } } catch (MalformedURLException ex) { log.error("Error while parsing the server URL " + serverURL, ex); } } else { log.warn("Server URL is not specified in the carbon.xml. Unable to " + "set the HTTPS port as a system property"); } } } private ServerContextInformation initESB(String name) throws AxisFault { if (configCtxSvc != null && synRegSvc != null) { ConfigurationContext configContext = configCtxSvc.getServerConfigContext(); log.info("Initializing Apache Synapse..."); configurationInformation = ServerConfigurationInformationFactory.createServerConfigurationInformation( configContext.getAxisConfiguration()); // ability to specify the SynapseServerName as a system property if (System.getProperty("SynapseServerName") != null) { configurationInformation.setServerName(System.getProperty("SynapseServerName")); } // for now we override the default configuration location with the value in registry String synapseConfigsLocation = configurationInformation.getSynapseXMLLocation(); if (synapseConfigsLocation != null) { configurationInformation.setSynapseXMLLocation( synapseConfigsLocation + File.separator + name); } else { configurationInformation.setSynapseXMLLocation( ServiceBusConstants.DEFAULT_SYNAPSE_CONFIGS_LOCATION + name); } configurationInformation.setCreateNewInstance(false); configurationInformation.setServerControllerProvider( CarbonSynapseController.class.getName()); if (isRunningSamplesMode()) { if (System.getProperty(ServiceBusConstants.ESB_SAMPLE_SYSTEM_PROPERTY) != null) { configurationInformation.setSynapseXMLLocation( "repository" + File.separator + "samples" + File.separator + "synapse_sample_" + System.getProperty(ServiceBusConstants.ESB_SAMPLE_SYSTEM_PROPERTY) + ".xml"); } else { configurationInformation.setSynapseXMLLocation("samples" + File.separator + "service-bus" + File.separator + "synapse_sample_" + System.getProperty(ServiceBusConstants.EI_SAMPLE_SYSTEM_PROPERTY) + ".xml"); } } serverManager = new ServerManager(); ServerContextInformation contextInfo = new ServerContextInformation(configContext, configurationInformation); // TODO: Initialize with ndatasources // if (dataSourceInformationRepositoryService != null) { // DataSourceInformationRepository repository = // dataSourceInformationRepositoryService.getDataSourceInformationRepository(); // contextInfo.addProperty(DataSourceConstants.DATA_SOURCE_INFORMATION_REPOSITORY, // repository); // } if (taskSchedulerService != null) { TaskScheduler scheduler = taskSchedulerService.getTaskScheduler(); contextInfo.addProperty(TaskConstants.TASK_SCHEDULER, scheduler); } if (repositoryService != null) { TaskDescriptionRepository repository = repositoryService.getTaskDescriptionRepository(); contextInfo.addProperty(TaskConstants.TASK_DESCRIPTION_REPOSITORY, repository); } if (secretCallbackHandlerService != null) { contextInfo.addProperty(SecurityConstants.PROP_SECRET_CALLBACK_HANDLER, secretCallbackHandlerService.getSecretCallbackHandler()); } AxisConfiguration axisConf = configContext.getAxisConfiguration(); axisConf.addParameter( new Parameter(ServiceBusConstants.SYNAPSE_CURRENT_CONFIGURATION, name)); if (isRunningDebugMode()) { log.info("ESB Started in Debug mode for super tenant"); createSynapseDebugEnvironment(contextInfo); } serverManager.init(configurationInformation, contextInfo); serverManager.start(); AxisServiceGroup serviceGroup = axisConf.getServiceGroup( SynapseConstants.SYNAPSE_SERVICE_NAME); serviceGroup.addParameter("hiddenService", "true"); return contextInfo; } else { handleFatal("Couldn't initialize Synapse, " + "ConfigurationContext service or SynapseRegistryService is not available"); } // never executes, but keeps the compiler happy return null; } private boolean isDefaultRegistryStructureCreated() { if (registryService != null) { try { UserRegistry registry = registryService.getConfigSystemRegistry(); if (registry.resourceExists(ServiceBusConstants.META_INF_REGISTRY_PATH)) { Resource resource = registry.get(ServiceBusConstants.META_INF_REGISTRY_PATH); if (resource != null && ServiceBusConstants.STRUCTURE_CREATED.equals(resource .getProperty(ServiceBusConstants.DEFAULT_COLLECTIONS_PROPERTY))) { if (log.isDebugEnabled()) { log.debug("Default Registry structure of ESB has already been created"); } return true; } } } catch (RegistryException rege) { log.warn("Cannot determine whether the default registry structure " + "of the ESB is created or not.", rege); return true; } } return false; } public static boolean isRunningSamplesMode() { return System.getProperty(ServiceBusConstants.ESB_SAMPLE_SYSTEM_PROPERTY) != null || System.getProperty(ServiceBusConstants.EI_SAMPLE_SYSTEM_PROPERTY) != null; } public static boolean isRunningDebugMode() { String debugMode = System.getProperty(ServiceBusConstants.ESB_DEBUG_SYSTEM_PROPERTY); return "true".equals(debugMode) || "super".equals(debugMode); } /** * creates Synapse debug environment * creates TCP channels using command and event ports which initializes the interface to outer debugger * set the relevant information in the server configuration so that it can be used when Synapse environment * initializes * * @param contextInfo Server Context Information */ public void createSynapseDebugEnvironment(ServerContextInformation contextInfo) { try { String carbonHome = System.getProperty(ServerConstants.CARBON_HOME); File synapseProperties = Paths.get(CarbonUtils.getCarbonConfigDirPath(), "synapse.properties").toFile(); Properties properties = new Properties(); InputStream inputStream = new FileInputStream(synapseProperties); properties.load(inputStream); inputStream.close(); int event_port = Integer.parseInt(properties.getProperty(ServiceBusConstants.ESB_DEBUG_EVENT_PORT)); int command_port = Integer.parseInt(properties.getProperty(ServiceBusConstants.ESB_DEBUG_COMMAND_PORT)); SynapseDebugInterface debugInterface = SynapseDebugInterface.getInstance(); debugInterface.init(command_port, event_port); contextInfo.setServerDebugModeEnabled(true); contextInfo.setSynapseDebugInterface(debugInterface); SynapseDebugManager debugManager = SynapseDebugManager.getInstance(); contextInfo.setSynapseDebugManager(debugManager); log.info("Synapse debug Environment created successfully"); } catch (IOException ex) { log.error("Error while creating Synapse debug environment ", ex); } catch (InterruptedException ex) { log.error("Error while creating Synapse debug environment ", ex); } } private void createDefaultRegistryStructure(Registry registry) { String[] defaultCollections = ServerConfiguration.getInstance().getProperties( ServiceBusConstants.DEFAULT_ESBREGISTRY_ITEM); if (defaultCollections.length == 0) { defaultCollections = new String[]{"esb-resources/endpoints", "esb-resources/sequences", "esb-resources/policy", "esb-resources/schema", "esb-resources/scripts", "esb-resources/wsdl", "esb-resources/xslt"}; } for (String collectionName : defaultCollections) { RegistryEntry collectionEntry = registry.getRegistryEntry(collectionName); if (collectionEntry != null && ESBRegistryConstants.FOLDER.equals(collectionEntry.getType())) { if (log.isDebugEnabled()) { log.debug("Collection named " + collectionName + " is there on " + "the ESB registry, collection creation skipped"); } } else { if (log.isDebugEnabled()) { log.debug("Creating the collection " + collectionName + " on the ESB registry"); } registry.newResource(collectionName, true); } } try { UserRegistry systemRegistry = registryService.getConfigSystemRegistry(); if (systemRegistry.resourceExists(ServiceBusConstants.META_INF_REGISTRY_PATH)) { Resource resource = systemRegistry.get(ServiceBusConstants.META_INF_REGISTRY_PATH); resource.addProperty(ServiceBusConstants.DEFAULT_COLLECTIONS_PROPERTY, ServiceBusConstants.STRUCTURE_CREATED); } else { CollectionImpl collection = new CollectionImpl(); collection.setPath(ServiceBusConstants.META_INF_REGISTRY_PATH); collection.setProperty(ServiceBusConstants.DEFAULT_COLLECTIONS_PROPERTY, ServiceBusConstants.STRUCTURE_CREATED); systemRegistry.put(ServiceBusConstants.META_INF_REGISTRY_PATH, collection); } } catch (RegistryException rege) { log.warn("Couldn't persist the default ESB collections structure created action", rege); } } protected void setRegistryService(RegistryService regService) { if (log.isDebugEnabled()) { log.debug("RegistryService bound to the ESB initialization process"); } registryService = regService; } protected void unsetRegistryService(RegistryService regService) { if (log.isDebugEnabled()) { log.debug("RegistryService unbound from the ESB environment"); } registryService = null; } protected void setConfigurationContextService( ConfigurationContextService configurationContextService) { if (log.isDebugEnabled()) { log.debug("ConfigurationContextService bound to the ESB initialization process"); } this.configCtxSvc = configurationContextService; } protected void unsetConfigurationContextService( ConfigurationContextService configurationContextService) { if (log.isDebugEnabled()) { log.debug("ConfigurationContextService unbound from the ESB environment"); } this.configCtxSvc = null; } protected void setSynapseRegistryService(SynapseRegistryService synapseRegistryService) { if (log.isDebugEnabled()) { log.debug("SynapseRegistryService bound to the ESB initialization process"); } this.synRegSvc = synapseRegistryService; } protected void unsetSynapseRegistryService(SynapseRegistryService synapseRegistryService) { if (log.isDebugEnabled()) { log.debug("SynapseRegistryService unbound from the ESB environment"); } this.synRegSvc = null; } // TODO: Initialize with ndatasources // protected void setDataSourceInformationRepositoryService( // DataSourceInformationRepositoryService repositoryService) { // // if (log.isDebugEnabled()) { // log.debug("DataSourceInformationRepositoryService " + // "bound to the ESB initialization process"); // } // this.dataSourceInformationRepositoryService = repositoryService; // } // // protected void unsetDataSourceInformationRepositoryService( // DataSourceInformationRepositoryService repositoryService) { // // if (log.isDebugEnabled()) { // log.debug("DataSourceInformationRepositoryService unbound from the ESB environment"); // } // this.dataSourceInformationRepositoryService = null; // } protected void setTaskDescriptionRepositoryService( TaskDescriptionRepositoryService repositoryService) { if (log.isDebugEnabled()) { log.debug("TaskDescriptionRepositoryService bound to the ESB initialization process"); } this.repositoryService = repositoryService; } protected void unsetTaskDescriptionRepositoryService( TaskDescriptionRepositoryService repositoryService) { if (log.isDebugEnabled()) { log.debug("TaskDescriptionRepositoryService unbound from the ESB environment"); } this.repositoryService = null; } protected void setTaskSchedulerService( TaskSchedulerService schedulerService) { if (log.isDebugEnabled()) { log.debug("TaskSchedulerService bound to the ESB initialization process"); } this.taskSchedulerService = schedulerService; } protected void unsetTaskSchedulerService( TaskSchedulerService schedulerService) { if (log.isDebugEnabled()) { log.debug("TaskSchedulerService unbound from the ESB environment"); } this.taskSchedulerService = null; } protected void setSecretCallbackHandlerService( SecretCallbackHandlerService secretCallbackHandlerService) { if (log.isDebugEnabled()) { log.debug("SecretCallbackHandlerService bound to the ESB initialization process"); } this.secretCallbackHandlerService = secretCallbackHandlerService; } protected void unsetSecretCallbackHandlerService( SecretCallbackHandlerService secretCallbackHandlerService) { if (log.isDebugEnabled()) { log.debug("SecretCallbackHandlerService unbound from the ESB environment"); } this.secretCallbackHandlerService = null; } protected void setAppManager(ApplicationManagerService appService) { if (log.isDebugEnabled()) { log.debug("CarbonApplicationService bound to the ESB initialization process"); } applicationManager = appService; } protected void unsetAppManager(ApplicationManagerService appService) { if (log.isDebugEnabled()) { log.debug("CarbonApplicationService unbound from the ESB environment"); } applicationManager = null; } protected void setConfigTrackingService(ConfigurationTrackingService configTrackingService) { if (log.isDebugEnabled()) { log.debug("ConfigurationTrackingService bound to the ESB initialization process"); } ServiceBusInitializer.configTrackingService = configTrackingService; } protected void unsetConfigTrackingService(ConfigurationTrackingService configTrackingService) { if (log.isDebugEnabled()) { log.debug("ConfigurationTrackingService unbound from the ESB environment"); } ServiceBusInitializer.configTrackingService = null; } protected void setEventBroker(EventBroker eventBroker) { ServiceBusInitializer.eventBroker = eventBroker; } protected void unSetEventBroker(EventBroker eventBroker) { ServiceBusInitializer.eventBroker = null; } protected void setTaskService(NtaskService taskService) { } protected void unsetTaskService(NtaskService ntaskService) { } public static EventBroker getEventBroker() { return eventBroker; } public static ConfigurationTrackingService getConfigurationTrackingService() { return configTrackingService; } public static ApplicationManagerService getAppManager() { if (applicationManager == null) { String msg = "Before activating Mediation initializer service bundle, an instance of " + "CarbonApplicationService should be in existance"; log.error(msg); } return applicationManager; } public static ServerConfigurationInformation getConfigurationInformation() { return configurationInformation; } protected static RegistryService getRegistryService() { return registryService; } protected static ServerConfigurationInformation getServerConfigurationInformation() { return configurationInformation; } private void handleFatal(String message) { log.fatal(message); // Do not do this -- throw new RuntimeException(message); // it causes the OSGi environment to reinitialize synapse which will result in a looping } private void handleFatal(String message, Exception e) { log.fatal(message, e); // Do not do this -- throw new RuntimeException(message, e); // it causes the OSGi environment to reinitialize synapse which will result in a looping } public class MPMShutdownHandler implements ServerShutdownHandler { private AxisConfiguration configuration; public MPMShutdownHandler(AxisConfiguration configuration) { this.configuration = configuration; } public void invoke() { Parameter p = configuration.getParameter( ServiceBusConstants.PERSISTENCE_MANAGER); if (p != null && p.getValue() instanceof MediationPersistenceManager) { ((MediationPersistenceManager) p.getValue()).destroy(); } } } /** * Clean up temp files * * @param appUnzipDir */ private static void cleanupTempDirectory(String appUnzipDir) { File tempDirector = new File(appUnzipDir); if (tempDirector.isDirectory()) { File[] entries = tempDirector.listFiles(); int size = entries.length; for(int i = 0 ; i<size ; i++){ try { FileUtils.deleteDirectory(entries[i]); } catch (IOException e) { log.warn("Could not build lib artifact for path : " + entries[i].getAbsolutePath()); } } } } /** * Register for inbound hot depoyment * */ private void registerInboundDeployer(AxisConfiguration axisConfig, SynapseEnvironment synEnv) { DeploymentEngine deploymentEngine = (DeploymentEngine) axisConfig .getConfigurator(); SynapseArtifactDeploymentStore deploymentStore = synEnv .getSynapseConfiguration().getArtifactDeploymentStore(); String synapseConfigPath = ServiceBusUtils .getSynapseConfigAbsPath(synEnv.getServerContextInformation()); String inboundDirPath = synapseConfigPath + File.separator + MultiXMLConfigurationBuilder.INBOUND_ENDPOINT_DIR; for (InboundEndpoint inboundEndpoint : synEnv.getSynapseConfiguration() .getInboundEndpoints()) { if (inboundEndpoint.getFileName() != null) { deploymentStore.addRestoredArtifact(inboundDirPath + File.separator + inboundEndpoint.getFileName()); } } deploymentEngine.addDeployer(new InboundEndpointDeployer(), inboundDirPath, ServiceBusConstants.ARTIFACT_EXTENSION); } protected void setInboundPersistenceService(InboundEndpointPersistenceService inboundEndpoint) { // This service is just here to make sure that ServiceBus is not getting initialized // before the Inbound Endpoint Persistence component is up and running } protected void unsetInboundPersistenceService(InboundEndpointPersistenceService inboundEndpoint) { } }