*/
package org.opendaylight.controller.config.manager.impl.dynamicmbean;
-import static java.lang.String.format;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.ArrayList;
private static final class ModuleNotificationListener implements NotificationListener {
private final ObjectName objectNameInternal;
private final MBeanServer internalServer;
- private final ObjectName thisWrapperObjectName;
private final MBeanServer configMBeanServer;
private ModuleNotificationListener(final ObjectName objectNameInternal, final MBeanServer internalServer,
- final ObjectName thisWrapperObjectName, final MBeanServer configMBeanServer) {
+ final MBeanServer configMBeanServer) {
this.objectNameInternal = objectNameInternal;
this.internalServer = internalServer;
- this.thisWrapperObjectName = thisWrapperObjectName;
this.configMBeanServer = configMBeanServer;
}
public void handleNotification(final Notification n, final Object handback) {
if (n instanceof MBeanServerNotification
&& n.getType()
- .equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) {
- if (((MBeanServerNotification) n).getMBeanName().equals(
- thisWrapperObjectName)) {
- try {
- internalServer.unregisterMBean(objectNameInternal);
- configMBeanServer.removeNotificationListener(
- MBeanServerDelegate.DELEGATE_NAME, this);
- } catch (MBeanRegistrationException
- | ListenerNotFoundException
- | InstanceNotFoundException e) {
- throw new IllegalStateException(e);
- }
+ .equals(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)
+ && ((MBeanServerNotification) n).getMBeanName().equals(
+ objectNameInternal)) {
+ try {
+ internalServer.unregisterMBean(objectNameInternal);
+ configMBeanServer.removeNotificationListener(
+ MBeanServerDelegate.DELEGATE_NAME, this);
+ } catch (MBeanRegistrationException
+ | ListenerNotFoundException
+ | InstanceNotFoundException e) {
+ throw new IllegalStateException(e);
}
}
}
}
private static final Logger LOG = LoggerFactory.getLogger(AbstractDynamicWrapper.class);
- protected final boolean writable;
protected final Module module;
private final MBeanInfo mbeanInfo;
final ObjectName thisWrapperObjectName, final MBeanOperationInfo[] dOperations,
final MBeanServer internalServer, final MBeanServer configMBeanServer) {
- this.writable = writable;
this.module = module;
this.moduleIdentifier = moduleIdentifier;
this.internalServer = internalServer;
this.objectNameInternal = thisWrapperObjectName;
// register the actual instance into an mbean server.
- registerActualModule(module, thisWrapperObjectName, objectNameInternal,
- internalServer, configMBeanServer);
+ registerActualModule(objectNameInternal, configMBeanServer);
Set<Class<?>> jmxInterfaces = InterfacesHelper.getMXInterfaces(module
.getClass());
- this.attributeHolderMap = buildMBeanInfo(module, writable,
- moduleIdentifier, jmxInterfaces, internalServer,
- objectNameInternal);
- this.mbeanInfo = generateMBeanInfo(module.getClass().getName(), module,
+ this.attributeHolderMap = buildMBeanInfo(writable,
+ moduleIdentifier, jmxInterfaces, objectNameInternal);
+ this.mbeanInfo = generateMBeanInfo(module,
attributeHolderMap, dOperations, jmxInterfaces);
}
* platform mbean server. Wait until this wrapper gets unregistered, in that
* case unregister the module and remove listener.
*/
- private final NotificationListener registerActualModule(final Module module,
- final ObjectName thisWrapperObjectName,
- final ObjectName objectNameInternal,
- final MBeanServer internalServer,
+ private final NotificationListener registerActualModule(final ObjectName objectNameInternal,
final MBeanServer configMBeanServer) {
-
try {
internalServer.registerMBean(module, objectNameInternal);
} catch (InstanceAlreadyExistsException | MBeanRegistrationException
"Error occured during mbean registration with name " + objectNameInternal, e);
}
- NotificationListener listener = new ModuleNotificationListener(objectNameInternal, internalServer, thisWrapperObjectName, configMBeanServer);
+ NotificationListener listener = new ModuleNotificationListener(objectNameInternal, internalServer, configMBeanServer);
try {
configMBeanServer.addNotificationListener(
MBeanServerDelegate.DELEGATE_NAME, listener, null, null);
return listener;
}
- private static MBeanInfo generateMBeanInfo(final String className, final Module module,
+ private static MBeanInfo generateMBeanInfo(final Module module,
final Map<String, AttributeHolder> attributeHolderMap,
final MBeanOperationInfo[] dOperations, final Set<Class<?>> jmxInterfaces) {
for (AttributeHolder attributeHolder : attributeHolderMap.values()) {
attributes.add(attributeHolder.toMBeanAttributeInfo());
}
- return new MBeanInfo(className, dDescription,
+ return new MBeanInfo(module.getClass().getName(), dDescription,
attributes.toArray(new MBeanAttributeInfo[0]), dConstructors,
dOperations, new MBeanNotificationInfo[0]);
}
// inspect all exported interfaces ending with MXBean, extract getters &
// setters into attribute holder
- private static Map<String, AttributeHolder> buildMBeanInfo(final Module module,
- final boolean writable, final ModuleIdentifier moduleIdentifier,
- final Set<Class<?>> jmxInterfaces, final MBeanServer internalServer,
+ private Map<String, AttributeHolder> buildMBeanInfo(final boolean writable, final ModuleIdentifier moduleIdentifier,
+ final Set<Class<?>> jmxInterfaces,
final ObjectName internalObjectName) {
// internal variables for describing MBean elements
for (MBeanAttributeInfo a : internalInfo.getAttributes()) {
attributeMap.put(a.getName(), a);
}
- Map<String, AttributeHolder> attributeHolderMap = new HashMap<>();
+ Map<String, AttributeHolder> attributeHolderMapLocal = new HashMap<>();
for (Method method : methods) {
if (method.getParameterTypes().length == 1
}
AttributeHolder attributeHolder = new AttributeHolder(
attribName, module, attributeMap.get(attribName)
- .getType(), writable, ifc, description);
- attributeHolderMap.put(attribName, attributeHolder);
+ .getType(), writable, ifc, description);
+ attributeHolderMapLocal.put(attribName, attributeHolder);
}
}
- return attributeHolderMap;
+ return attributeHolderMapLocal;
}
// DynamicMBean methods
}
private Object fixDependencyListAttribute(final Object attribute) {
- if (attribute.getClass().isArray() == false) {
+ if (!attribute.getClass().isArray()) {
throw new IllegalArgumentException("Unexpected attribute type, should be an array, but was " + attribute.getClass());
}
for (int i = 0; i < Array.getLength(attribute); i++) {
Object on = Array.get(attribute, i);
- if (on instanceof ObjectName == false) {
+ if (!(on instanceof ObjectName)) {
throw new IllegalArgumentException("Unexpected attribute type, should be an ObjectName, but was " + on.getClass());
}
on = fixObjectName((ObjectName) on);
}
private boolean isDependencyListAttr(final String attributeName, final Object attribute) {
- if (attributeHolderMap.containsKey(attributeName) == false) {
+ if (!attributeHolderMap.containsKey(attributeName)) {
return false;
}
} else {
LOG.debug("Operation not found {} ", actionName);
throw new UnsupportedOperationException(
- format("Operation not found on %s. Method invoke is only supported for getInstance and getAttribute(s) "
+ String.format("Operation not found on %s. Method invoke is only supported for getInstance and getAttribute(s) "
+ "method, got actionName %s, params %s, signature %s ",
moduleIdentifier, actionName, params, signature));
}