| /* |
| * 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.apache.karaf.cellar.config.internal.osgi; |
| |
| import org.apache.karaf.cellar.config.ConfigurationEventHandler; |
| import org.apache.karaf.cellar.config.ConfigurationSynchronizer; |
| import org.apache.karaf.cellar.config.LocalConfigurationListener; |
| import org.apache.karaf.cellar.config.management.internal.CellarConfigMBeanImpl; |
| import org.apache.karaf.cellar.core.ClusterManager; |
| import org.apache.karaf.cellar.core.GroupManager; |
| import org.apache.karaf.cellar.core.Synchronizer; |
| import org.apache.karaf.cellar.core.event.EventHandler; |
| import org.apache.karaf.cellar.core.event.EventProducer; |
| import org.apache.karaf.util.tracker.BaseActivator; |
| import org.apache.karaf.util.tracker.annotation.Managed; |
| import org.apache.karaf.util.tracker.annotation.ProvideService; |
| import org.apache.karaf.util.tracker.annotation.RequireService; |
| import org.apache.karaf.util.tracker.annotation.Services; |
| import org.osgi.framework.ServiceRegistration; |
| import org.osgi.service.cm.ConfigurationAdmin; |
| import org.osgi.service.cm.ConfigurationListener; |
| import org.osgi.service.cm.ManagedService; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| import java.io.File; |
| import java.util.Hashtable; |
| |
| @Services( |
| requires = { |
| @RequireService(ClusterManager.class), |
| @RequireService(GroupManager.class), |
| @RequireService(ConfigurationAdmin.class), |
| @RequireService(EventProducer.class) |
| }, |
| provides = { |
| @ProvideService(ConfigurationListener.class), |
| @ProvideService(Synchronizer.class), |
| @ProvideService(EventHandler.class) |
| } |
| ) |
| @Managed("org.apache.karaf.shell.config") |
| public class Activator extends BaseActivator implements ManagedService { |
| |
| private final static Logger LOGGER = LoggerFactory.getLogger(Activator.class); |
| |
| private LocalConfigurationListener localConfigurationListener; |
| private ConfigurationSynchronizer configurationSynchronizer; |
| private ConfigurationEventHandler configurationEventHandler; |
| private ServiceRegistration cellarConfigMBeanRegistration; |
| |
| @Override |
| public void doStart() throws Exception { |
| |
| ClusterManager clusterManager = getTrackedService(ClusterManager.class); |
| if (clusterManager == null) |
| return; |
| GroupManager groupManager = getTrackedService(GroupManager.class); |
| if (groupManager == null) |
| return; |
| ConfigurationAdmin configurationAdmin = getTrackedService(ConfigurationAdmin.class); |
| if (configurationAdmin == null) |
| return; |
| EventProducer eventProducer = getTrackedService(EventProducer.class); |
| if (eventProducer == null) |
| return; |
| |
| File storage = new File(getString("storage", System.getProperty("karaf.etc"))); |
| |
| LOGGER.debug("CELLAR CONFIG: init event handler"); |
| configurationEventHandler = new ConfigurationEventHandler(); |
| configurationEventHandler.setConfigurationAdmin(configurationAdmin); |
| configurationEventHandler.setGroupManager(groupManager); |
| configurationEventHandler.setClusterManager(clusterManager); |
| configurationEventHandler.setStorage(storage); |
| configurationEventHandler.init(); |
| Hashtable props = new Hashtable(); |
| props.put("managed", "true"); |
| register(EventHandler.class, configurationEventHandler, props); |
| |
| LOGGER.debug("CELLAR CONFIG: init local listener"); |
| localConfigurationListener = new LocalConfigurationListener(); |
| localConfigurationListener.setClusterManager(clusterManager); |
| localConfigurationListener.setGroupManager(groupManager); |
| localConfigurationListener.setConfigurationAdmin(configurationAdmin); |
| localConfigurationListener.setEventProducer(eventProducer); |
| localConfigurationListener.init(); |
| register(ConfigurationListener.class, localConfigurationListener); |
| |
| LOGGER.debug("CELLAR CONFIG: init synchronizer"); |
| configurationSynchronizer = new ConfigurationSynchronizer(); |
| configurationSynchronizer.setConfigurationAdmin(configurationAdmin); |
| configurationSynchronizer.setGroupManager(groupManager); |
| configurationSynchronizer.setClusterManager(clusterManager); |
| configurationSynchronizer.setEventProducer(eventProducer); |
| configurationSynchronizer.setStorage(storage); |
| configurationSynchronizer.init(); |
| props = new Hashtable(); |
| props.put("resource", "config"); |
| register(Synchronizer.class, configurationSynchronizer, props); |
| |
| LOGGER.debug("CELLAR CONFIG: register MBean"); |
| CellarConfigMBeanImpl cellarConfigMBean = new CellarConfigMBeanImpl(); |
| cellarConfigMBean.setClusterManager(clusterManager); |
| cellarConfigMBean.setGroupManager(groupManager); |
| cellarConfigMBean.setConfigurationAdmin(configurationAdmin); |
| cellarConfigMBean.setEventProducer(eventProducer); |
| props = new Hashtable(); |
| props.put("jmx.objectname", "org.apache.karaf.cellar:type=config,name=" + System.getProperty("karaf.name")); |
| cellarConfigMBeanRegistration = bundleContext.registerService(getInterfaceNames(cellarConfigMBean), cellarConfigMBean, props); |
| } |
| |
| @Override |
| public void doStop() { |
| super.doStop(); |
| |
| if (cellarConfigMBeanRegistration != null) { |
| cellarConfigMBeanRegistration.unregister(); |
| cellarConfigMBeanRegistration = null; |
| } |
| if (configurationSynchronizer != null) { |
| configurationSynchronizer.destroy(); |
| configurationSynchronizer = null; |
| } |
| if (localConfigurationListener != null) { |
| localConfigurationListener.destroy(); |
| localConfigurationListener = null; |
| } |
| if (configurationEventHandler != null) { |
| configurationEventHandler.destroy(); |
| configurationEventHandler = null; |
| } |
| } |
| |
| } |