use of org.apache.camel.api.management.ManagedResource in project camel by apache.
the class DefaultManagementMBeanAssembler method assemble.
public ModelMBean assemble(MBeanServer mBeanServer, Object obj, ObjectName name) throws JMException {
ModelMBeanInfo mbi = null;
ModelMBeanInfo standardMbi = null;
Object custom = null;
// prefer to use the managed instance if it has been annotated with JMX annotations
if (obj instanceof ManagedInstance) {
// there may be a custom embedded instance which have additional methods
custom = ((ManagedInstance) obj).getInstance();
if (custom != null && ObjectHelper.hasAnnotation(custom.getClass().getAnnotations(), ManagedResource.class)) {
LOG.trace("Assembling MBeanInfo for: {} from custom @ManagedResource object: {}", name, custom);
// get the mbean info into different groups (mbi = both, standard = standard out of the box mbi)
mbi = assembler.getMBeanInfo(obj, custom, name.toString());
standardMbi = assembler.getMBeanInfo(obj, null, name.toString());
}
}
if (mbi == null) {
// use the default provided mbean which has been annotated with JMX annotations
LOG.trace("Assembling MBeanInfo for: {} from @ManagedResource object: {}", name, obj);
mbi = assembler.getMBeanInfo(obj, null, name.toString());
}
if (mbi == null) {
return null;
}
RequiredModelMBean mbean;
RequiredModelMBean mixinMBean = null;
boolean sanitize = camelContext.getManagementStrategy().getManagementAgent().getMask() != null && camelContext.getManagementStrategy().getManagementAgent().getMask();
// as we want a combined mbean that has both the custom and the standard
if (standardMbi != null) {
mixinMBean = (RequiredModelMBean) mBeanServer.instantiate(RequiredModelMBean.class.getName());
mixinMBean.setModelMBeanInfo(standardMbi);
try {
mixinMBean.setManagedResource(obj, "ObjectReference");
} catch (InvalidTargetObjectTypeException e) {
throw new JMException(e.getMessage());
}
// use custom as the object to call
obj = custom;
}
// use a mixin mbean model to combine the custom and standard (custom is optional)
mbean = new MixinRequiredModelMBean(mbi, sanitize, standardMbi, mixinMBean);
try {
mbean.setManagedResource(obj, "ObjectReference");
} catch (InvalidTargetObjectTypeException e) {
throw new JMException(e.getMessage());
}
// Allows the managed object to send notifications
if (obj instanceof NotificationSenderAware) {
((NotificationSenderAware) obj).setNotificationSender(new NotificationSenderAdapter(mbean));
}
return mbean;
}
Aggregations