/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.aries.jmx;
import javax.management.MBeanServer;
import org.apache.aries.jmx.agent.JMXAgentContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;
/**
* <p>This class <tt>MBeanServiceTracker</tt> represents {@link ServiceTracker} for {@link MBeanServer}'s
* registered as services.
* Tracking all registered MBeanServers in ServiceRegistry.</p>
* @see ServiceTracker
* @version $Rev$ $Date$
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public class MBeanServiceTracker extends ServiceTracker {
private JMXAgentContext agentContext;
/**
* Constructs new MBeanServiceTracker.
* @param agentContext agent context.
*/
public MBeanServiceTracker(JMXAgentContext agentContext) {
super(agentContext.getBundleContext(), MBeanServer.class.getName(), null);
this.agentContext = agentContext;
}
/**
* <p>Register MBeans using {@link JMXAgentContext#registerMBeans(MBeanServer)}
* when MBeanServer service is discovered</p>
* @see ServiceTracker#addingService(ServiceReference)
*/
public Object addingService(final ServiceReference reference) {
final MBeanServer mbeanServer = (MBeanServer) super.addingService(reference);
Logger logger = agentContext.getLogger();
logger.log(LogService.LOG_DEBUG, "Discovered MBean server " + mbeanServer);
agentContext.registerMBeans(mbeanServer);
return mbeanServer;
}
/**
* <p>Unregister MBeans using {@link JMXAgentContext#unregisterMBeans(MBeanServer)}
* when MBeanServer service is removed (unregistered from ServiceRegistry) or
* tracker is closed</p>
* @see ServiceTracker#removedService(ServiceReference, Object)
*/
public void removedService(final ServiceReference reference, Object service) {
final MBeanServer mbeanServer = (MBeanServer) service;
Logger logger = agentContext.getLogger();
logger.log(LogService.LOG_DEBUG, "MBean server " + mbeanServer+ " is unregistered from ServiceRegistry");
agentContext.unregisterMBeans(mbeanServer);
super.removedService(reference, service);
}
}