blob: 25882942e2ce399fcdd74f68007a94897839c7a9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.medic.impl;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import org.eclipse.equinox.log.ExtendedLogReaderService;
import org.eclipse.virgo.medic.dump.DumpGenerator;
import org.eclipse.virgo.medic.impl.config.ConfigurationAdminConfigurationProvider;
import org.eclipse.virgo.medic.impl.config.ConfigurationProvider;
import org.eclipse.virgo.medic.log.osgi.OSGiLogServiceListener;
import org.eclipse.virgo.medic.management.MedicMBeanExporter;
import org.eclipse.virgo.util.osgi.ServiceRegistrationTracker;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.cm.ConfigurationListener;
import org.osgi.service.log.LogService;
import org.slf4j.LoggerFactory;
/**
* This class is threadSafe
*
*/
public final class MedicActivator implements BundleActivator {
private final ServiceRegistrationTracker registrationTracker = new ServiceRegistrationTracker();
private volatile ServiceReference<ExtendedLogReaderService> logReaderReference;
private LogController logController = null;
private ConfigurationProvider configurationProvider = null;
private MedicMBeanExporter medicMBeanExporter = null;
public void start(BundleContext context) throws Exception {
// Avoid logback accidentally obtaining classes from the application class loader.
System.setProperty("logback.ignoreTCL", "true");
this.configurationProvider = new ConfigurationAdminConfigurationProvider(context);
this.registrationTracker.track(context.registerService(ConfigurationListener.class.getName(), configurationProvider, null));
this.logController = new LogController(context, configurationProvider, registrationTracker);
configurationProvider.addChangeListener(logController);
logController.logStart();
logController.eventLogStart();
DumpGenerator dumpGenerator = logController.dumpStart();
//Register the platformMBeanServer with
MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
context.registerService(MBeanServer.class, platformMBeanServer, null);
this.medicMBeanExporter = new MedicMBeanExporter(configurationProvider, dumpGenerator);
this.logReaderReference = context.getServiceReference(ExtendedLogReaderService.class);
ExtendedLogReaderService logReader = context.getService(this.logReaderReference);
logReader.addLogListener(new OSGiLogServiceListener(LoggerFactory.getLogger(LogService.class)));
}
public void stop(BundleContext context) throws Exception {
MedicMBeanExporter medicMBeanExporter2 = this.medicMBeanExporter;
if(medicMBeanExporter2 != null){
medicMBeanExporter2.close();
}
this.registrationTracker.unregisterAll();
ServiceReference<ExtendedLogReaderService> localLogReaderReference = this.logReaderReference;
if (localLogReaderReference != null) {
context.ungetService(localLogReaderReference);
}
LogController logController2 = logController;
ConfigurationProvider configurationProvider2 = configurationProvider;
if (configurationProvider2 != null) {
configurationProvider2.removeChangeListener(logController2);
}
if (logController2 != null) {
logController2.dumpStop();
logController2.logStop();
}
}
}