private void registerObject()

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
    }