All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.datakernel.jmx.Utils Maven / Gradle / Ivy

package io.datakernel.jmx;

import io.datakernel.eventloop.jmx.EventloopJmxMBean;
import io.datakernel.jmx.api.ConcurrentJmxMBean;

import javax.management.DynamicMBean;
import javax.management.MXBean;
import java.util.List;

@SuppressWarnings("WeakerAccess")
class Utils {

	static boolean allInstancesAreOfSameType(List instances) {
		Class firstClass = instances.get(0).getClass();
		for (int i = 1; i < instances.size(); i++) {
			if (!firstClass.equals(instances.get(i).getClass())) {
				return false;
			}
		}
		return true;
	}

	static boolean isStandardMBean(Class clazz) {
		return classImplementsInterfaceWithNameEndingWith(clazz, "MBean");
	}

	static boolean isMXBean(Class clazz) {
		return classFollowsMXBeanConvention(clazz);
	}

	static boolean classImplementsInterfaceWithNameEndingWith(Class clazz, String ending) {
		String clazzName = clazz.getSimpleName();
		Class[] interfaces = clazz.getInterfaces();
		for (Class anInterface : interfaces) {
			String interfaceName = anInterface.getSimpleName();
			if (interfaceName.equals(clazzName + ending)) {
				return true;
			}
		}
		return false;
	}

	static boolean classFollowsMXBeanConvention(Class clazz) {
		Class[] interfazes = clazz.getInterfaces();
		for (Class interfaze : interfazes) {
			if (interfaceFollowsMXBeanConvention(interfaze)) {
				return true;
			}
		}

		Class superClazz = clazz.getSuperclass();
		if (superClazz != null) {
			return classFollowsMXBeanConvention(superClazz);
		}

		return false;
	}

	static boolean interfaceFollowsMXBeanConvention(Class interfaze) {
		if (interfaze.getSimpleName().endsWith("MXBean") || interfaze.isAnnotationPresent(MXBean.class)) {
			return true;
		}

		Class[] subInterfazes = interfaze.getInterfaces();
		for (Class subInterfaze : subInterfazes) {
			if (interfaceFollowsMXBeanConvention(subInterfaze)) {
				return true;
			}
		}

		return false;
	}

	static boolean isJmxMBean(Class clazz) {
		return ConcurrentJmxMBean.class.isAssignableFrom(clazz) || EventloopJmxMBean.class.isAssignableFrom(clazz);
	}

	static boolean isDynamicMBean(Class clazz) {
		return DynamicMBean.class.isAssignableFrom(clazz);
	}

	static boolean isMBean(Class clazz) {
		return isJmxMBean(clazz) || isStandardMBean(clazz) || isMXBean(clazz) || isDynamicMBean(clazz);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy