/*
* 2012-3 Red Hat Inc. and/or its affiliates and other contributors.
*
* 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.overlord.rtgov.internal.epn.jmx;
import java.lang.management.ManagementFactory;
import java.text.MessageFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.overlord.rtgov.epn.EPNManager;
import org.overlord.rtgov.epn.Network;
import org.overlord.rtgov.epn.NetworkListener;
/**
* This class provides the capability to manage the EPN Manager.
*
*/
public class EPNManagement extends javax.management.NotificationBroadcasterSupport
implements EPNManagementMBean, NetworkListener {
private static final String OBJECT_NAME_DOMAIN = "overlord.rtgov.networks";
private static final String OBJECT_NAME_MANAGER = ":name=EPNManager";
private static final Logger LOG=Logger.getLogger(EPNManagement.class.getName());
private EPNManager _epnManager;
private int _numOfNetworks=0;
/**
* The constructor.
*
* @param epnManager The EPN Manager
*/
public EPNManagement(EPNManager epnManager) {
_epnManager = epnManager;
}
/**
* The initialize method.
*/
public void init() {
LOG.info("Register the EPNManagement MBean: "+_epnManager);
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName objname=new ObjectName(OBJECT_NAME_DOMAIN+OBJECT_NAME_MANAGER);
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest("Register EPNManagement mbean="+objname);
}
mbs.registerMBean(this, objname);
} catch (Exception e) {
LOG.log(Level.SEVERE, java.util.PropertyResourceBundle.getBundle(
"epn-core.Messages").getString("EPN-CORE-15"), e);
}
_epnManager.addNetworkListener(this);
}
/**
* {@inheritDoc}
*/
public void close() throws Exception {
LOG.info("Unregister the EPNManagement MBean");
/* BAM-22 - comment out for now, as only an issue on shutdown
try {
_epnManager.removeNetworkListener(this);
} catch (Exception e) {
LOG.log(Level.SEVERE, "Failed to unregister network listener", e);
}
*/
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName objname=new ObjectName(OBJECT_NAME_DOMAIN+OBJECT_NAME_MANAGER);
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest("Unregister EPNManagement mbean="+objname);
}
mbs.unregisterMBean(objname);
} catch (Exception e) {
LOG.log(Level.SEVERE, java.util.PropertyResourceBundle.getBundle(
"epn-core.Messages").getString("EPN-CORE-16"), e);
}
}
/**
* {@inheritDoc}
*/
public void registered(Network network) {
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName objname=getObjectName(network);
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest("Register EPN mbean="+objname);
}
mbs.registerMBean(network, objname);
} catch (Exception e) {
LOG.log(Level.SEVERE, MessageFormat.format(
java.util.PropertyResourceBundle.getBundle(
"epn-core.Messages").getString("EPN-CORE-17"),
network.getName(), network.getVersion()), e);
}
_numOfNetworks++;
}
/**
* This method creates the MBean object name for the supplied
* network.
*
* @param network The network
* @return The object name
* @throws Exception Failed to create object name
*/
protected ObjectName getObjectName(Network network) throws Exception {
return (new ObjectName(OBJECT_NAME_DOMAIN+":name="
+network.getName()+",version="+network.getVersion()));
}
/**
* {@inheritDoc}
*/
public void unregistered(Network network) {
try {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName objname=getObjectName(network);
if (LOG.isLoggable(Level.FINEST)) {
LOG.finest("Unregister EPN mbean="+objname);
}
mbs.unregisterMBean(objname);
} catch (Throwable t) {
if (LOG.isLoggable(Level.FINER)) {
LOG.log(Level.FINER, MessageFormat.format(
java.util.PropertyResourceBundle.getBundle(
"epn-core.Messages").getString("EPN-CORE-18"),
network.getName(), network.getVersion()), t);
}
}
_numOfNetworks--;
}
/**
* {@inheritDoc}
*/
public int getNumberOfNetworks() {
return (_numOfNetworks);
}
}