in deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/jmx/MBeanExtension.java [94:155]
private void registerObject(final ProcessManagedBean<?> bean,
final MBean mBeanAnnotation,
final BeanManager bm) throws Exception
{
final Class<?> clazz = bean.getAnnotatedBeanClass().getJavaClass();
String objectNameValue = mBeanAnnotation.objectName();
if (objectNameValue.isEmpty())
{
final String type = getConfigurableAttribute(mBeanAnnotation.type(), DEFAULT_TYPE);
final String category = getConfigurableAttribute(mBeanAnnotation.category(), DEFAULT_CATEGORY);
final String properties = getConfigurableAttribute(mBeanAnnotation.properties(), "");
final String name = mBeanAnnotation.name();
final StringBuilder builder = new StringBuilder(category).append(':');
if (!properties.contains("type="))
{
builder.append("type=").append(type);
}
else if (!DEFAULT_TYPE.equals(type))
{
LOGGER.warning("type() ignored on " + clazz + " since properties contains it.");
}
if (!properties.contains("name="))
{
if (!name.isEmpty() || properties.isEmpty())
{
builder.append(",name=");
if (name.isEmpty())
{
builder.append(clazz.getName());
}
else
{
builder.append(name);
}
} // else skip. type is important in JMX but name is a fully custom property so we are able to skip it
}
if (!properties.isEmpty())
{
builder.append(',').append(properties);
}
objectNameValue = builder.toString();
}
final ObjectName objectName = new ObjectName(objectNameValue);
final boolean normalScoped = isNormalScope(bean.getAnnotated().getAnnotations(), bm);
final Annotation[] qualifiers = qualifiers(bean.getAnnotatedBeanClass(), bm);
final DynamicMBeanWrapper mbean = new DynamicMBeanWrapper(clazz, normalScoped, qualifiers);
final MBeanServer server = mBeanServer();
if (server.isRegistered(objectName) && CoreBaseConfig.MBeanIntegration.AUTO_UNREGISTER)
{
server.unregisterMBean(objectName);
}
server.registerMBean(mbean, objectName);
objectNames.add(objectName);
wrappers.put(clazz, mbean);
LOGGER.info("Registered MBean " + objectName); // don't use canonical name cause it can reorder properties
}